Ken Thompson (Unix)

You can’t trust code that you did not create totally yourself.
Ken Thompson

Kenneth (Ken) Lane Thompson (Source: www.facesofopensource.com)
Kenneth (Ken) Lane Thompson (Source: www.facesofopensource.com)

At the end of the 1960s, the young engineer at AT&T Bell Labs Kenneth (Ken) Lane Thompson (born 4 February 1943) worked on the project of the Multics operating system. Multics (Multiplexing Information and Computer Services) was an experimental operating system for the GE-645 mainframe, developed in the 1960s by the Massachusetts Institute of Technology, Bell Labs, and General Electric. It introduced many innovations but had many problems, and at the end of the 1960s, Bell Labs, frustrated by the slow progress and difficulties, pulled out of the project. Thus Thompson, with the help of his colleagues Dennis Ritchie, Douglas McIlroy, and Joe Ossanna, decided to experiment with some Multics concepts and to redo it on a much smaller scale. Thus in 1969, the idea of the now ubiquitous Unix was born.

While Ken Thompson still had access to the Multics environment, he wrote simulations for the new file and paging system on it. Later the group continued his work on blackboards and scribbled notes. Also in 1969, Thompson developed a very attractive game, Space Travel, first written on Multics, then transliterated into Fortran for GECOS, and finally for a little-used PDP-7 at Bell Labs. The same PDP-7 then he decided to use for the implementation of the first UNIX. On this PDP-7 and using its assembly language, the team of researchers (initially without financial support from Bell Labs) led by Thompson and Ritchie, developed a hierarchical file system, the concepts of computer processes and device files, a command-line interpreter, and some small utility programs.

The name Unics was coined in 1970 by the team member Brian Kernighan, who played on Multics name. Unics (Uniplexed information and computing system) could eventually support multiple simultaneous users and was later shortened to Unix.

Structurally, the file system of PDP-7 Unix was nearly identical to today’s, for example, it had:
1. An i-list: a linear array of i-nodes each describing a file. An i-node contained less than it does now, but the essential information was the same: the protection mode of the file, its type and size, and the list of physical blocks holding the contents.
2. Directories: a special kind of file containing a sequence of names and the associated i-number.
3. Special files describing devices. The device specification was not contained explicitly in the i-node, but was instead encoded in the number: specific i-numbers corresponded to specific files.

In 1970 Thompson and Ritchie wanted to use Unix on a much larger machine than the PDP-7 and traded the promise of adding text processing capabilities to Unix for some financial support from Bell, porting the code for a PDP-11/20 machine. Thus for the first time in 1970, the Unix operating system was officially named and ran on the PDP-11/20. It added a text formatting program called roff and a text editor. All three were written in PDP-11/20 assembly language. Bell Labs used this initial “text processing system”, made up of Unix, roff, and the editor, for text processing of patent applications. Roff soon evolved into troff, the first electronic publishing program with a full typesetting capability.

Ken Thompson and Dennis Ritchie, working on PDP-11 and UNIX in 1972
Ken Thompson and Dennis Ritchie, working on PDP-11 and UNIX in 1972

In 1972, Unix was rewritten in the C programming language, contrary to the general notion at the time “that something as complex as an operating system, which must deal with time-critical events, had to be written exclusively in assembly language” (although Unix was not the first OS, written in a high-level language, it was Burroughs B5000 from 1961). C language was created by Ritchie as an improved version of B language, created by Thompson as a translation of BCPL from Martin Richards. The migration from assembly language to the higher-level language C resulted in much more portable software, requiring only a relatively small amount of machine-dependent code to be replaced when porting Unix to other computing platforms.

AT&T made Unix available to universities and commercial firms, as well as the United States government, under licenses. The licenses included all source code including the machine-dependent parts of the kernel, which were written in PDP-11 assembly code. Copies of the annotated Unix kernel sources circulated widely in the late 1970s in the form of a much-copied book, which led to considerable use of Unix as an educational example. At some point, ARPA (Advanced Research Projects Agency) adopted Unix as a standard language for the Arpanet (the predecessor of the Internet) community.

During the late 1970s and early 1980s, the influence of Unix in academic circles led to the large-scale adoption of Unix (particularly of the BSD version, originating from the University of California, Berkeley) by many commercial startups, for example, Solaris, HP-UX, and AIX. Today, in addition to certified Unix systems such as those already mentioned, Unix-like operating systems such as Linux and BSD descendants (FreeBSD, NetBSD, and OpenBSD) are commonly encountered in a variety of modern servers, workstations, mobile devices, and embedded systems, including macOS computers and Android mobile devices