리눅스는 유닉스에서 영감을 받았지만, 리눅스는 유닉스와 분명히 유사한 점이 많지만 엄밀히 말해 유닉스는 아닙니다. 이 두 운영 체제 사이의 주요 차이점을 자세히 살펴보겠습니다.
유사점과 차이점
리눅스는 무료로 제공되는 오픈 소스 운영 체제입니다. 반면, 유닉스는 다양한 공급 업체에서 특정 하드웨어에 맞춰 제공하는 상용 제품이며, 보통 비싼 가격에 폐쇄형 소스 코드로 판매됩니다. 그럼에도 불구하고 리눅스와 유닉스는 작동 방식이 거의 동일하고 비슷한 작업을 수행한다고 볼 수 있습니다. 하지만 미묘한 차이점이 존재합니다.
단순히 기술적 또는 구조적인 차이 이상으로, 유닉스와 리눅스가 발전해 온 배경에는 역사적인 맥락과 다양한 영향이 존재합니다. 이러한 차이를 이해하려면 각각의 기원을 살펴보는 것이 필요합니다.
유닉스의 탄생
유닉스는 50년이 넘는 역사를 가지고 있습니다. 유닉스는 디지털 장비 공사(DEC)의 PDP-7 컴퓨터에서 어셈블리어로 작성된 비공식적인 프로젝트로 시작하여 벨 연구소에서 개발되었습니다. 당시 벨 연구소는 AT&T의 소유였습니다. 이후 유닉스는 DEC PDP/11/20 컴퓨터를 비롯한 벨 연구소의 여러 컴퓨터로 확산되었고, 1973년에는 C 언어로 재작성되어 유닉스 버전 4로 발전했습니다. C 언어와 컴파일러의 특성상 유닉스를 새로운 컴퓨터 아키텍처로 이식하는 것이 이전보다 쉬워졌다는 점에서 큰 의미가 있었습니다.
1973년, 켄 톰슨과 데니스 리치는 학회에서 유닉스에 관한 논문을 발표했는데, 이로 인해 벨 연구소에 유닉스 사본을 요청하는 문의가 쇄도했습니다. 하지만 당시 AT&T는 운영 체제를 판매하는 것이 허용되지 않았기 때문에 유닉스를 제품으로 취급할 수 없었습니다. 이에 따라 유닉스는 소스 코드를 라이선스 형태로 배포하게 되었습니다. 소정의 비용은 운송 및 포장 비용과 “합리적인 로열티”를 충당하기 위한 것이었으며, 기술 지원이나 버그 수정 없이 “있는 그대로” 제공되었습니다. 그러나 사용자들은 소스 코드를 받아 수정할 수 있었습니다.
유닉스는 학계에서 빠르게 확산되었고, 1975년 켄 톰슨은 벨 연구소에서 안식년을 맞아 캘리포니아 대학교 버클리에서 연구를 진행했습니다. 톰슨은 대학원생들과 함께 학교의 유닉스 사본을 개선하기 시작했고, 이들의 작업은 외부의 관심을 끌어 버클리 소프트웨어 배포(BSD)라는 첫 번째 결과물로 이어졌습니다. 초기 BSD는 기존 유닉스 시스템에 추가할 수 있는 프로그램과 시스템 수정 사항들의 모음이었지만, 독립적인 운영 체제는 아니었습니다. 이후 버전의 BSD는 완전한 유닉스 시스템으로 발전했습니다.
이로써 유닉스에는 AT&T 계열과 BSD 계열이라는 두 가지 주요 흐름이 형성되었으며, AIX, HP-UX, 오라클의 솔라리스와 같은 다양한 유닉스 변종들은 모두 이들의 후손입니다. 1984년에는 AT&T에 대한 일부 제약이 해제되어 유닉스를 제품으로 판매할 수 있게 되면서 유닉스는 본격적으로 상업화되었습니다.
리눅스의 탄생
유닉스의 상업화가 컴퓨터 사용자들의 자유를 침해한다고 생각한 리처드 스톨만은 자유를 기반으로 한 운영 체제를 개발하기 시작했습니다. 이는 소스 코드를 자유롭게 수정하고, 수정된 버전을 재배포하며, 사용자가 원하는 방식으로 소프트웨어를 사용할 수 있는 자유를 의미했습니다.
스톨만은 유닉스 소스 코드를 사용하지 않고 유닉스의 기능을 복제하는 것을 목표로 삼았습니다. 그는 운영 체제 이름을 GNU로 명명하고, 1983년에 운영 체제 개발을 위한 GNU 프로젝트를 시작했습니다. 1985년에는 GNU 프로젝트를 홍보하고 자금을 지원하기 위한 자유 소프트웨어 재단을 설립했습니다.
GNU 운영 체제의 대부분은 커널을 제외하고 순조롭게 개발되고 있었지만, GNU 허드 커널 개발은 더딘 진행을 보였습니다. (현재도 개발 중이며 출시를 앞두고 있습니다.) 커널이 없으면 운영 체제도 존재할 수 없습니다.
한편, 1987년 앤드루 S. 타넨바움은 미닉스(mini-Unix)라는 운영 체제를 출시했는데, 이는 교육용 도구로 사용되어 운영 체제 설계를 공부하는 학생들에게 도움을 주었습니다. 미닉스는 유닉스와 유사한 기능을 가진 운영 체제였지만 파일 시스템 측면에서 몇 가지 제한 사항이 있었습니다. 미닉스의 소스 코드는 단일 대학 학기 동안 충분히 다룰 수 있을 만큼 작아야 했기 때문에 일부 기능은 생략해야 했습니다.
컴퓨터 과학을 전공하는 학생이었던 리누스 토르발스는 내부 작동 원리를 더 잘 이해하기 위해 새로운 PC에서 인텔 80386 프로세서로 간단한 태스크 전환 코드를 작성하는 학습 과제를 수행했습니다. 이 코드는 결국 최초의 리눅스 커널이 된 기본 프로토커널로 발전했습니다. 토르발스는 미닉스에 익숙했고, 실제로 그의 첫 번째 커널은 리처드 스톨만의 GCC 컴파일러를 사용하여 미닉스에서 개발되었습니다.
토르발스는 교육용으로 설계된 미닉스의 한계를 극복하고 자신만의 운영 체제를 만들기로 결심했습니다. 1991년 그는 유즈넷 그룹에 자신의 프로젝트에 대한 의견과 제안을 구하는 유명한 발표를 했습니다.
리눅스는 엄밀히 말해 유닉스의 복제품은 아닙니다. 만약 리눅스가 유닉스의 복제본이었다면 그 자체로 유닉스였을 것입니다. 리눅스는 유닉스와 유사한 형태와 기능을 가지고 있지만, 동일한 요구 사항을 충족하기 위해 새로 만들어졌습니다. 따라서 복제품이라기보다는 복제물이라고 할 수 있습니다.
어느 쪽이든 리눅스는 커널을 찾고 있던 운영 체제였습니다. 그리고 GNU는 커널을 필요로 하는 운영 체제였습니다. 돌이켜보면 다음에 일어난 일은 불가피했던 것으로 보입니다. 그리고 그것은 세상을 바꾸었습니다.
개발 주체는 누구인가?
리눅스 배포판은 여러 곳에서 가져온 다양한 구성 요소들의 결합체입니다. 리눅스 커널, GNU 핵심 유틸리티 세트, 그리고 사용자 영역 응용 프로그램들이 합쳐져 실행 가능한 배포판을 만듭니다. 또한 커널, 응용 프로그램, 핵심 유틸리티를 개발하는 것 외에도 이러한 요소들을 결합하고, 유지 관리하고, 관리하는 작업이 필요합니다. 리눅스 배포판을 실제로 구현하는 데는 배포판 유지 관리자들과 각 배포판의 커뮤니티, 그리고 커널 개발자들이 모두 기여합니다.
리눅스는 캐노니컬, 레드햇과 같은 조직과 업계 후원자들의 지원을 받는 자원 봉사자들의 협력을 통해 개발되고 있습니다. 이러한 분산된 협업 방식이 리눅스 개발의 특징입니다.
반면, 각 상업용 유닉스 시스템은 사내 개발 팀 또는 엄격하게 통제되는 아웃소싱 개발 시설을 통해 일관된 하나의 주체에 의해 개발됩니다. 이러한 시스템은 종종 고유한 커널을 가지고 있으며, 각 공급 업체에서 제공하는 하드웨어 플랫폼에 맞춰 특별히 설계됩니다.
프리BSD, 오픈BSD, 드래곤BSD와 같은 BSD 유닉스 계열의 무료 및 오픈 소스 파생물들은 기존 BSD 코드와 새 코드를 혼합하여 사용합니다. 현재 이러한 프로젝트들은 커뮤니티에서 지원하고 있으며, 리눅스 배포판과 매우 유사한 방식으로 관리됩니다.
표준 및 규정 준수
리눅스는 일반적으로 단일 유닉스 사양(SUS) 또는 POSIX 표준을 따르려고 노력하며, 이 두 가지 기준에 종속되지 않고 모두 만족시키려고 합니다. 하지만 인스퍼 K-UX와 같이 POSIX와 호환되는 중국산 리눅스와 같은 예외적인 사례도 있습니다.
상업용 제품으로서의 유닉스는 표준을 준수합니다. 일부 BSD 파생 제품은 macOS 버전을 제외하고 POSIX와 호환됩니다. AIX, HP-UX, 솔라리스와 같은 변종 이름은 모두 해당 조직이 소유한 상표입니다.
상표 및 저작권
리눅스는 리누스 토르발스의 등록 상표이며, 리눅스 재단이 그의 대리인으로서 상표를 관리합니다. 리눅스 커널과 핵심 유틸리티는 다양한 GNU의 “카피레프트” 일반 공중 라이선스로 배포됩니다. 소스 코드는 자유롭게 이용할 수 있습니다.
유닉스 상표는 오픈 그룹이 소유하고 있습니다. 유닉스 소스 코드는 저작권 보호를 받으며 독점적이고 비공개입니다.
프리BSD의 저작권은 프리BSD 프로젝트에서 소유하고 있으며, 소스 코드는 공개되어 있습니다.
사용상의 차이점
명령줄 인터페이스에서는 사용자 경험 측면에서 눈에 띄는 차이가 거의 없습니다. POSIX 표준 및 규정 준수로 인해 유닉스용으로 작성된 소프트웨어는 최소한의 이식 작업을 통해 리눅스 운영 체제용으로 컴파일될 수 있습니다. 예를 들어, 셸 스크립트는 거의 수정 없이 리눅스에서 직접 사용할 수 있는 경우가 많습니다.
일부 명령줄 유틸리티에는 명령줄 옵션이 약간 다를 수 있지만, 기본적으로는 두 플랫폼에서 동일한 도구 세트를 사용할 수 있습니다. 실제로 IBM의 AIX에는 리눅스 애플리케이션용 AIX 툴박스가 포함되어 있어 시스템 관리자들이 Bash, GCC와 같은 수백 개의 GNU 패키지를 설치할 수 있습니다.
다른 유닉스 운영 체제와 마찬가지로 리눅스도 그래픽 사용자 인터페이스(GUI)를 사용할 수 있습니다. 리눅스에서 그놈이나 메이트에 익숙한 사용자들은 처음 KDE나 Xfce를 접할 때 약간 생소함을 느낄 수 있지만 곧 익숙해질 것입니다. 유닉스에서 사용할 수 있는 GUI의 범위는 모티프, 공통 데스크탑 환경, X 윈도우 시스템과 유사합니다. 대화 상자, 메뉴, 아이콘이 있는 창 환경에 익숙한 사용자라면 누구든 쉽게 탐색할 수 있을 정도로 유사한 환경을 제공합니다.
시스템을 관리하는 과정에서 더 자세한 차이점을 발견할 수 있습니다. 예를 들어, 서로 다른 초기화 메커니즘이 있습니다. System V 유닉스의 파생물과 BSD 계열은 서로 다른 초기화 시스템을 사용합니다. 무료 BSD 변종들은 BSD 초기화 체계를 유지하고 있습니다. 기본적으로 리눅스 배포판은 유닉스 System V 또는 systemd에서 파생된 초기화 시스템을 사용합니다.
수동 변속 vs 자동 변속
운전 경험에 비유하자면, 하나를 운전할 수 있다면 다른 하나도 운전할 수 있습니다. 처음에는 약간의 어려움이 있을 수 있지만요.
가격 차이를 제외하고는 철학, 라이선스, 개발 모델, 커뮤니티 조직, 거버넌스 유형 및 스타일의 차이가 grep과 같은 명령의 동작 방식에 영향을 미칠 수 있습니다.
가장 큰 차이는 화면에 보이는 것보다 더 깊은 곳에 존재합니다.