리눅스와 GNU 프로젝트
< 자유소프트웨어 재단>
일반적으로 리눅스라고 알려져 있는 현재의 GNU 시스템은 몇 차례의 괄목할만한 변화를 통해서 성장했으며 많은 컴퓨터 사용자들에 의해서 일상처럼 사용되고 있음에도 불구하고 그 자체에 대한 명확한 인식이나 리눅스와 GNU 시스템과의 관계에 대해서 잘 알고 있는 사람은 많지 않은 것 같다.
우리가 사용하고 있는 리눅스 그 자체는 커널(kernel)을 의미한다. 커널이 운영체제의 핵심 부분이라는 것은 틀림없는 사실이지만 그것만으로 운영체제의 역할을 수행할 수 있는 것은 아니다. 현재 사용되고 있는 GNU 시스템은 리눅스에 기반한 운영체제이며 이는 리눅스를 커널로 채택한 일종의 변형된 종류의 GNU 시스템이라고 할 수 있다. 대부분의 사용자들은 운영체제 전체를 지칭하는 이름으로서의 리눅스와 커널만을 의미하는 명칭으로서의 리눅스를 혼동해서 사용함으로써 그 차이를 명확하게 구분하지 못하고 있으며 이러한 혼재된 명칭의 사용이 그 차이를 더욱 모호하게 만들고 있다고 할 수도 있을 것이다.
프로그래머들은 리눅스가 커널이라는 사실을 대체적으로 잘 알고 있다. 따라서, 리눅스가 운영체제 전체를 의미하는 이름으로도 사용되고 있다는 사실에 대해서 거기에는 그럴 만한 타당한 이유가 있을 것이라는 생각을 리눅스의 역사를 빗대어 추측하곤 한다.
이를테면, 리누스 토발즈(Linus B. Tovalds)가 리눅스를 완성한 후에 그의 친구들이 리눅스를 기반으로 한 운영체제를 완성하기 위해서 유닉스와 유사한 시스템을 갖추기에 충분한 자유 소프트웨어들을 우연찮게 발견했기 때문에 운영체제의 이름을 그 발단이 되는 리눅스의 이름으로 사용하지 않았겠는가 하는 식으로 말이다.
그러나, 그들이 완성체에 가까운 GNU 시스템을 발견한 것은 결코 우연이 아니었다. 이는 GNU 프로젝트가 완벽한 운영체제를 만들기 위해서 가능한 모든 종류의 자유 소프트웨어들을 1984년부터 규합해 왔던 결과였으며 GNU 선언문를 발표함으로써 시작한 우리의 과업을 그후 10년 이상동안 꾸준히 수행해 온 결과였기 때문이다.
자유 소프트웨어 프로젝트는 특정 작업을 수행하기 위한 프로그램을 개발할 목적으로 진행되는 것이 일반적인 관행이다. 예를 들면, 리누스 토발즈의 리눅스 프로젝트는 유닉스 형태의 커널을 개발하기 위한 것이었으며 도날드 쿤스(Donald Knuth)와 밥 쉬라이플러(Bob Scheifler)의 프로젝트는 각각 문서 형식기(text formatter)인 Tex와 X 윈도우를 개발하기 위한 것이었다.
따라서, 리눅스가 운영체제의 핵심 요소였기 때문에 그것을 운영체제 전체의 이름으로 사용했으리라는 추측처럼 특정 프로그램이 갖고 있는 비중에 따라서 그 이름으로 전체를 대표한다는 것은 무척이나 자연스러운 발상인 것이다. 만일, GNU 프로젝트가 특정 프로그램을 개발하기 위한 프로젝트였고 위와 같은 방식으로 운영체제의 이름을 명명하게 된다면 과연 어떤 결과가 되어야 하는 것일까?
리눅스 배포판 CD-ROM의 구성을 살펴보면 리눅스 커널이 3% 정도의 비중을 차지하는데 반해서 GNU 소프트웨어는 전체 소스 코드의 약 28%에 달하며 이는 단일 항목으로서는 가장 큰 비율이다. 또한, 여기에는 시스템 운영을 위해서 반드시 필요한 핵심 요소들이 포함되어 있다. 따라서, 운영체제를 구성하는 특정 프로그램의 비중에 따라서 그 이름을 짓는다면 가장 타당한 이름은 리눅스가 아닌 GNU가 되어야 할 것이다.
그러나, 이것은 가장 중요한 점을 간과하고 있기 때문에 질문에 대한 올바른 답변이라고 할 수 없다. 그것은 GNU 프로젝트가 특정 소프트웨어 패키지를 개발하기 위한 프로젝트가 아니라는 점이다. GNU 프로젝트는 C 컴파일러나 문서 편집기와 같은 특정 소프트웨어를 개발하기 위한 것이 아니며 오히려 이들이 GNU 프로젝트를 구성하기 위해서 개발된 것이다. GNU 프로젝트의 목표는 유닉스 형태의 완벽한 운영체제를 개발하기 위한 것이며 이는 우리가 많은 사람들의 도움을 통해서 지금까지 수행해 온 사업의 핵심이다.
많은 사람들이 운영체제의 주요 부분들을 작성함으로써 많은 기여를 했고 그 프로그램들은 모두 전체 시스템을 대표할 이름으로 사용될 만한 충분한 자격이 있다. 그러나 GNU 프로젝트는 단순히 유용한 프로그램들의 집합이 아닌 통합된 시스템으로서의 운영체제 전체를 의미하기 때문에 그 이름이 특정 프로그램으로부터 차용되어서는 안되는 것이다. 우리는 자유 운영체제를 구성하기 위해서 필요한 기본 요소들을 직접 작성하기도 했다. 핵심적이지만 그 개발이 지루한 작업일 수밖에 없는 어셈블러(assembler)와 디버거(debugger), C 라이브러리(library)들을 만들었는데 이러한 프로그램들은 운영체제를 완성하기 위해서 반드시 필요한 부분들이다.
1990년대 초까지 우리는 커널이 제외된 완성도 높은 운영체제를 만들 수 있었다. 마크(Mach-매킨토시의 Mac과 구별하기 위해서 마크라고 발음한다) 운영체제에서 작동하는 커널인 GNU Hurd는 개발 중에 있었다. 이때, 우리는 리눅스의 개발이 완료되었다는 사실을 알게 되었고 곧이어 자유 소프트웨어인 리눅스 커널이 GNU 시스템에 합류함으로써 마침내 완성된 형태의 운영체제를 만들 수 있게 되었다. 그러나, 이들을 결합시킨다는 것은 말처럼 간단한 작업이 아니었다. 설치와 함께 즉시 사용할 수 있는 배포본으로서의 시스템을 구축하는 것은 무척이나 방대한 작업이었기 때문이다. 완성된 전체 시스템을 구성하는 것 이 처음이었기 때문에 C 라이브러리를 리눅스 커널에 맞게 재작성해야 했으며 이전에 다룰 수 없었던 설치와 부팅시에 고려되어야 할 CPU의 번지 지정에 대한 기계어 차원의 문제들이 해결되어야 했다. 다양한 배포본의 구성을 위해서 노력했던 많은 사람들의 수고 덕분에 결국, 리눅스와 이에 맞게 수정된 GNU 시스템은 완성된 운영체제로서의 모습을 갖출 수 있게 되었다.
유닉스 형태의 자유 운영체제를 개발하기 위한 또 하나의 프로젝트로는 버클리 대학(University of California, Berkeley)의 BSD(Berkeley Software Distribution)가 있다. BSD의 개발자들은 GNU 프로젝트와 그 개발자들에게 많은 영향을 받았지만, 실제적인 작업에 있어서는 GNU 시스템과 중복되는 부분이 없다고 볼 수 있다. 물론, 두 시스템 모두 서로의 프로그램을 조금씩 차용 하고 있기는 하지만 전체적으로 볼 때 이들은 독립적으로 발전하고 있다고 할 수 있기 때문에 오늘날의 자유 운영체제는 크게 GNU 시스템과 BSD 시스템 두 개의 영역으로 구분할 수 있을 것이다.
GNU 프로젝트는 최초에 계획했던 커널인 GNU Hurd의 개발에 중점을 두고 있지만 리눅스 커널에 기반한 GNU 시스템의 개발도 지원하고 있으며 여기에는 재정적인 지원 또한 포함되어 있다. GNU C 라이브러리에 맞게 리눅스를 재개발하는 작업을 통해서 이제 리눅스에 기반한 GNU 시스템에서도 GNU C 라이브러리를 리눅스에 맞게 수정할 필요 없이 그대로 사용할 수 있게 되었다. 우리는 또다른 리눅스 커널 기반의 GNU 시스템인 데비안(Debian) 배포판의 개발 초기 단계에서 이를 지원하기 위한 기금을 이안 멀독(Ian Murdock)에게 제공하기도 했다.
현재, 우리는 대부분의 작업에 리눅스 기반의 GNU 시스템을 이용하고 있으며 이 시스템의 사용을 많은 사람들 에게 권장하고 있다. 그러나, 리눅스를 커널과 운영체제의 이름으로 혼동해서 사용하는 지금의 경향에서 벗어나서 커널을 의미할 때는 리눅스라는 이름을, 전체 운영체제를 지칭할 때는 GNU라는 명칭을 사용해 줄 것을 간곡하게 당부하고 싶다.
저작권과 사용 허가에 대한 본 사항이 명시되는 한, 어떠한 정보 매체에 의한 본문의 전재나 발췌도 허용되며 상업적 이용을 포함할 수 있는 지속적인 배포에 따른 사용상의 모든 권리는 문서의 취득자에게 조건없이 양도된다. 단, 원문에 대한 수정과 첨삭은 허용되지 않는다.
Copyright (C) 1996, 1997 Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111, USA