굉장히 흥미를 불러일으키는 제목이었다. 그리고 이 책을 구매한 이유는 단지 그것뿐이었다. 사실 이 책을 쓴 사람이 데니스 리치와 함께 C programming language
를 저술한 브라이언 커니핸이라는 사실을 나중에야 알게 되었다. 이 분은 AMPL
과 awk
라는 유명한 언어를 만드신 분 중 한 분이라는 것도 이 책을 읽으며 알게 되었다. 또, 올 초에 읽었던 프로그래밍 수련법
이라는 책을 쓰셨다는 사실도 알게 되었다 무언가 알게 된 것이 많아졌다.
이 책은 우리가 늘 사용하면서도 무심결에 넘겨버린 것들에 대한 뒷이야기와 그것들이 개발 과정에 대해 이야기하고 있다. 모든 프로그램의 역사에 대해 서술했다기보다는, 지금 사용하고 있는 운영체제들에 큰 영향을 끼친 UNIX 개발과정의 흐름 자체를 쉽고 재미있게 설명해 놓았다.
1. 개발자가 주인공인 판타지 소설
본문에서, 저자인 브라이언 커니핸은 자신의 글쓰기 기술에 대해 동료에게 많은 피드백을 받았다고 쓰여있다. 그 덕분인지, 이 책을 읽으면 실제로 벨 연구소의 1127센터에 와있는 듯한 착각을 받을 정도로 몰입감 있게 쓰여있다. 특히 우리가 무심결에 사용하고 당연하다고 여기고 있는 것들이 어떠한 과정을 거쳐서 만들어졌는지 알아가는 재미를 느낄 수 있었다. 농담이아니라, 개발자가 주인공인 판타지 소설을 읽는 느낌이었다.
대표적으로 bash가 bourne-again shell
의 약자라던가, awk
가 개발한 사람들의 성에서 앞글자만을 따서 이름을 지었다던가, grep
이 ed라는 텍스트 편집기의 명령어에서 따온 이름이고(g/re/p; re에 해당하는 정규 표현식에 해당하는 모든 문자를 출력함) 이 명령어가 옥스퍼드 사전에 등재되었다던가 등등 흥미로운 이야기들이 많다. 참고로 ed는 켄 톰프슨이 텔레타이프로 입/출력하기 위해 만들었는데, 훗날 빌 조이가 개발한 vi
에게 자리를 양보한다(여담으로, 브라이언 커니핸은 편집기 개발 같은 일로 박사과정을 마치지 말라고 조언했다고 한다).
개인적으로 재미있던 것은 shell script의 문법 중 if
와 case
구문이었다.
#!/bin/bash
case a in
0) ... ;;
1) ... ;;
*) ... ;;
esac
if []
then
...
else
...
fi
if와 case는 각각 fi
, esac
로 구문이 끝났음을 표시하는데, 이것은 PWB shell을 대체하기 위해 스티븐 본이라는 사람이 본 쉘을 개발할 때 넣은 규칙이라고 한다. 정확히는, 이분이 정말 좋아했던(하지만 1127센터에서는 인기가 없었던) ALGOL68에서 따온 문법(구문을 종결하기 위해 단어를 거꾸로 뒤집어 넣는 방식)이라고 한다.
B, C, yacc, Lex, Make가 만들어 지는 과정은 누구나 꼭 읽어보았으면 한다. Lex를 프린스턴 출신 여름 인턴(에릭 슈미트)이 개선하는 이야기나, 스튜어트 펠드만이 Make를 주말 동안 만들어내는 이야기는 정말 흥미롭다. 중요한 것은 저 프로그램들이 결국 필요에 의해 만들어지고, 개선되었다는 사실이 지금의 나에게도 큰 메시지를 주었다. 그분2가 항상 말하는 개발자는 현실의 문제를 해결하는 사람 이라는 사실을 다시 한번 깨닫게 되었다.
놀라운 점은, 이 많은 것들을 이룩함에 있어 개인의 명예나 물욕을 채우려고 하지 않았다는 것이다. 다만 조금 더 효율적이고 불편한 부분을 개선하는 데 노력을 쏟았다는 느낌이 들었다. UNIX가 만들어지고, 발전하는 내내 어떠한 기능이 탄생하는 과정은 정말 geek스러운 hacker들의 모습 그 자체였다. 단지 그들은 필요에의해 만들고 개선하고 공유했을 뿐, 어떠한 기능을 통해 개인의 영달을 이루겠다는 욕심을 보이지 않았다. 특히 켄 톰프슨은 UC 버클리에서 UNIX 코드를 한 줄씩 설명해 주는 시간을 많이 가졌는데, 이는 BSD UNIX를 거쳐 자유/오픈소스 소프트웨어 운동에 영향을 주게 된다.
2. 결국 그들 덕분이다
이 책을 다 읽고 나면, 그분들의 고민과 노력의 산출물을 당연한 듯 누리고 있었다는 사실을 깨닫고 겸허해진다. 말할 것도 없이 UNIX가 없었다면 개발을 처음 배울 때 사용했던 ubuntu, 지금 이 글을 쓰는 데 사용하는 macOS도 분명히 지금의 모습과 거리가 있을 거라고 생각한다.
또한 C에서 구현되어있던 많은 아이디어가 뒤이어 만들어진 많은 언어들에 좋은 힌트가 되었을 것이다. C가 없었다면, 당장 비야네 스트롭스트룹이 C++을 어떤 형태로 만들었을지 상상하기 어렵다 애초에 이름이 C++이 아니었겠지. Java, javascript, Go 등 수 많은 언어들이 문법이나 자료형 등을 어떻게 처리하였을지 궁금해진다. 그만큼 UNIX와 그 산출물들은 지금 시대에 많은 영향을 주고 있다.
그렇기 때문에 관심이 있다면, 아니 없더라도 이 책은 꼭 한번 읽어본다면 좋을 것 같다. UNIX가 혼자 이룩한 무언가가 아님을, 협업과 공유의 가치를 알고 문제를 해결하고자 한 사람들이 있었기에 지금의 우리가 혜택을 받고 있음을 알게 될 것이다.