본격적으로 시작하기 전에 유닉스(Unix)와 리눅스(Linux)에 대해 조금 더 자세히 설명드릴게요.
유닉스는 1970년대 초반, 미국 벨 연구소 직원 켄 톰슨과 데니스 리치의 주도로 개발되었습니다. 개발자들이 소프트웨어를 개발하고 실행할 수 있는, 편리한 플랫폼을 제공하기 위해 개발됐는데요. 사람이 이해하기 쉬운 고급 프로그래밍 언어, C로 대부분 작성되었기 때문에, 수정해서 다른 컴퓨터에 적용하기도 편했습니다. 그렇다보니 당시 큰 인기를 끌었고, 유닉스를 변형할 수 있는 언어인 C언어도 덩달아 인기를 얻었습니다.
유닉스를 수정해서 다른 컴퓨터에 적용하는 사례가 많아지다보니, 다양한 버전의 유닉스가 만들어졌고요. 이게 너무 많아지다보니 어느 정도 변형에 제한을 두기 위해 POSIX라는 유닉스의 표준이 만들어지기도 했습니다. 그만큼 많은 사람들이 유닉스를 활용했다는 증거겠죠?
하지만 유닉스가 만들어진 벨 연구소가 당시 AT&T라는 회사에 소속되어 있다보니, 유닉스를 사용하거나 변형할 때, AT&T에 라이센스 비용을 지불해야 했습니다.
이걸 반대하는 사람들도 있었는데요. 소프트웨어를 더 쉽고 자유롭게 공유해야 프로그래밍이 더 발전할 수 있다고 생각하는 공유의 문화가 이 당시에도 있었습니다. 그래서 '자유 소프트웨어 재단 (Free Software Foundation)’이라는 곳에서, 유닉스의 코드를 하나도 사용하지 않고, 유닉스와 유사한 운영 체제를 직접 만들기 시작했습니다. 누구나 쉽게 사용하거나 변형할 수 있는, 무료 버전을 만들어서 배포하고자 한 거죠.
이렇게 시작된 운영 체제의 이름이 GNU인데요, GNU는 "GNU's Not Unix!” 즉, “GNU는 Unix가 아니다”라는 의미의 약자입니다. GNU의 약자에 GNU가 또 들어있는 것이 재미있죠. 프로그래머식의 조크 같은 겁니다.
아무튼 GNU라는 운영 체제는 이렇게 시작되었는데, 그중에 커널이라고 하는, 운영 체제의 핵심 부분이 잘 완성되지 않고 있었습니다. 그때 마침, 핀란드에서 헬싱키 대학교를 다니던 리누스 토발즈라는 학생이 커널 하나를 완성했습니다. 리누스 토발즈는 유닉스의 교육용 버전인 미닉스라는 운영 체제에서 아이디어를 얻어서 새로운 커널을 만들었고, 리눅스(Linux)라는 이름으로 공개했습니다.
GNU 프로젝트에서는 이 커널을 가져다 쓰기로 했고, 그 결과 드디어 GNU 운영 체제가 완성이 되었습니다. GNU에 리눅스 커널을 합쳐서 만들었기 때문에, 이 운영 체제의 이름을 GNU/Linux라고 부릅니다.
참고로 우리가 흔히 말하는 리눅스는 온전한 운영 체제가 아니라, 운영 체제의 핵심 부분인 커널에만 해당합니다. 그래서 운영 체제를 얘기할 때는 그냥 리눅스(Linux)가 아니라, 반드시 GNU/Linux라고 얘기해야 한다는 사람들도 있습니다. 하지만 사실 그냥 리눅스라고 얘기하는 사람들도 많죠.
이렇게 완성된 GNU/Linux는 폭발적인 반응을 얻게 됩니다. 유닉스도 인기가 많았는데, 그걸 자유롭게 사용할 수 있도록 다시 만들어서 무료로 배포를 하니, 파급 효과가 더욱 컸겠죠. Ubuntu, Red hat, CentOS, Debian 이런 운영 체제들이 다 GNU/Linux를 변형해서 만들어진 겁니다. 이런 것들을 '리눅스 배포판’이라고 부릅니다.
그러니까, 유닉스라는 좋은 운영 체제가 만들어지고, 이걸 자유롭게 변형하고 배포할 수 있는 리눅스까지 만들어지면서 프로그래밍 업계 전체에 큰 영향을 미쳤다고 볼 수 있겠네요.
리눅스는 유닉스를 기반으로 만들어진 운영 체제라고 했었죠? 그런데 사실 유닉스를 기반으로 만들어졌던 운영 체제에는 리눅스뿐만 아니라 다른 것도 있었습니다. 바로 BSD(Berkerly Software Distribution)라고 하는 운영 체제입니다. BSD는 리눅스보다도 더 이전에 탄생한 운영 체제인데요. 유닉스가 여러 곳에서 사용되고 있던 1978년, 미국 UC 버클리(Berkerly, BSD의 첫 글자) 대학의 대학원생이었던 빌 조이(Bill joy)와 척 핼리(Chuck Haley)는 기존의 유닉스를 개량하여 BSD라는 운영체제를 개발했습니다. 이 BSD는 계속 버전이 올라가면서 널리 쓰이기 시작했고 버전이 올라가서 4.3BSD까지도 개발이 되었습니다.
그리고 NeXT라는 컴퓨터 회사에서 이 4.3BSD를 기반으로 NeXTStep이라는 운영 체제를 개발했는데요. NeXT는 사실 스티브 잡스가 그 당시 Apple 내에서 여러 갈등을 겪고 쫓겨난 후에 세운 회사입니다. Apple에서 쫓겨난 잡스가 자신만의 통찰력을 가지고 새로운 시도 혹은 재기를 하기 위해 만든 회사였죠. NeXT에서 만든 운영 체제, NeXTStep은 그 안에 구현된 진보적인 기술들로 인해 많은 주목을 받았는데요. 이 즈음에 잡스가 빠진 Apple은 기존에 가지고 있던 운영 체제의 한계를 극복할 차세대 운영 체제를 만들기 위해 노력하던 중이었습니다. 이를 위해 여러 내부 프로젝트를 시작했지만 매번 실패했고, 결국 외부에서 개발된 좋은 운영 체제를 가져와야겠다는 결심을 하게 됩니다. 이때 NeXTStep이 그 후보 중 하나였는데요. Apple은 결국 당시 존재하던 운영 체제 중에서 NeXTStep을 가져오자는 결정을 내립니다. 그리고 이를 위해 NeXT를 인수하였고 동시에 스티브 잡스는 다시 Apple로 돌아오게 되었습니다.
그 뒤로 Apple에서는 이 NeXTStep을 Apple의 기기에 이식하기 위한 프로젝트를 시작했고, NeXTStep은 오늘날 Apple에 존재하는 다양한 운영 체제인 iOS, macOS, watchOS 등의 기초가 되었습니다. 결국 정리하자면 오늘날의 macOS는 Unix - BSD - NeXTStep - macOS 순의 역사를 거쳐 탄생한 것입니다. 물론, 그 사이에 기술적으로 더 설명해야 할 부분도 있고 다른 운영 체제 이름들도 들어가야 하지만 큰 흐름은 이렇습니다. 왜 macOS도 역사적으로 그 뿌리가 결국 유닉스인지 이제 알겠죠?
중요한 건, 리눅스와 리눅스의 변형 OS, macOS 모두 유닉스의 표준을 사실상 거의 다 만족한다는 건데요. 앞서 유닉스에는 POSIX라는 표준이 있다고 했죠? 이 표준에 부합해서 공식적으로 인증을 받으면 Unix-certified, 즉 공식 유닉스가 되고요, 만약 이 표준을 인증받지 않았지만, 사용하기에 기능적으로 거의 차이가 없는 정도라면 Unix-like, 유사 유닉스라고 부릅니다.
그리고 재밌는 건, 위에서 macOS 보이시나요? macOS는 인증 절차를 거친 공식 유닉스입니다.
그러니까 이 모든 운영 체제들이 전부 다 비슷비슷하고, 특히 커맨드로 운영 체제를 사용하는 관점에서는 거의 동일하다는 거죠. 개발자 중에서도 운영 체제의 내부와 직결된 부분을 개발하는 사람들이 아니라면, 사실상 큰 차이가 없다고 볼 수 있습니다. 이게 바로 유닉스와 관련된 수많은 운영 체제들에서 유닉스 커맨드를 공통으로 사용할 수 있는 이유입니다.