Skip to main content
Bethemesh
BiographyComputing history

Ken Thompson: from Unix to Go, simplicity as a method

Discover how Ken Thompson connected Unix, the B language, and Go through the same pursuit of simplicity, efficiency, and composable tools.

Published 24 August 2026Reading : 7 minBy Bethemesh Team
Beginner
Ken Thompson, left, with Dennis Ritchie in 1973
Show contents
  1. Recovering what Multics had made possible
  2. How PDP-7 constraints encouraged simplicity
  3. From B to the birth of C
  4. From regular expressions to programming tools
  5. What “Reflections on Trusting Trust” reveals
  6. Why Thompson returned to language design with Go
  7. A legacy built on relationships between tools
  8. Timeline
  9. Frequently asked questions
  10. Did Ken Thompson create Unix alone?
  11. How did Thompson’s work differ from Dennis Ritchie’s?
  12. Is B still used?
  13. Did Thompson invent Unix pipes?
  14. What was Thompson’s role in creating Go?
  15. Why does his work still matter?

Much of modern computing rests on an idea Ken Thompson put into practice in the late 1960s: a powerful system need not be complicated if its simplest parts can work together. That idea shaped Unix, ran through the B language, prepared the way for C, and resurfaced decades later in Go.

Thompson was not following a single theoretical program. He built tools for problems he faced: using a small computer interactively, writing a system with very little memory, processing text, or compiling large programs quickly. The continuity lies in his method. He favored mechanisms that were small, understandable, and combinable over architectures designed to anticipate every need.

Simplicity did not make his work rudimentary. It relocated complexity: instead of forcing it into every component, it organized complexity through the relationships between components.

Recovering what Multics had made possible

Kenneth Lane Thompson was born in New Orleans in 1943. He studied electrical engineering and computer science at the University of California, Berkeley, earning a bachelor’s degree in 1965 and a master’s in 1966. He then joined Bell Labs, where researchers could pursue long-term experiments.

Thompson worked on Multics, a time-sharing operating system developed with MIT and General Electric. Multics aimed to let many people use a computer simultaneously in an interactive environment. Its ambition was considerable, but so were its complexity and cost. Bell Labs withdrew in 1969.

Thompson did not want a miniature Multics. He wanted to retain what made it pleasant for programmers: a coherent file system, an interactive terminal, and a way to create tools directly. A PDP-7 minicomputer, far more limited than the machines envisioned for Multics, gave him the opportunity.

His space-simulation game Space Travel provided the practical trigger. Porting it to the PDP-7 led him to build what was needed to use the machine effectively. In 1969, he developed a file system, a command interpreter, and the first parts of what became Unix. Dennis Ritchie soon joined the work.

How PDP-7 constraints encouraged simplicity

The PDP-7 had little memory and only a basic development environment. Every abstraction had to justify its cost. Thompson chose small, specialized programs rather than one tool burdened with many functions.

This created a crucial property: one program’s output could become another program’s input. One tool selected text, another sorted it, and a third counted it. Power no longer resided only in individual commands, but in their composition.

Pipes later made that principle immediate. Doug McIlroy advocated the idea at Bell Labs; Thompson implemented it in Unix in 1973. The | character connected one command’s output to the next command’s input, turning a command line into a small program assembled from reusable elements.

The same philosophy still shapes Unix-like systems, data-processing chains, and development tools. It also created the setting in which a more suitable programming language became necessary.

From B to the birth of C

Early Unix was written in assembly language and tied closely to the PDP-7, then the PDP-11. That proximity offered control but made the system difficult to move to another processor.

Thompson designed B, an adaptation of BCPL small enough for the available computers. It removed some assembly-level detail while retaining a minimal model. Thompson used it for Unix tools and wrote B’s compiler in B itself, a technique known as self-hosting.

B also exposed its limits. Its data model, suited to machines organized around memory words, fit the byte-addressable PDP-11 poorly. Dennis Ritchie gradually transformed the language, adding types and improving data representation until C emerged in the early 1970s.

The lineage matters: Thompson created B and helped establish the technical setting for C; Ritchie was C’s principal designer. Together they rewrote most of Unix in C. Unix became far easier to port, and C spread with it through universities and industry.

The biography of Dennis Ritchie continues this story from C’s design perspective, while the history of C follows its adoption beyond Unix.

From regular expressions to programming tools

Thompson’s influence extends beyond the Unix kernel and B. He developed the ed text editor, whose commands contributed to Unix tool culture. His work on pattern matching also helped bring regular expressions into practical computing.

A regular expression can describe “a sequence of digits,” for example, without listing every possible sequence. The idea now appears in editors, programming languages, search engines, and log-analysis tools.

Thompson later worked on Plan 9, an experimental Bell Labs system that extended Unix ideas into a distributed environment. With Rob Pike, he designed UTF-8 in 1992, representing Unicode characters while retaining compatibility with existing ASCII text. UTF-8 eventually became the Web’s dominant encoding.

These contributions may seem unrelated. Each asks the same question: how can a representation remain simple enough to work everywhere without preventing broader uses?

What “Reflections on Trusting Trust” reveals

Thompson and Ritchie received the Turing Award in 1983 for Unix and its influence. In the associated lecture, Reflections on Trusting Trust, Thompson described a compiler altered to insert a hidden backdoor when compiling a login program.

The compiler could also recognize its own source and reproduce the alteration in its successor. Inspecting both the application and the compiler’s visible source would no longer reveal the attack.

The demonstration exposed a fundamental limit of software trust: reviewing source code offers a complete guarantee only if the toolchain that transforms it is trustworthy too. Modern work on reproducible builds, supply-chain security, and compiler verification continues to address this problem.

Why Thompson returned to language design with Go

Thompson joined Google in 2006 and encountered a different scale of frustration: enormous software, slow builds, and concurrency that was difficult to manage. Hardware had multiple cores and services spanned many machines, while established languages often imposed complex abstractions and tooling.

In September 2007, Thompson, Rob Pike, and Robert Griesemer began defining Go. They pursued fast compilation, standard formatting, automatic memory management, and built-in concurrency mechanisms. A deliberately compact syntax was intended to keep code readable across large teams.

Go neither reproduces C nor replaces Unix. It transfers a method to another setting. B had to fit a small computer; Go had to help teams navigate huge repositories. In both cases, simplicity answered a problem of scale.

Go was released as open source in November 2009. It then developed collectively and found a major role in network services, infrastructure tooling, and distributed systems—connecting the birth of interactive computing with the cloud era.

A legacy built on relationships between tools

Unix lives on in Linux, macOS, BSD systems, Android, and much of the server infrastructure. C remains essential to systems programming and influenced many languages, including Bjarne Stroustrup’s C++. UTF-8 carries text in the world’s writing systems, while Go powers network and cloud software.

A list of inventions, however, misses what connects them. Thompson designs components that do few things but expose interfaces that enable unforeseen combinations. This does not eliminate complexity; it avoids trapping it inside a block that nobody can understand or replace.

Ken Thompson’s lasting contribution is therefore a way of building as much as a body of software. A system becomes more adaptable when its parts remain intelligible, and more powerful when those parts can be combined.

Timeline

  • 1943: Kenneth Lane Thompson is born in New Orleans.
  • 1965–1966: He earns degrees from the University of California, Berkeley.
  • 1966: He joins Bell Labs and works on Multics.
  • 1969: He creates the first Unix system on a PDP-7.
  • 1969–1970: He develops B from BCPL.
  • 1973: Pipes are added to Unix, and most of the system is rewritten in C with Dennis Ritchie.
  • 1970s: Thompson develops Unix tools including ed and spreads practical regular-expression use.
  • 1983: He shares the Turing Award with Ritchie and presents Reflections on Trusting Trust.
  • 1992: He designs UTF-8 with Rob Pike.
  • 2006: He joins Google.
  • 2007: He begins designing Go with Robert Griesemer and Rob Pike.
  • 2009: Go is released as an open-source project.
  • Today: Unix, UTF-8, and Go extend his search for simple, composable systems in different fields.

Frequently asked questions

Did Ken Thompson create Unix alone?

Thompson wrote the first version in 1969 and drove its initial development. Dennis Ritchie soon joined him, followed by other Bell Labs researchers. Unix began with Thompson’s initiative and became a collective achievement.

How did Thompson’s work differ from Dennis Ritchie’s?

Thompson created early Unix and B. Ritchie was C’s principal designer and played a central role in rewriting Unix in C. Their distinct contributions combined to make Unix portable and C broadly useful.

Is B still used?

Not commonly. Its importance is historical: B is C’s direct predecessor and shows how early minicomputer constraints shaped systems-language design.

Did Thompson invent Unix pipes?

Doug McIlroy formulated and advocated connecting programs through data streams. Thompson delivered the decisive Unix implementation in 1973. The innovation joins McIlroy’s proposal with Thompson’s implementation.

What was Thompson’s role in creating Go?

He was one of its three original designers with Robert Griesemer and Rob Pike. They defined the goals and initial features together from 2007; many contributors later joined the project.

Why does his work still matter?

Unix-like systems underpin servers, computers, and phones. UTF-8 carries most Web text, and Go is widely used in network and cloud infrastructure. All three make complexity manageable through simple components.

Sources and references

  1. 1.Computer History Museum — Ken Thompson
  2. 2.Computer History Museum — The Earliest Unix Code
  3. 3.Computer History Museum — A Computing Legend Speaks
  4. 4.Dennis Ritchie — The Development of the C Language
  5. 5.Go Documentation — Frequently Asked Questions
  6. 6.Go Blog — Using Go at Google

Collection

Programming languages

  1. 01Grace Hopper: from early compilers to COBOL
  2. 02John Backus: FORTRAN, BNF, and the rejection of machine code
  3. 03Dennis Ritchie: the C language at the heart of Unix
  4. 04FORTRAN: proving that a compiler could compete with assembly
  5. 05The C language: making systems portable without hiding the machine
  6. 06Niklaus Wirth: from Pascal to Oberon, designing through simplicity
  7. 07Bjarne Stroustrup: designing C++ without giving up performance
  8. 08Pascal: learning to program by making structure visible
  9. 09C++: from C with Classes to a general-purpose language
  10. 10Object-oriented programming: objects, messages, and reusable abstractions
  11. 11Guido van Rossum: creating Python to make code readable
  12. 12Brendan Eich: JavaScript, from Netscape prototype to Web standard
  13. 13James Gosling: the engineer behind Java
  14. 14Python: readability, batteries included, and a global ecosystem
  15. 15Java: write once, run anywhere
  16. 16JavaScript: the language that made the Web interactive
  17. 17Ken Thompson: from Unix to Go, simplicity as a method
  18. 18John McCarthy: Lisp and the idea of programming with symbols
  19. 19Alan Kay: Smalltalk and the computer as a personal medium
  20. 20Barbara Liskov: the abstraction that made software modular
  21. 21Robin Milner: ML, machine-assisted proof, and languages of interaction
  22. 22Brian Kernighan: AWK, Unix, and the art of explaining code
  23. 23Anders Hejlsberg: from Turbo Pascal to C# and TypeScript
  24. 24Larry Wall: Perl, the language that connected the tools of the Internet
  25. 25Yukihiro Matsumoto: Ruby and programmer happiness
  26. 26Rasmus Lerdorf: PHP and the democratization of the dynamic Web

Was this article useful?