Interview with Ken thompson





Unix and Beyond: An

Interview with Ken
Thompson
Daniel Cooke
Texas Tech University
Joseph Urban
Arizona State University
Scott Hamilton
Computer
Computer
recently visited Ken Thompson at Lucent’s Bell Labs to learn
about Thompson’s early work on Unix and his more recent work in
distributed computing.
Ken Thompson needs no introduction: the co-creator of the Unix operating system as well as the
Plan 9 and Inferno distributed operating systems; creator, along with Joseph Condon, of Belle, a
world champion chess computer; 1998 US National Medal of Technology winner, along with
Dennis Ritchie, for their role in developing the Unix system and C.
On the occasion of the presentation of the Computer Society’s and Hitachi’s inaugural Tsutomu
Kanai Award for distributed computing,
Computer
visited recipient Ken Thompson at Lucent’s
Bell Labs. We were interested in learning about Thompson’s early work on Unix and his more
recent work in distributed computing. We were especially interested in learning about the
creative process within Bell Labs and his sense of where computer science was heading.
CREATIVITY AND SOFTWARE DEVELOPMENT
Computer.
Your nominators and endorsers for the Kanai Award consistently characterized your
work as simple yet powerful. How do you discover such powerful abstractions?
Thompson.
It is the way I think. I am a very bottom-up thinker. If you give me the right kind of
Tinker Toys, I can imagine the building. I can sit there and see primitives and recognize their
power to build structures a half mile high, if only I had just one more to make it functionally
complete. I can see those kinds of things.
The converse is true, too, I think. I
can’t
from the building imagine the Tinker Toys. When I see a
top-down description of a system or language that has infinite libraries described by layers and
layers, all I just see is a morass. I can’t get a feel for it. I can’t understand how the pieces fit; I
can’t understand something presented to me that’s very complex. Maybe I do what I do because
if I built anything more complicated, I couldn’t understand it. I really must break it down into
little pieces.


Computer.
In your group you probably have both the bottom-up thinker and the top-down
thinker. How do you interact with both?
Thompson.
I think there’s room for both, but it makes for some interesting conversations, where
two people think they are talking to each other but they’re not. They just miss, like two ships in
the night, except that they are using words, and the words mean different things to both sides. I
don’t know how to answer that really. It takes both; it takes all kinds.
Occasionally-maybe once every five years-I will read a paper and I’ll say, "Boy, this person just
doesn’t think like normal people. This person thinks at an orthogonal angle." When I see people
like that, my impulse is to try to meet them, read their work, hire them. It’s always good to take
an orthogonal view of something. It develops ideas.
I think that computer science in its middle age has become incestuous: people are trained by
people who think one way. As a result, these so-called orthogonal thinkers are becoming rarer
and rarer. Of course, many of their ideas have become mainstream-like message passing, which I
thought was something interesting when I first saw it. But occasionally you still see some very
strange stuff.
SOFTWARE DEVELPOMENT PARADIGMS
Computer.
What makes Plan 9 and the Inferno network operating system very striking is the
consistent and aggressive use of a small number of abstractions. It seems clear that there’s a
coherent vision and team assembled here working on these projects. Could you give us further
insight into how the process works?
Thompson.
The aggressive use of a small number of abstractions is, I think, the direct result of a
very small number of people who interact closely during the implementation. It’s not a committee
where everyone is trying to introduce their favorite thing. Essentially, if you have a technical
argument or question, you have to sway two or three other people who are very savvy. They
know what is going on, and you can’t put anything over on them.
As for the process, it’s hard to describe. It’s chaotic, but somehow something comes out of it.
There is a structure that comes out of it. I am a member of the Computing Sciences Research
Center, which consists of a bunch of individuals-no teams, no leaders. It’s the old Bell Labs
model of research; these people just interact every day.
At different times you have nothing to do. You’ve stopped working for some reason-you finished
a project or got tired of it-and you sit around and look for something to do. You latch on to
somebody else, almost like water molecules interacting.
You get together and say, "I have an idea for a language," and somebody gets interested.
Somebody else asks how we put networking in it. Well, so-and-so has a model for networking,
and somebody else comes in. So you have these teams that rarely get above five or six, and
usually hover around two or three. They each bring in whatever they did previously.
So that’s the way it works. There are no projects per se in the Computing Sciences Research
Center. There are projects near it of various sorts that will draw on our research as a resource. But
they have to deal with our style. If people get stuck, they come to us but usually don’t want to
deal with the management style-which means none-that comes along with it.
Computer.
You mentioned technical arguments and how you build your case. How are technical
arguments resolved?
Thompson.
When you know something is systemically wrong despite all the parts being correct,
you say there has to be something better. You argue back and forth. You may sway or not sway,
but mostly what you do is come up with an alternative. Try it. Many of the arguments end up that
way.


You say, "I am right, the hell with you." And, of course the person who has been "to helled with"
wants to prove his point, and so he goes off and does it. That’s ultimately the way you prove a
point. So that is the way most of the arguments are done-simply by trying them.
I don’t think there are many people up in research who have strong ideas about things that they
haven’t really had experience with. They won’t argue about the theory of something that’s never
been done. Instead, they’ll say, "Let’s try this." Also, there’s not that much ego up there either, so
if it’s a failure you come back and say, "Do you have another idea? That one didn’t work." I have
certainly generated as many bad ideas as I have good ones.
Computer.
What advice do you have for developers who are out there now to improve their
designs so that they could be viewed as producing simple yet powerful systems?
Thompson.
That is very hard; that is a very difficult question. There are very few people in my
position who can really do a design and implement it. Most people are a smaller peg in a big
organization where the design is done, or they do the design but can’t implement it, or they don’t
understand the entire system. They are just part of a design team. There are very few people I
could give advice to.
It’s hard to give advice in a product kind of world when what I do, I guess, is some form of
computer Darwinism: Try it, and if it doesn’t work throw it out and do it again. You just can’t do
that in a product-development environment.
Plus I am not sure there are real principles involved as opposed to serendipity: You happened to
require this as a function before someone else saw the need for it. The way you happen upon
what you think about is just very lucky. My advice to you is just be lucky. Go out there and buy
low and sell high, and everything will be fine.
UNIX
Computer
. In an earlier interview you were asked what you might do differently if you had to do
Unix over again, and you said that you would add an "e" to the
creat
system call. Seriously, in
hindsight, can you give us an assessment of the problems you overcame, the elegant solutions,
and the things you would have done differently.
Thompson
. I think the major good idea in Unix was its clean and simple interface: open, close,
read, and write. This enabled the implementation of the shell as well as Unix’s portability. In
earlier systems, I/O had different entry points, but with Unix you could abstract them away: You
open a file, and if the file happens to be a tape, you could write to it. Pipes allowed tools and
filters that could accommodate classical monster programs like sort.
Probably the glaring error in Unix was that it underevaluated the concept of remoteness. The
open-close-read-write interface should have been encapsulated together as something for
remoteness; something that brought a group of interfaces together as a single thing-a remote file
system as opposed to a local file system.
Unix lacked that concept; there was just one group of open-close-read-write interfaces. It was a
glaring omission and was the reason that some of the awful things came into Unix like ptrace and
some of the system calls. Every time I looked at later versions of Unix there were 15 new system
calls, which tells you something’s wrong. I just didn’t see it at the time. This was fixed in a fairly
nice way in Plan 9.
Computer
. Going back a little bit further, what were the good and not so good aspects of Multics
that were the major drivers in the Unix design rationale?
Thompson
. The one thing I stole was the hierarchical file system because it was a really good
idea-the difference being that Multics was a virtual memory system and these "files" weren’t files
but naming conventions for segments. After you walk one of these hierarchical name spaces,
which were tacked onto the side and weren’t really part of the system, you touch it and it would


be part of your address space and then you use machine instructions to store the data in that
segment. I just plain lifted this.
By the same token, Multics was a virtual memory system with page faults, and it didn’t
differentiate between data and programs. You’d jump to a segment as it was faulted in, whether it
was faulted in as data or instructions. There were no files to read or write-nothing you could
remote-which I thought was a bad idea. This huge virtual memory space was the unifying
concept behind Multics-and it had to be tried in an era when everyone was looking for the grand
unification theory of programming-but I thought it was a big mistake.
I wanted to separate data from programs, because data and instructions are very different. When
you’re reading a file, you’re almost always certain that the data will be read sequentially, and
you’re not surprised when you fault
a
and read
a
+ 1. Moreover, it’s much harder to excise
instructions from caches than to excise data. So I added the exec system call that says "invoke
this thing as a program," whereas in Multics you would fault in an instruction and jump to it.
DEVELOPMENT HISTORY
Computer
. What about the development history of Unix?
Thompson
. The early versions were essentially me experimenting with some Multics concepts
on a PDP-7 after that project disbanded, which is about as small a team as you can imagine. I
then picked up a couple of users, Doug McIlroy and Dennis Ritchie, who were interested in
languages. Their criticism, which was very expert and very harsh, led to a couple of rewrites in
PDP-7 assembly.
At one point, I took BCPL from Martin Richards at MIT and converted it into what I thought was
a fairly straight translation, but it turned out to be a different language so I called it B, and then
Dennis took it and added types and called it C.
We bought a PDP-11-one of the very first-and I rewrote Unix in PDP-11 assembly and got it
running. That was exported to several internal Bell telephone applications, to gather trouble
reports and monitor various things like rerouted cables. Those applications, independent of what
we were doing, started a political pressure to get support for the operating system; they demanded
service. So Bell Labs started the Unix Support Group, whose purpose was to serve as the
interface to us, to take our modifications and interface them with the applications in the field,
which demanded a more stable environment. They didn’t like surprises. This grew over time into
the commercial version from AT&T and the more autonomous version from USL.
Independently, we went on and tried to rewrite Unix in this higher-level language that was
evolving simultaneously. It’s hard to say who was pushing whom-whether Unix was pushing C
or C was pushing Unix. These rewrites failed twice in the space of six months, I believe, because
of problems with the language. There would be a major change in the language and we’d rewrite
Unix.
The third rewrite-I took the OS proper, the kernel, and Dennis took the block I/O, the disk-was
successful; it turned into version 5 in the labs and version 6 that got out to universities. Then
there was a version 7 that I rewrote for Johnson and Ritchie to port to an Interdata 832; I rewrote
the OS with almost all its language intact but reapportioned the portable and nonportable parts so
that the next port would be better.
Around version 6, ARPA [Advanced Research Projects Agency] adopted it as a standard
language for the Arpanet community. Berkeley was contracted to fix the Arpanet interface-which
started at the University of Illinois and was extended by Berkeley’s getHostbyName interface-and
to add virtual memory to Bell Labs’ port to the VAX.
There’s a nice history of Unix written by Dennis that’s available on his home page [
ed
.-"The
Evolution of the Unix Time-Sharing System,"].


Computer
: What accounted for the success of Unix ultimately?
Thompson
: I mostly view it as serendipitous. It was a massive change in the way people used
computers, from mainframes to minis; we crossed a monetary threshold where computers became
cheaper. People used them in smaller groups, and it was the beginning of the demise of the
monster comp center, where the bureaucracy hidden behind the guise of a multimillion dollar
machine would dictate the way computing ran. People rejected the idea of accepting the OS from
the manufacturer and these machines would never talk to anything but the manufacturer’s
machine.
I view the fact that we were caught up in that-where we were glommed onto as the only solution
to maintaining open computing-as the main driving force for the revolution in the way computers
were used at the time.
There were other smaller things. Unix was a very small, understandable OS, so people could
change it at their will. It would run itself-you could type "go" and in a few minutes it would
recompile itself. You had total control over the whole system. So it was very beneficial to a lot of
people, especially at universities, because it was very hard to teach computing from an IBM
end-user point of view. Unix was small, and you could go through it line by line and understand
exactly how it worked. That was the origin of the so-called Unix culture.
Computer
: In a sense, Linux is following in this tradition. Any thoughts on this phenomenon?
Thompson
I view Linux as something that’s not Microsoft-a backlash against Microsoft, no
:
more and no less. I don’t think it will be very successful in the long run. I’ve looked at the source
and there are pieces that are good and pieces that are not. A whole bunch of random people have
contributed to this source, and the quality varies drastically.
My experience and some of my friends’ experience is that Linux is quite unreliable. Microsoft is
really
unreliable but Linux is
worse
. In a non-PC environment, it just won’t hold up. If you’re
using it on a single box, that’s one thing. But if you want to use Linux in firewalls, gateways,
embedded systems, and so on, it has a long way to go.
DISTRIBUTED COMPUTING: NETWORK OPERATING SYSTEMS AND LANGUAGES
Computer
:
How does your work on Plan 9 and Inferno derive from your earlier work on Unix?
What are some of the new ideas arising out of this work that could and should apply to
distributed operating systems in general?
Thompson:
Saying these ideas haven’t been applied before is tough because, if you look closely,
everything is reinvented, nothing’s new. There are good ideas and bad ideas in Unix. You can’t
escape your history. What you think today is not much different from what you thought
yesterday. And, by induction, it is not that different from what you thought twenty years ago.
In Plan 9 and Inferno, the key ideas are the protocol for communicating between components and
the simplification and extension of particular concepts. In Plan 9, the key abstraction is the file
system-anything you can read and write and select by names in a hierarchy-and the protocol
exports that abstraction to remote channels to enable distribution. Inferno works similarly, but it
has a layer of language interaction above it through the Limbo language interface-which is like
Java, but cleaner I think.
LIMBO
Computer:
How would you characterize Limbo as a language?
Thompson:
First, I have to say that the language itself is almost exclusively the work of Sean
Dorward, and in my talking about it I don’t want to imply I had much to do with it.
I think it’s a good language. In a pragmatic sense, it’s a simplification of the larger languages like


C++ and Java. The inheritance rules are much simpler, it’s easier to use, and the restrictions there
for simplicity don’t seem to impair its functionality.
In C++ and Java I experience a certain amount of angst when you ask how to do this and they
say, "Well, you do it like this or you could do it like that." There are obviously too many features
if you can do something that many ways-and they are more or less equivalent. I think there are
smaller concepts that fit better in Inferno.
Computer:
We know that Plan 9 was done in C. It would almost seem that the group needed
Limbo to develop Inferno. Do we need new types of languages to build distributed systems?
Thompson:
The language, I think, doesn’t matter per se. The language’s actual size and features
are almost separate issues from the distribution of the language. It shouldn’t be too large or too
small; it should be some nice language that you can live with. The idea, though, is that it is
dynamically loadable so that you can replace little modules. And through some other mechanisms
like encryption you can validate those modules, and when they are loaded you have some
confidence that it’s the module you wanted and that someone hasn’t spoofed you.
There are certain features you must have-some form of object-orientation, for example. You
could replace Limbo with Java-I wouldn’t want to-and not change Inferno’s basic principles other
than the way it meets system requirements. Sean decided the whole system had to have a
garbage-collected language at a much higher level in that it’s not separate interacting processes
maintaining their own addresses, with some being garbage-collected and some not.
The language and the system are all garbage-collected together. Whatever protection mechanisms
you have for the language apply all the way down through the system. For example, if you open a
file, you don’t have to close it. If you stop using it, just return from the function and it will be
garbage-collected and the file will be closed. So the system and the language are part of the same
ball of wax.
In addition, the language implementation-and again I don’t want to take any credit-doesn’t have
big mark-and-sweep type garbage collection. It has reference counting: If you open something
and then return, it’s gone by reference count. Thus, you don’t have high and low watermarks
because 99 percent of the garbage goes away as soon as it is dereferenced. If you store a null in a
pointer, it chases the pointer and all that stuff goes.
If you make cycles, there is a background distributed mark-and-sweep algorithm that just colors
the next step a little bit at a time. It doesn’t have to be very aggressive because there is not much
garbage around in most applications: People really don’t leave dangling loop structures that
require this kind of algorithm. So you can devote just one percent of your time in the background
looking for garbage without these monster mark-and-sweep things.
So, again, it’s pragmatic. It’s not the theoretical top-of-the-line garbage collection paper. It’s just
a way of doing it that seems to be very, very effective.
CURRENT WORK
Computer:
What are you working on now?
Thompson:
A few of us in research were tapped by a newly formed development organization
within Lucent to work on a product called the PathStar Access Server. It’s essentially a central
office switch and router for IP phone and data services. It’s strictly IP-based. You pick up the
phone, dial it, and make conference calls.
I think packet switching will replace circuit switching in the phone system and will invert the
hierarchy. Whereas data is currently carried in the leftover space of a circuit-switched network,
eventually the backbone will be a packet-switched network with the phone implemented under it.
You don’t have to go out on a limb to say this-probably 90 percent of the people believe that
now. But this project is "put up or shut up." We are actually inverting the phone system to run


across a pretty classical packet-switched router.
In this kind of application what you need to pay attention to is maintenance and configuration,
which is where Inferno comes in. All of the configuration code is Inferno and Limbo. You have
to pay attention to quality of service so that you can raise the loading above minimal and still get
real-time voice, in this particular case.
There were some fun parts: The actual call processing, which is typically done by a huge finite
state machine, was fun to do. We did it by making a finite-state-machine-generation language.
The object of the language is a finite state machine, but the source is not. The actual phone
conversation or feature is a group interacting finite state machines, almost like processes. And, of
course, they have to be distributed because you make calls to other phones.
Computer:
So this language generates the finite state machines. Did you create the language to
allow for experimentation to come up with different finite state machines?
Thompson:
Well, at first we thought it was simple: You just write a finite state machine for this
phone system. And at first it
was
simple. You just say, "Well if you’re here do this, and if you’re
there do that, and just manually lay out these finite state machines." And that works just
beautifully for the very first implementation, which is just picking up a phone, dialing a number,
calling another phone, picking that phone up, conversing, and hanging up. You can just picture
those states laying out.
But when you get to some of the simple features-three-way calls, for example-what happens
when caller ID or call waiting comes in on a three-way call? The classical phone just says busy
because it can’t handle more than three phones.
So you build a model, which was initially a finite state machine model, and then you slowly add
the features you need until the model breaks. It breaks pretty quickly, so you build a second one
until it breaks, and so on. You just do it by exhaustion. So that’s how the FSM-generation
language came about; it wasn’t "let’s sit down and do everything at once." I think that’s probably
the way computer languages were built.
Interestingly, this work was extended further by Gerard Holzmann, someone in our area who has
been into state verification-running exhaustive studies finding error states in the finite state
system. He was just delighted with this little FSM-generation language because now he could
build his models, and he inverted it. He took it the way it is, which is to build finite state
machines, but he also took it to build drivers. So he has my model, which runs the phones on the
inside, but then he needed telephones to drive his model. So he can now build another finite state
machine to model the telephone and do not only the synthesis but the analysis.
JUKEBOX MUSIC COLLECTION
Computer
You’re also collecting music?
:
Thompson:
It’s kind of a personal/research hobby/project. Let me explain it from an external
point of view. Basically, I’m just collecting music. I’m getting lists from various sources-top 10s,
top 50s-and I try to collect the music.
Right now, my list has around 35,000 songs, of which I’ve collected around 20,000. I compress
the songs with a Bell Labs-invented algorithm called PAC [Perceptual Audio Coding] and store
them on a jukebox storage system. I started this before MP3 was heard of on the network. PAC is
vastly superior to MP3.
My collection is not generally available because of the legal aspects. I went to legal and told them
I was collecting a lot of music, but I don’t think they realized what I meant by "a lot." Anyway,
they said that in the case of research there’s something similar to fair use and that they’d back
me, but wouldn’t go to jail for me. So I can’t release it generally. But it’s pretty impressive. It’s
split-screen like a Web browser; you can walk down lists, years, or weeks.


Computer
: It’s a personal hobby.
Thompson:
It’s hard to differentiate since, if you haven’t noticed, almost everything I’ve done is
personal interest. Almost everything I’ve done has been supported and I’m allowed to do it, but
it’s always been on the edge of what’s acceptable for computer science at the time. Even Unix
was right on the edge of what was acceptable at Bell Labs at the time. That’s almost been my
history.
COMPUTER SCIENCE AND THE FUTURE
Computer:
You’ve been there through Multics, Unix, Inferno, and so on. Any thoughts about
where computer science is going or should be going?
Thompson:
Well, I had to give advice to my son, and my advice to him-to the next
generation-was to get into biology. When I was a kid, I was interested in electronics. I got into
computing-not being
interested
in it per se because it almost didn’t exist then-because it’s
addictive. I think electronics had this cycle: It would do everything-negative feedback and stuff
like that-whereas now it’s just commodity and grind them out.
Computer science is coming into its middle age. It’s turning into a commodity. People don’t
know about Carnot cycles for refrigerators, yet they buy refrigerators. It’s happening in
computing too. Who knows about compilers? They buy computers to play games and balance
their checkbooks. So my advice to my child was-I am unfortunately talking to
Computer
magazine-to go into biology, not classic biology but gene therapy and things like that.
I think that computing is a finite field and it’s reaching its apex and we will be on a wane after
this. I am sorry to say that, but that’s the way I feel. You look at any aspect of computer
science-what’s being taught today, PhD theses, publications, any metric you can think of and
compare it to history-and you realize that aspects of computer science are becoming more
specialized.
Computer:
Which aspects?
Thompson
Operating systems, in particular, have to carry so much baggage. Today, if you’re
:
going to do something that will have any impact, you have to compete with Microsoft, and to do
that you have to carry the weight of all the browsers, Word, Office, and everything else. Even if
you write a better operating system, nobody who actually uses computers today knows what an
operating system interface is; their interface is the browser or Office.
You can have the best and most beautiful interface in the world and the most extensible operating
system that ports to anything and then you have to port on top of it a thousand staff-years worth
of applications that you can’t obtain the source for. You have two choices: Go to Microsoft and
ask for the source to Office to port to your operating system and they’ll laugh at you; or get a
user’s manual and re-engineer the code and they’ll sue you anyway. Basically, it’ll never happen
because the entry fee is too high.
Anything new will have to come along with the type of revolution that came along with Unix.
Nothing was going to topple IBM until something came along that made them irrelevant. I’m
sure they have the mainframe market locked up, but that’s just irrelevant. And the same thing
with Microsoft: Until something comes along that makes them irrelevant, the entry fee is too
difficult and they won’t be displaced.
Computer
: So you’re not precluding the possibility of a paradigm shift.
Thompson
: Absolutely not. Anybody who says there’s no more innovation in the world is
doomed to be among the last 400 people who have stated this since the birth of Christ.
Computer
You’re still having fun?
:


Thompson
: Yes, there are still a lot of fun programs to write.
WHAT I DID ON MY WINTER VACATION
Computer
We can’t let you go without asking why on earth you traveled to Russia to fly a
:
Mig-29?
Thompson
: How often does the Soviet Union collapse? It would be just a shame if you couldn’t
do something you have always wanted to do as a result. They are selling rides in what was once
the top fighter. A mere two years earlier you would only get hints about its existence in Jane’s
books. Now you can get in, use the laser sights, and go straight up at 600 miles per hour. Who
wouldn’t do that? When things like that come along, I’ll take them. They’re fun.
Contact the authors at d.cooke@computer.org,  j.urban@computer.org,
s.hamilton@computer.org.