마이크로소프트(MS)를 바라보는 시선은 호의적이지 않은 경우가 많다. MS는 독점적 지위를 가진 기업이며, 과거에 보여준 시장에 대한 공격성은 충분히 그런 평가를 받을만 하다. 하지만, 그렇다고 MS가 악(惡)이며, 애플은 항상 선(善)의 위치에서 혁신을 선도하는 것은 아니다. 오히려, 오만한 NIH(Not Invented Here) 폐쇄성으로 MS가 제대로 된 경쟁 없이 독점적인 위치를 누리게 된 가장 큰 책임은 애플에게 있다.
윈도우가 매킨토시를 모방했다는, 케케묵은 논쟁 역시 지루한 논쟁 중 하나다. 잡스는 자신의 매킨토시가 GUI를 창조했다고 생각하지만, 잡스 역시 제록스 팔로 알토 연구소의 성과물을 모방했다는 비난에서 자유로울 수 없다. 여튼, 이런 이야기는 바퀴의 발명자를 따지는 논쟁과 마찬가지이다. 이제 그 이전의 유닉스, 맥, 윈도우를 지배하는 철학에 대해서 이야기 할 것이며, 여기에 이데올로기를 덧붙이는 것은 그다지 생산적인 일이 아니라는 것을 말하고자 한다.
먼저, 윈도우 플랫폼의 가장 큰 특징은 '잡식성'이다. 윈도우의 뿌리는 크게 2개로 나뉘어지는데, 게리 킬달의 CP/M-86을 흉내낸 QDOS와, NT 기반 윈도우의 직계 조상인 VMS로 나뉘어진다. 2000 이후의 윈도우는 유전적으로 완전히 VMS의 후손이며, QDOS의 후손인 MS-DOS의 흔적은 디스크 관리 정책과 윈도우의 콘솔 환경에서만 조금 나타날 뿐이다. 잡식성이라는 것은, 윈도우가 자신만의 메타포를 가지고 거기에 맞춰 성장해 온 것이 아니라, 시장의 요구에 따라 그때 그때 필요한 기술을 흡수하는 형태로 발전해왔기 때문이다. 즉, 미학적인 면을 중요시하는 애플의 맥이나, 유닉스 해커 특유의 장인 정신보다, 윈도우는 사용자와 기업의 요구에 충실히 맞춰 왔다. 윈도우는 그냥 실용적이다. 예를 들어, 윈도우의 레지스트리 구조는 이런 저런 문제를 가지고 있지만, 운영체제가 단일화된 저장소를 제공한다는 면에서 써드 파티 업체들에게 표준을 제공한다.
또, 한 시대를 풍미했던 COM 기술은 CORBA보다 기술적인 세련미가 떨어졌을지 몰라도, 바이너리 형태의 타입 라이브러리를 제공하고자 하는 벤더들에게 한동안 괜찮았던 솔루션이었다. 특히, OLE 2.0은 바이너리 차원에서 재활용이 가능한 컴포넌트 기술인 COM을 바탕으로 완전히 재작성되었으며, DDE(Dynamic Data Exchange)와 OLE 1.0을 과거의 유산으로 만들어버렸다. 이를 활용한 OLE Automation은 비주얼 베이식의 ocx로 시장에서 대단한 반향을 불러일으켰다. ActiveX는 지금은 보안 사고의 원흉이며 가장 먼저 퇴출되어야 하는 기술로 인식되고 있지만, 당시에는 네트워크까지 OLE를 확장했던 신선한 물건이었다. ActiveX는 윈도우의 성격을 잘 보여주는 상징이라고도 할 수 있다. 요구가 있어서 만들기는 했는데, 제대로 된 물건이 나오기 전까지 어쩔 수 없이 그냥 썼던.
윈도우는 그냥 '사용자의 요구'에 충실하려는 운영체제였을 뿐이고, 유닉스나 맥과 달리 종교적인 열성 사용자가 별로 없다. 특히, 일반 사용자보다 개발자 집단에게 이런 특징은 강하게 나타난다. 유닉스와 맥은 문제를 풀어내는데 있어서 플랫폼의 철학을 강하게 받지만, 윈도우는 해법이 플랫폼에 강하게 구속되지 않는다. 좋은 뜻으로 윈도우는 잡식적인 성격이 매우 강하고, 나쁜 뜻으로는 족보 없는 잡탕식 섞어 찌게다. 가장 많은 사용자층을 가졌기 때문에, 다양한 사용자로부터 여러 철학이 흘러들어 왔다는 것도 중요한 이유 중 하나다. 맥 개발자라면 프로그램을 디자인하는데 있어 최종 사용자가 어떻게 프로그램에 반응할 것인가하는 UI에 가장 신경을 많이 쓰고, 유닉스 해커라면 UI 보다 프로그램 내부 설계에 더 치중한다. 유닉스는 데이터 스트림이라는 대단히 일관적인 논리를 갖추고 있기 때문에, 최대한 작은 프로그램을 만들고, 다른 프로그램과 협력하도록 프로그램을 작성하는 것에 중점을 둔다. 따라서, 유닉스 해커들은 UI와 코어 부분을 통합하는 것보다, 코어를 잘 포장하는 프런트엔드에게 UI를 맡긴다. X 윈도우가 수 많은 윈도우 매니저를 가지는 것도 이런 철학과 무관하지 않다.
맥 개발자에게 중요한 것은 UI이며, UI부터 프로그램 디자인을 시작한다. 이것은 코드의 내부 구조에까지 영향을 미친다. 이와 반대로, 유닉스 해커는 추상적엔 데이터층과 프로토콜을 정의하는 것에서부터 프로그램을 디자인한다. 따라서, 이들의 철학은 완전히 극과 극을 달린다. 맥이 유닉스 Mach 기반이라고 하더라도, 유닉스적인 특징을 사용자에게 강요하지 않으며, 오히려 감추려고 노력한다. 맥은 무엇보다 최종 사용자(특히 아무것도 모른다고 가정하는)를 우선으로 프로그램을 작성한다. 맥 개발자에게 중요한 것은 예술적인 내부 일관성이 아니라, 최종 사용자가 경험하는 UI다.
유닉스 해커는 이런 것을 참을 수 없다. 유닉스 해커에게 무엇보다 중요한 것은 '유닉스 철학'대로 세상이 돌아가는 것이며, 쓸데없는 중복을 원하지 않는다. 왜 파이프와 표준 데이터 스트림이라는 좋은 방법을 두고 복잡하고 디버깅하기도 어려운 RPC를 사용해야 하는가? BSD 소켓은 사실 네트워크를 거치는 데이터 스트림만 대상으로 하는게 아니라, 프로세스 사이에서의 IPC를 유닉스 스타일로 깔끔하게 풀어낸 것이다. 해커들이 이끌어가는 유닉스는 대단히 논리적이지만, 그 메타포를 이해하지 못하는 사람들(해커가 아닌)에게는 극도로 어려운 운영체제가 되었다. 유닉스와 맥, 두 집단은 서로가 살아가는 방식이 못마땅하다.
윈도우는 이들의 중간에 있다. 윈도우 개발자는 UI만 우선시하는 것도 아니고, 그렇다고 내부적인 일관성을 최우선적으로 생각하고 프로그램을 작성하는 것도 아니다. 예를 들어, 윈도우의 직계 조상인 VMS는 보안 문제가 거의 없었던 OS였고, 윈도우 역시 완전하지는 않지만 이런 특징들을 가지고 있다. 그러나, 하위 호환성을 위해 응용 프로그램들이 내부 경계를 무시하는 것을 허용한다. 내부 경계를 강화하면, 거의 무제한적으로 시스템 내부에 접근했던 과거의 응용 프로그램들이 돌아가지 않기 때문이다. 보안을 강화한 비스타의 UAC가 사용자로부터 얼마나 비난을 받았는지 생각해보라.
윈도우는 맥 사용자들로부터는 '조잡하게 맥을 흉내 낸 UI'라는 비난을, 유닉스 집단으로부터는 '허술한 내부 구조'를 이유로 비난 받는다. 그러나, 애초에 윈도우는 '예술적인 UI'를 제공하려고 하지도 않았고, '논리적이고 일관된 메타포'를 최우선으로 개발하는 것도 아니다. 다만, 사용자의 요구에 맞춰 그때그때 발전해 왔던 것 뿐이다. 그런 이유 때문에 윈도우 개발자들은 새로운 윈도우에 따라 근본적으로 바뀌는 개발 방법론과 철학 때문에 고통을 받아왔다. 물론, 윈도우 비스타, 7에 이르러서는 자신만의 색깔이 확실하게 나타나고 있지만, 이것은 최근의 일이다. 현 세대 윈도우의 모든 컴포넌트들은 COM을 가장 근본 기술로 두고 있으며, 여기에 뼈대를 둔 .NET 체제로 전환했다.
여기에 이데올로기를 덧붙이는 것은 잡스와 스톨만, 그리고 하나의 플랫폼 문화에 깊이 빠진 전도사들 뿐이다. 맥이 대세가 되었더라면 UI 지상주의에 대한 비난을 피할 수 없었을 것이며, 유닉스는 예나 지금이나 사용자 친화적인 것과 담을 쌓은 UI에 대해 불평이 가득했을 것이다. 지금 윈도우가 가장 널리 쓰이고 있기 때문에, 이도저도 아닌 잡탕식 문화에 대한 비난이 봇물을 이룬다. 그러나, MS의 윈도우는 '모조품', 애플은 '겉 멋'만 잔뜩 든, 혹은 유닉스 진영의 '그들만의 세계'에 대한 이데올로기적인 비난은 완전한 시간 낭비와 같다. 이것은 필요와 취향에 따라 선택할 문제이지 서로 비난할 거리가 아니다. 이것에 대한 논쟁은 기업의 마케팅 담당자만 관심을 가질 사항이다. 세상에 수 많은 커피가 있지만, 각각의 커피 취향에 대해 이데올로기를 섞어 비난하는 것은 누가 봐도 시간 낭비일 뿐이다.
* 여기서 유닉스란 유닉스 시장을 실질적으로 통합한 리눅스를 뜻하는 것은 아니다. 리눅스는 유닉스 호환 운영체제이기는 하지만, 유닉스 과거의 전통에 집착하지 않는다. 리눅스는 가장 유닉스 같지 않은 유닉스라고도 할 수 있다.
Papyrus/Dizzy Report