By Noah | August 26, 2009
40 years ago, in August of 1969, Ken Thompson‘s wife headed west for a few weeks on a family trip, leaving Ken the month it would take to allocate “one week each to the four core components of operating system, shell, editor and assembler” that he and Dennis Ritchie decided to write after work on Multics was canceled. (see article on the BBC’s Web site.)
If you want to get a sense of just how small and beautifully done Unix was in the early days, take a look at the Level 6 Source code (PDF) and accompanying commentary from John Lions. In the late 1970’s, Lions’ notes and that source were what many of us used to learn the kernel. Yes, the entire kernel really did come in at under 9000 lines of source, and it included such enduring achievements as the open/close/read/write abstraction for files and devices, fork/exec, pipes, block and raw devices registered in the filesystem, etc. Perhaps most important, it showed that operating systems could be portable across hardware architectures.
I can offer one small anecdote relating to Ken and Unix: at the 1983 ACM Symposium on Operating Systems Principles, a small crowd of us gathered at night in the big open lounge area of the Mount Washington Hotel. Ken was making the point that what distinguished Unix was its small size and internal consistency. I asked him: “but Ken, many of the systems I’ve worked on have grown big because new features were added, and eventually we wound up with several ways of doing the same things”. “Ah,” he replied, “what makes Unix different is that whenever we add something, we take something out, so it stays small.” I think of that discussion often when I see systems like Solaris, Red Hat, Linux, or even Cygwin.
Lest the above story be taken amiss, I have tremendous admiration for Ken, whom I’ve only met once or twice since. He is one of the great computer scientists of the 20th century, and according to our several mutual friends a really nice guy. His Turing award lecture Reflections on Trusting Trust is one of the most important (and enjoyable!) papers in computer science. It includes the famous quote:
“The moral is obvious. You can’t trust code that you did not totally create yourself. (Especially code from companies that employ people like me.) No amount of source-level verification or scrutiny will protect you from using untrusted code.”
I also suspect that Ken would stand by what he said about keeping Unix small, notwithstanding some of the variants that have come along over the years.