Worse is Better
“더 나쁜 게 더 낫다(Worse is Better)“는 리처드 가브리엘이 말한 내용이다. 가브리엘은 Lisp 프로그래머였고, 이 글이 실린 원 발표의 제목은 “Lisp: Good News, Bad News, How to Win Big”였다. 기술적으로 명백히 앞서 있다고 믿었던 Lisp와 Lisp 머신이 왜 C와 Unix에 밀려나는에 대해 적은 자기반성에 가까운 내용이다.
구체적인 이야기는 아래와 같다.
-
MIT AI 랩과 스탠퍼드를 중심으로 한 Lisp 문화에는 “올바른 것(the Right Thing)“을 추구하는 태도가 있었다. 시스템은 완전하고 일관되고 정확해야 하며, 그렇게 만들기 위해 구현이 아무리 복잡해져도 감수한다는 것이다. 사용자가 마주하는 인터페이스에서 지저분함을 걷어낼 수 있다면, 그 지저분함은 전부 시스템 안쪽이 떠안아야 한다.
이 철학은 Lisp이라는 언어와 그 위에 세운 세계에 그대로 배어 있다. Lisp 머신은 부트스트랩부터 에디터, 디버거, 운영체제까지 거의 전부가 Lisp으로 짜인 하나의 통짜 환경이었다. 실행 중인 프로그램을 멈추지 않고 함수를 재정의하고, 이미지를 저장했다 되살리고, 시스템 어느 층이든 열어 들여다보고 고칠 수 있었다. 예외 처리, 가비지 컬렉션, 수치 타입의 자동 승격처럼 프로그래머가 신경 쓰기 싫은 것들을 언어와 런타임이 알아서 옳게 처리해줬다. 표현력과 완결성을 위해서라면 무거움을 기꺼이 받아들이는 세계였다.
가브리엘이 든 유명한 예가 이 태도를 잘 보여준다. 어떤 시스템 콜이 오래 걸리는 작업을 하는 도중에 사용자가 키를 눌러 인터럽트가 걸렸다고 하자. MIT 방식이라면 커널이 그 상황을 매끄럽게 수습해야 한다. 진행 중이던 상태를 되돌리거나 보존했다가, 사용자 프로그램은 아무 일도 없었던 것처럼 계속 이어가게 만든다. 프로그램 입장에서는 세상이 언제나 깔끔하다. 대신 그 깔끔함을 만들어내느라 커널 구현은 상당히 복잡해진다.
-
반대편에 벨 연구소의 Unix와 C, 즉 가브리엘이 “뉴저지 방식”이라 부른 것이 있다. 여기서는 구현의 단순함이 최우선이다. 구현이 단순해질 수만 있다면 인터페이스가 조금 불완전하거나 정확성을 약간 포기해도 괜찮다고 생각한다. 옳음보다 단순함이 먼저인 셈이다.
같은 인터럽트 상황에서 Unix는 시스템 콜을 그냥 실패시키고 에러 코드를 돌려준다. 뒷정리와 재시도는 사용자 프로그램의 몫이다. 프로그램마다 루프를 돌며 다시 호출해야 하니 인터페이스는 분명 지저분해지지만, 커널은 훨씬 단순하게 유지된다. 두 진영 모두 단순성·정확성·일관성·완전성을 가치로 꼽는다는 점은 같다. 갈리는 건 그 넷이 충돌할 때 무엇을 양보하느냐다. MIT는 정확성과 완전성을 지키려 인터페이스의 복잡함을 감수하고, 뉴저지는 구현의 단순함을 지키려 정확성을 조금 내준다.
가브리엘의 뼈아픈 관찰은, 더 나쁜 뉴저지 방식이 자주 이긴다는 것이다.
단순한 구현은 이식하기 쉽다. C로 짠 단순한 커널은 낯선 하드웨어에도 금방 올라간다. 반면 Lisp 머신은 그 자체가 특수한 값비싼 하드웨어를 필요로 했고, 세계 전체가 촘촘히 엮여 있어 조각내어 옮기기 어려웠다. 단순한 쪽이 먼저 퍼지면 사람들이 그 위에서 무언가를 만들기 시작하고, 부족한 부분은 시간이 지나며 채워진다. 절반만 맞아도 지금 손에 쥘 수 있는 도구가, 완벽을 목표로 아직 세상에 안 나온 도구를 이긴다. 초기의 조악함은 바이러스처럼 먼저 번진 뒤에 개선되는데, 옳음을 고집하는 쪽은 다 갖출 때까지 문밖으로 나오지 못한다.
여기엔 사람의 문제도 있다. 단순한 시스템은 이해하기 쉬워 더 많은 사람이 손대고 고치고 확장한다. 완벽하지만 복잡한 시스템은 그것을 온전히 이해하는 소수에게 묶여 있어 생태계가 자라지 못한다. Lisp이 붙잡고 있던 올바름이 오히려 확산의 발목을 잡은 셈이다.
그는 나중에 Nickieben Bourbaki라는 필명으로 자기 주장을 반박하는 글을 쓰기도 했고, worse is better가 정말 옳은지 오래도록 결론 내리지 못했다고 털어놓았다. 양가적인 해석이 가능하지만 멀리서 보자면 Lisp의 역사를 통해 기술적 우수성만으로는 승패가 갈리지 않는다는 교훈을 얻을 수 있다.