This translation may not reflect the changes made since 2000-02-20 in the English original.

Please see the Translations README for information on maintaining translations of this article.

리눅스와 GNU 시스템

글: 리처드 스톨먼

일반적으로 “리눅스”라고 알려져 있는 현재의 GNU 시스템은 몇 차례의 괄목할만한 변화를 통해서 성장했으며 많은 컴퓨터 사용자들에 의해서 일상처럼 사용되고 있음에도 불구하고 그 자체에 대한 명확한 인식이나 리눅스와 GNU 프로젝트와의 관계에 대해서 잘 알고 있는 사람은 많지 않은 것 같습니다.

우리가 사용하고 있는 리눅스 그 자체는 커널을 의미한다. 커널이 운영체제의 핵심 부분이라는 것은 틀림없는 사실이지만, 그것만으로 운영체제의 역할을 수행할 수 있는 것은 아닙니다. 현재 사용되고 있는 GNU 시스템은 리눅스를 기반으로 한 운영체제이며 이는 리눅스를 커널로 채택한 일종의 변형된 종류의 GNU 시스템이라고 할 수 있습니다.

대부분의 사용자들은 운영체제 전체를 지칭하는 이름으로서의 리눅스와 커널만을 의미하는 명칭으로서의 리눅스를 혼동해서 사용함으로써 그 차이를 명확하게 구분하지 못하게 할 수도 있을 것입니다.

프로그래머들은 리눅스가 커널이라는 사실을 대체적으로 잘 알고 있습니다. 따라서 리눅스가 운영체제 전체를 의미하는 이름으로 사용되고 있다는 사실에 대해서 거기에는 그럴 만한 타당한 이유가 있을 것이라는 생각을 리눅스의 역사를 빗대어 추측하곤 합니다. 이를테면, 리누스 토발즈가 리눅스를 완성한 후에 그의 친구들이 리눅스를기반으로 한 운영체제를 완성하기 위해서 유닉스와 유사한 시스템을 갖추기에 충분한 자유소프트웨어들을 우연찮게 발견했기 때문에 운영체제의 이름을 그 발단이 되는 리눅스라고 하지 않았겠는가 하는 식으로 말입니다.

그러나 그들이 완성체에 가까운 GNU 시스템을 발견한 것은 결코 우연이 아니었습니다. 이는 GNU 프로젝트가 완벽한 운영체제를 만들기 위해서 가능한 모든 종류의자유 소프트웨어들을 1984년부터 규합해 왔던 결과였으며, GNU 선언문을 발표함으로써 시작한 우리의 과업을 그후 10년 이상동안 꾸준히 수행해 온 결과였기 때문입니다.

자유 소프트웨어 프로젝트는 특정한 작업을 수행하기 위한 프로그램을 개발할 목적으로 진행되는 것이 일반적인 관행입니다. 예를들면, 리누스 토발즈의 리눅스 프로젝트는 유닉스 형태의 커널을 개발하기 위한 것이었으며, 도날드 카누스(Donald Knuth)와 밥 쉬라이플러(Bob Scheifler)의 프로젝트는 각각 조판 프로그램인 Tex(텍)과 X 윈도우 시스템을 개발하기 위한 것이었습니다. 따라서 리눅스가 운영체제의 핵심 요소였기 때문에 그것을 운영체제 전체의 이름으로 사용했으리라는 추측처럼 특정한 프로그램이 갖고 있는 비중에 따라서 그 이름으로 전체를 대표한다는 것은 무척이나 자연스러운 발상인 것입니다.

그러나 만일, GNU 프로젝트가 특정한 프로그램을 개발하기 위한 프로젝트였고 위와 같은 방식으로운영체제의 이름을 명명하게 된다면 과연 어떤 결과가 되어야 할까요? 리눅스 배포판 CD-ROM의 구성을 살펴보면 리눅스 커널이 3% 정도의 비중을 차지하는데 반해서GNU 소프트웨어는 전체 소스 코드의 약 28%에 달하며 이는 단일 항목으로서는 가장 큰 비율입니다.또한 여기에는 시스템 운영을 위해서 반드시 필요한 핵심 요소들이 포함되어 있습니다. 따라서 운영체제를 구성하는 프로그램의 비중에 따라서 그 이름을 짓는다면 가장 타당한 이름은 리눅스가 아닌 “GNU”가 되어야 할 것입니다.

그러나 이것은 가장 중요한 점을 간과하고 있기 때문에 질문에 대한 올바른 답변이라고 할 수 없습니다. 그것은 GNU 프로젝트가 특정한 소프트웨어 패키지를 개발하기 위한 프로젝트가아니라는 점입니다. GNU 프로젝트는 C 컴파일러나 문서 편집기와 같은 소프트웨어를 개발하기 위한 것이 아니며, 오히려 이들이 GNU 프로젝트를 구성하기 위해서 개발된 것입니다. GNU 프로젝트의 목표는 유닉스 형태의 완벽한 운영체제를 개발하기 위한 것이며 이는 우리가 많은 사람들의 도움을 통해서 지금까지 수행해 온 사업의 핵심입니다.

많은 사람들이 운영체제의 주요 부분들을 작성함으로써 많은 기여를 했고, 그 프로그램들은 모두 전체 시스템을 대표할 이름으로 사용될 만한 충분한 자격이 있습니다. 그러나 GNU 프로젝트는 단순히 유용한 프로그램들의 집합이 아닌 통합된 시스템으로서의 운영체제 전체를 의미하기 때문에그 이름이 특정 프로그램으로부터 차용되어서는 안되는 것입니다. 우리는 자유 운영체제를 구성하기 위해서 필요한 기본 요소들을 직접 작성하기도 했습니다. 핵심적이지만 그 개발이 지루한 작업일 수밖에 없는 어셈블러와 디버거, C 라이브러리들을 만들었는데 이러한 프로그램들은 운영체제를 완성하기 위해서 반드시 필요한 부분들입니다.또한 프로그래밍 도구 이외에 포스트스크립트 인터프리터인 고스트스크립트와 본셸(Bourne Again SHell) 등도 만들었습니다.

1990년대 초까지 우리는 커널이 제외된 완성도 높은 운영체제를 만들 수 있었습니다. Mach(마하 또는 마크)에서 작동하는 커널인 GNU Hurd는 개발 중에 있었습니다. GNU HURD의 개발은 아직도 진행 중인 상태에 있습니다.

다행스럽게도 우리는 리누스 토발즈가 개발한 커널인 리눅스의 개발이 완료되었다는 사실을 알게 되었고, 곧이어 자유 소프트웨어인 리눅스 커널이 GNU 시스템에 합류함으로써 마침내 완성된형태의 운영체제를 만들 수 있게 되었습니다.

그러나 이들을 결합시킨다는 것은 말처럼 간단한 작업이 아니었습니다. 설치와 함께 즉시 사용할 수 있는 배포본으로서의 시스템을 구축하는 것은 무척이나 방대한 작업이었기 때문입니다. 완성된전체 시스템을 구성하는 것이 처음이었기 때문에 GNU C 라이브러리를 리눅스 커널에 맞게 재작성해야 했으며, 이전에 다룰 수 없었던 설치와 부팅시에 고려되어야 할 CPU의 번지 지정에 대한 기계어 차원의 문제들이 해결되어야 했습니다. 다양한 배포본의 구성을 위해서 노력했던 많은 사람들의 수고 덕분에, 결국 리눅스와 이에 맞게 수정된 GNU 시스템은 완성된 운영체제로서의 모습을 갖출 수 있게 되었습니다.

GNU 프로젝트는 최초에 계획했던 커널인 GNU Hurd의 개발에 중점을 두고 있지만 리눅스 커널에 기반한 GNU 시스템의 개발도 지원하고 있으며 여기에는 재정적인 지원 또한 포함되어 있습니다. GNU C 라이브러리에 맞게 리눅스를 재개발하는 작업을 통해서 이제 리눅스에 기반한 GNU 시스템에서도 GNU C 라이브러리를 리눅스에 맞게 수정할 필요 없이 그대로 사용할 수 있습니다.우리는 또다른 리눅스 커널 기반의 GNU 시스템인 데비안 GNU/Linux의 개발 초기 단계에서 이를 지원하기 위한 기금을 이안 멀독(Ian Murdock)에게 제공하기도 했습니다.

현재, 우리는 대부분의 작업에 리눅스 기반의 GNU 시스템을 이용하고 있으며 이 시스템의 사용을 많은 사람들 에게 권장하고 있습니다. 그러나 리눅스를 커널과 운영체제의 이름으로 혼동해서 사용하는지금의 경향에서 벗어나서 커널을 의미할 때는 리눅스라는 이름을, 운영체제 전체를 지칭할 때는 GNU라는 명칭을 사용해 줄 것을 간곡하게 당부하고 싶습니다.

유닉스 형태의 자유 운영체제를 개발하기 위한 또하나의 프로젝트로 UC 버클리 대학의 BSD가 있습니다. BSD의 개발자들은 GNU 프로젝트와 그 개발자들에게 많은 영향을 받았지만, 실제적인 작업에 있어서는 GNU 시스템과 중복되는 부분이 없다고 볼 수 있습니다. 물론, 두 시스템 모두 서로의 프로그램을 조금씩 차용하고 있기는 하지만 전체적으로 볼 때 이들은 독립적으로 발전하고 있다고 할 수 있기 때문에 오늘날의 자유 운영체제는 크게 GNU 시스템과 BSD 시스템 두개의 영역으로 구분할 수 있습니다.