
Mac OS X vs Linux on the iPhone and Mobile Devices
Friday, February 2, 2007
윈도모바일과
Palm OS, Linux,
Symbian이 현재 스마트폰을 움직이는 운영체제다. 아이폰에 쓰이는 오에스텐과 이들을 비교하면 어떨까? 본 글은 리눅스를 한 번 돌아보기로 한다.
휴대 기기용 리눅스의 사용은, 아이폰에 데스크톱 맥오에스텐의 한 버전을 사용하려는 애플식 접근과 유사하다. Palm OS에서 마이크로소프트 WinCE, Symbian 등 다른 휴대기기용 운영체제도 그 시작부터 PDA는 아니었다. 나중에 휴대폰용으로 채택이 된 것이다.
오에스텐도, 리눅스도 휴대기기용으로 태어나지는 않았다. 둘 다 일반적인 목적의 컴퓨터 환경용 디자인으로 태어났다.
즉, 간단한 전화기용으로는 최선의 선택이 아닐지라도, 둘 모두 인터넷 기기와 미디어 플레이어로 전화기를 활용할 때 좋은 선택이 될 수 있다. 본 글에서는 역사적인 의미에 대해 알아보도록 한다.
Pre-Linux GNU: 1983-1990
사실 사용자 대부분이 리눅스를 다룰 때 맞닥뜨리는 부분은 전혀 리눅스가 아니다.
GNU 유저랜드(userland)일 뿐이다. 1983년, 리차드 스톨만(Richard Stallman)이 만든 것이 GNU 프로젝트이다. 그는 상용 유닉스와 호환성을 갖되, AT&T의 비싼 라이센스 비용을 내지 않는 완전한 자유 컴퓨팅 환경을 일구고자 했었다.

80년대 GNU는 유닉스-스타일의 유저랜드 패키지와 프로그램을 제공하였다.
- GCC: GNU Compiler Collection
- GNU C library
- GNU Binaries Utilities
- GNU Core Utilites
- bash command line shell
- GNU Emacs: 텍스트에디터
GNU HURD and Microkernels: 1990-1996
1990년의 GNU 유저랜드는 거의 완성이 되어 있었으며, 그 때의 관심사항은
커널 구축이었다. 기존의 "모노리딕" 운영체제 커널을
마이크로커널 디자인으로 교체하려는 시도는 80년대 후반과 90년대 초반 상당한 유행세를 탔었다.
GNU는 마이크로커널과 외부 서버를 한데 모아
GNU HURD를 만들 계획이었다. 이 GNU HURD는 기존의 전통적인 유닉스 커널을 진보적인 기술로 바꾸려는 의도를 갖고 있었다.
개념은 간단했다. 로우레벨에 모든 것을 관장하는 하나의 거대한 코드가 아닌, 작고 매우 안전한 마이크로커널을 디자인하자가 그 목표였다. 이 마이크로커널은 저변의 하드웨어하고만 상호작용하면서, 그 위에 있는 외부 서버와의 메시지 교환으로 돌아가는 방식이었다.
마이크로커널 시스템은 프로세서 포팅이 더 간단하고 간편하며, 퍼포먼스 최적화도 더 쉽고, 한 번에 다중 운영체제를 모두 지원할 수 있는 잠재성도 갖고 있었다.

그동안
마흐에 관심을 지대하게 갖고 있던 곳은 CMU(카네기멜론대학)였다. 전통적인 BSD 유닉스 커널에 마이크로커널을 입힌 실험이 바로 마흐(Mach)다. 마흐는 두 번째 버전에서도 아직 진정한 마이크로커널이 아니라, 멀티쓰레딩 커널 개념을 통합한 다소 잡종 디자인이었다. 게다가 외부 서버 컴퍼넌트로 모든 BSD 코드를 내몰지도 못하였다. 그 기능은 버전 3에 계획되어 있었다.
NeXT(넥스트)는 마흐 2.5로 독자적인 운영체제 작업을 시작하였고, 여기에 OSF와 애플, IBM, GNU가 가세하였다. 넥스트와는 별개로 이 회사들은 마흐 3을 완전한 마이크로커널로 제작하려 하였다. 하지만 문제점이 많았다. 마이크로커널 디자인은 일반적인 목적의 컴퓨팅에는 잘 어울리지 못하였다.
그리고 90년대 중반, 윈도NT를 갖고 마이크로소프트도 마이크로커널 유행에 동참한다. 하지만 다른 회사들은 모두 마이크로커널 디자인이 그리 좋지 못하다는 점을 인식하고 있었다. 마이크로소프트 역시 NT 3.x에서 유사한 문제를 발견하였고, 컴퍼넌트를 커널 안쪽으로 밀어 넣어서 퍼포먼스를 개선시키는 등, NT 3.x를 상당히 변화시켰다. 이 모두가 안정성과 안전성을 담보로 한 것이었다. 다름 아닌, NT 4.0이다.
The Linux Kernel: 1991-1996
1991년, 리누스 토발즈(Linus Torvalds)는 BSDi에 대한 AT&T가 일어나기 직전에, 완전히 새로운 커널을 목표로
Linux를 만들기 시작하였다. 이어진 AT&T 소송 때문에, 완전하면서 무료인 유닉스 대안은 이제 BSD 밖에 안 남게 되었다. 하지만 미래는 알 수 없는 노릇이었다. 당시 소송은 해결이 되었지만, 이러한 상황 때문에 리눅스가 AT&T와 BSD에 이은 제 3의 대안으로 떠오르게 된다.

리눅스 커널은 기존의 모노리딕 커널 디자인을 따랐다. 사실 BSD를 다시 만들었다 할 수 있지만, 자발적인 재능으로 처음부터 끝까지 만들어냈다고 할 만 하다.
GNU의 HURD 마이크로커널이 실패로 끝난 이후, GNU 프로젝트가 완성시킨 유저랜드 소프트웨어와 리눅스 커널의 조합은, 완전하되 무료 유닉스 대안을 제공하였다. 따라서 GNU/리눅스라는 용어가 나오게 되지만, 일반적으로는 그저 리눅스라 불린다.
리눅스는 동일한
GPL 라이센스인 GNU 소프트웨어 라이센스로 제공된다. 즉, 리눅스의 어느 부분도 자유로이 최적화시킬 수 있다. 리눅스는 또한 소스코드와 개선점을 모두 공개하는 한, 배포가 자유롭다.
수많은 기업이 자사판 리눅스를 만들어냈으며, 필요에 따라 특수하게 만든 곳도 있고, 이미 무료로 입수가능한 제품을 다시 재판매하여 수익을 거두는 곳도 있다.
애플은 1996년, OSF와 함께 리눅스 배포판인 mkLinux를 만든다. 이 리눅스는 마흐 3.0 마이크로커널상에서 돌아가며, 맥 하드웨어에서 리눅스를 쓰려는 리눅스 사용자들을 겨냥하였다.

그 해 말, 넥스트를 인수한 후, 마흐 3.0이나 리눅스에 대한 애플의 관심은 줄어든다. 넥스트의 마흐/BSD 잡종 커널상에서 새 운영체제를 개발해야 했기 때문이다. 맥오에스텐의 코어를 차지하는 이 커널은 다윈 오픈소스 프로젝트로 나타난다.
Linux vs. Darwin at Apple: 1997-2007
1997년의 세상은 1992년의 마흐 유행때처럼, 리눅스에 열광하였다. 마흐 3.0 개발이 실망을 가져온 이후, 마흐에 대한 열광은 사그라들고 없던 때였다.
용어도 제대로 소화 못하는 컬럼니스트와 분석가들도 나선다. 애플의 엔지니어링 해결책으로 마흐를 몰아내고, 다른 모두처럼 리눅스를 쓰라는 조언을 하기 시작한 때도 이 때이다.
하지만 그들은 몰랐다. 애플의 엔지니어들은 리눅스와 넥스트의 마흐/BSD 커널에 모두 친숙했다. 그리고 둘 모두가 동시에 개발되고 있었다. 게다가 애플은
A/UX와 IBM의 AIX, Copland나 다른 실험 프로젝트에 관련된 커널 개발 등, 오래된 유닉스 개발 경험을 축적하고 있었다.
애플 엔지니어들이 맥오에스텐의 기반으로 리눅스를 선택하지 않은 이유는 여러가지가 있다. 우선, BSD 자체가 리눅스보다 여러가지 면에서 더 낫다. "
Mac OS X 리눅스 커널 미신을 벗긴다 1-11"에서 인용한다.
"리눅스는 일처리만 해주면 될 정도로 디자인되었다. 리누스 토발즈(Linus Torvalds)도 리눅스가 완벽한 아키텍쳐라고 주장한 적이 없으며, 오히려 최고의 디자인에 대한 비교를 피했다. 리눅스 코드 품질은 이제까지 의심을 받은 적이 없다.
더구나 리눅스와 같은 개방된 코드기반은 여러가지 수정이 가능하다. 즉, 라우터나 DVR을 만드는 회사라면 리눅스가 커다란 장점을 안겨다준다. 그러나 애플은 스스로 코드를 개발하는 편이 더 어울린다. 그래야 필요하다고 판단한 부분에서 중대한 변화를 이끌어낼 수 있기 때문이다.
"여러가지 필요때문에 애플이 나서서 커널 디자인을 해야 할 필요는 없다. 따라서, 애플은 맥 오에스 텐에 어울리는 이상적인 아키텍쳐 구축을 이상주의자들의 계획에 맡길 수 있다. 덕분에 애플은 끌끔하고 현대적인 아이디어로 시작하고 옛날의 거추장스러운 아이디어는 물릴 수 있게 되었다. 그 분명한 사례가 launchd이다."
애플은 리눅스를 판매하는 회사들 대부분보다 훨씬 고유한 커널을 개발한다. 또한 리눅스 커널에 대한 수정은 위원회의 결정에 의거한다. 따라서 리눅스에 기반을 두면서 큰 변화를 일으키려면, 애플도 허락을 받아야 했을 것이다. 리눅스로 만들어 봤자 이득이 없는 것이다.
"애플은 API로 어떤 변화를 시켜야 할지 주의깊게 통제해야 한다. 그래야 외부 개발자들이 API 상에서 일관성있고 안정적으로 작업할 수 있기 때문이다. 애플이 하부 부분의 통제를 하지 못할 경우 이 일은 극히 어려워진다. 즉, 이런 이유만으로도 애플은 리눅스를 채택할 수 없다."
더 자세히 알아볼 수록, 애플이 리눅스를 이용하지 않는 이유는 더욱 분명해진다. 2000년 이후로, 애플은 맥오에스텐의 새 버전을 빠르게 개발해왔고, PowerPC에서 인텔 프로세서로의 이주도 단행하였다. 그리고 유닉스가 들어간 맥을 2600만 대 이상 판매하였다.

외부 단체가 관리하는 코드로 작업을 했더라면, 애플은 위의 개발을 하면서 지속적으로 태클을 당했을 것이다.
Shared Software between Linux and OS X
애플리케이션 레이어 하에서, 리눅스와 오에스텐의 실질적인 차이점은 각자의 핵심 커널 디자인에 따른다.
애플의 커널은 넥스트에서 빌려왔다. Mach/BSD 하이브리드 디자인은 애플이 계속 업데이트시켜왔다. 관련된 현대적 기능을 계속 통합시키면서 말이다.
맥오에스텐의 유저랜드는 모든 곳에서 나온다. GCC 컴파일러를 포함하여 GNU 소프트웨어에서도 상당한 부분을 빌려 쓰고 있다. 타이거에서 애플은 이제까지 기본 셸로 쓰던 tsch 대신, 전형적인 리눅스 배시 커맨드라인셸을 채택하기도 하였다.
리눅스 사용자들은 맥오에스텐으로 작업할 때, 파일 위치와 같은 사소한 차이 말고는 새로 배워야 할 부분이 없을 정도다. 리눅스 서버 소프트웨어도 보통은 맥오에스텐으로의 포팅에 별 어려움이 없다. 게다가 애플 스스로와 수많은 써드파티들이 오픈소스코드로부터 혜택을 많이 보고 있다.
휴대기기에 있어서 리눅스와 오에스텐의 제일 큰 차이는 애플만 오에스텐을 사용한다는 데에 있을 것이다. 오픈소스 지지자들 생각으로는 이런 방식이 자유의 통제를 의미한다. 코드 접근성과 써드파티 개발 가능성의 문제도 야기할 수 있겠다.
다음 기사는 그 주제에 대해 알아보겠다.
What do you think? I really like to hear from readers. Leave a comment or email me with your ideas.
Mac OS X vs Linux on the iPhone and Mobile Devices