A History of UNIX That ClicksEpisode 1 / Dissecting the lineage

Episode 0's homework ── answering "Is Linux MINIX's child?" clearly

Don't Confuse the Two Trees "Linux came from MINIX, MINIX came from BSD…" ── this phrasing mixes together two entirely different trees. Code lineage, and reimplementation of ideas. Draw these two apart, and even that famous debate suddenly comes into focus.

Tools you'll need: Episode 0 (the self-hosting loop) The reveal: genes ≠ ideas

In Episode 0, we traced the chicken-and-egg loop backwards through "what compiled what." But the history of UNIX has another, entirely separate family tree ── the lineage of whose "source code" was inherited. The misunderstanding beginners always make ── "Linux is MINIX's child," "MINIX is BSD's child" ── arises from mixing this lineage tree and the reimplementation tree, which inherits only ideas, into a single tree. This time we carefully draw apart the two trees, and at the end we read the Tanenbaum–Torvalds debate through them.

01There are two kinds of "inheriting"

When software "inherits" something from other software, what it inherits divides broadly into two kinds.

The crux this time ── genes, or ideas?

① Code lineage (genes): it inherits the actual lines of source code. It copies the parent's code, modifies it, and grows it. That is why copyright and licensing follow it around.
② Reimplementation of ideas (design/API): it takes not a single line of code; it only imitates "how it behaves (system calls, design philosophy)" and rewrites everything from a clean slate. It may be compatible, but the genes are unrelated.

These two are orthogonal. Just because one piece of software "behaves exactly like" another does not mean it inherited any code. Conversely, two things can look different yet have code inherited straight from the parent. In the UNIX family, these two trees intertwine into a forest.

02Tree one ── the lineage tree (where code flows)

First, the main current where real code flows. In 1969, Bell Labs' AT&T UNIX is the source (Multics, which came before it, was an ideological influence as a "cautionary example"; no code was inherited ── that's for a bonus episode). AT&T UNIX's source code was licensed and passed to various places, modified, and left descendants.

The main current of lineage (inheritance of real code)

AT&T UNIX (1969) → two big branches:

Branch A: the Berkeley line (BSD)

A university (UC Berkeley's CSRG) obtained AT&T's source license and modified it → BSD (1978–) → 386BSD (1992) → NetBSD / FreeBSD (1993), and later OpenBSD.

Branch B: the AT&T commercial line

System III → System V (1983) → various companies' commercial UNIXes (Solaris and others).

The strongest evidence that this tree "really inherits code" is ── that it ended up in court. In 1992, AT&T (USL) sued Berkeley, claiming "BSD contains our UNIX code" (USL v. BSDi). The 1994 settlement revealed that, of BSD's 18,000 files, only 3 were removed and 70 modified. Put the other way, this tree carries so much real code that a court could trace the origin of the code line by line.

A connecting voice ── why NetBSD can't be Linux's parent In Episode 0, we said "NetBSD is later (1993) than Linux (1991), and on a different branch." Seen on the lineage tree, it's obvious at a glance. NetBSD is a young leaf on the lineage tree (the BSD side), and Linux is a leaf on the reimplementation tree we'll see next. Not only are they on different trees, but NetBSD came later. Both by timing and by lineage, there is no way they could be parent and child.

03Tree two ── the reimplementation tree (where only ideas flow)

The other tree inherits not a single line of code. Things that "behave like UNIX but whose innards were written from a clean slate" ── the family called Unix-like.

The reimplementation tree (inheritance of ideas/API only)

MINIX (1987, Tanenbaum): for teaching, an OS written from a clean slate to behave compatibly with UNIX V7. No AT&T code included (so it could be handed out in class).

GNU (1983, Stallman): "GNU's Not Unix." Rebuilding UNIX's userland (gcc, bash, etc.) from a clean slate so it can be used freely.

Linux (1991, Torvalds): the kernel written from a clean slate. Developed on top of MINIX and influenced by it, but it did not inherit MINIX's code.

"Writing from a clean slate" sounds like an exceptional feat, but it isn't. As Tanenbaum himself later pointed out, plenty of people in history have written an OS from scratch ── himself (MINIX), Thompson (UNIX), Holt (Tunis), Comer (Xinu), Williams (Coherent)… Reimplementation is an "ordinary activity" of UNIX culture.

04Overlaying the two trees on one picture

Now let's place both on the same picture. In the figure below, the horizontal axis is the year, the top half is the lineage tree (solid lines = code flows), and the bottom half is the reimplementation tree (dotted lines = ideas only). Use the buttons to switch trees, and confirm that Linux and MINIX hang on the dotted-line side, while NetBSD and FreeBSD hang on the solid-line side.

Figure 1: The two trees of the UNIX family. Solid = inheritance of real code (lineage), dotted = inheritance of ideas/API only (reimplementation). Multics is an ideological source (no code flows from it).
solid = code flows (lineage) dotted = ideas/API only (reimplementation)
The reveal ── this is why "Linux is MINIX's child" is inaccurate

Linux is at the end of MINIX's dotted line. That is, it inherited the ideas (Unix-ness) but not the code (genes). "It was developed on top of MINIX (borrowed the delivery room)" from Episode 0 and "it is not MINIX's child (no blood tie)" are both true at once, because the delivery room and the lineage are separate matters.

◇ ◇ ◇

05Reading the famous debate through the two trees

On January 29, 1992, Tanenbaum posted "LINUX is obsolete" to comp.os.minix, and the famous debate began. What matters here is ── this was not, in any way, a dispute over code plagiarism. The point of contention was design philosophy.

The "real point of contention" in the 1992 debate

Tanenbaum: the kernel should be small and split up (a microkernel). A monolithic (all-in-one) design like Linux's is "a giant step back into the 1970s." What's more, it's tightly coupled to the 386 and has no future.

Torvalds: monolithic is a perfectly sound design choice in practice. "linux is more portable than minix (in the API sense)." ── Linux was later ported to ARM, POWER, SPARC, and many others, and Tanenbaum's "the 386 will be obsolete" prediction proved wrong.

In other words, the two were debating "what makes a good design", not disputing "whose code it is." In the figure below, switch between the two kernel designs ── the "real substance" of the debate.

Figure 2: The point of contention in the 1992 debate. A microkernel (MINIX style: a small core + components in user space) vs. monolithic (Linux style: everything in the core). The dispute was over design, not code lineage.
A connecting voice ── so what about the "Linux is a copy" claim? Much later, in 2004, a certain organization put out a book (Samizdat) claiming "Linux was illegally copied from MINIX." The result was a complete refutation. When a commissioned engineer compared the sources of MINIX and Linux 0.01, there was zero evidence of copying. And the one who pushed back hardest was ── Tanenbaum himself, the author of MINIX. A rival's author defended it: "Linus wrote it himself. It's not a copy." There could be no stronger testimony that "no code flows on the reimplementation tree."

06The two trees swap leaves at the crowns

The roots are two separate trees, but at the top (the crowns) they exchange leaves. This is where it gets interesting.

Separate roots, crossing at the crowns

GNU + Linux: two leaves of the reimplementation tree (GNU's userland + Linux's kernel) combine to become the OS we casually call "Linux" every day (hence also "GNU/Linux").

MINIX 3 ← NetBSD: the later MINIX 3 took in the userland of NetBSD, on the lineage tree side. This is the true identity of the "the arrow goes the other way and much later" we touched on in Episode 0. The reimplementation tree borrowed a leaf from the lineage tree.

So the "two trees," though strictly separate at the roots, lend and borrow each other's leaves at the crowns. Hold this image of separate roots, crossing at the crowns, and the "cluttered forest" of the UNIX family comes clearly into view.

The honest line ── the trees are neither fixed nor pure

The two trees are a model for organizing the story. Reality is more continuous. (1) Even the lineage tree isn't "pureblooded" ── early BSD contained AT&T code, which was gradually removed through the lawsuit until 4.4BSD-Lite became "effectively free." Lineage gets removed and added. (2) "Inheritance of ideas" is a matter of degree too; there are also standards that deliberately take on compatibility, like POSIX (a bonus episode). (3) We put Multics→UNIX under "ideas," but this is an influence, not a clear inheritance relationship.

The point is that the real substance is the perspective of asking separately "did code flow (genes)?" and "does the behavior resemble (ideas)?"; the shape of the trees themselves is just a rough guide.

Practice problems (solvable with this episode's two trees)
  1. The difference between "code lineage" and "reimplementation of ideas," in one sentence.
    Show answer
    Lineage means inheriting the actual lines of source code (licensing attaches); reimplementation means imitating only the behavior/design and writing the code from a clean slate (the genes are unrelated).
  2. Explain, using the two trees, why NetBSD cannot be Linux's parent.
    Show answer
    NetBSD is a leaf on the lineage tree (the BSD side), Linux is a leaf on the reimplementation tree ── different trees to begin with. Moreover, NetBSD (1993) came after Linux (1991). Neither the trees nor the timing line up.
  3. What was the point of contention in the 1992 Tanenbaum–Torvalds debate? Answer without using the word "code."
    Show answer
    Kernel design philosophy. Microkernel (split up) vs. monolithic (all-in-one), and portability. It was a debate over the merits of a design, not a dispute over plagiarism.
  4. Why are "Linux was developed on top of MINIX" and "Linux is not MINIX's child" both true at once?
    Show answer
    The former is about borrowing the development environment (the delivery room), the latter is about code lineage ── different axes. Borrowing a delivery room without inheriting code produces no blood tie.

SummaryGenes and ideas grow on different trees

The UNIX family has two trees. The lineage tree is the main current where real code flows: AT&T UNIX → BSD → NetBSD/FreeBSD, and → System V. The origin of the code is so real that the USL v. BSDi lawsuit could trace it line by line. The other, the reimplementation tree, inherits only ideas/API and writes the code from a clean slate ── MINIX, GNU, Linux. The two are orthogonal, and "behaving similarly" is a separate matter from "inheriting code."

So "Linux is MINIX's child" is inaccurate ── Linux is at the end of MINIX's dotted line (ideas), and it inherited no genes. The 1992 debate, read through the two trees, was a debate over design (micro vs. monolithic), not a dispute over plagiarism, and the 2004 "copy claim" was refuted even by MINIX's own author. Though the roots are separate, at the crowns they exchange leaves, as with GNU⊕Linux or MINIX 3←NetBSD. ── Genes, or ideas. Asking this one question separately is the key to reading a lineage.

This document is Episode 1 of "A History of UNIX That Clicks." Historical facts: the source code of AT&T UNIX (1969, Bell Labs) was inherited through licensing, and UC Berkeley's CSRG derived the BSD family under a source license. In USL v. BSDi (filed 1992, settled 1994), of BSD's 18,000 files only 3 were removed and 70 modified, and 4.4BSD-Lite was released as a version containing no proprietary UNIX code. System V is AT&T's commercial line (1983). MINIX (1987, Tanenbaum), GNU (1983, Stallman), and Linux (1991, Torvalds) are all "Unix-like" independent implementations that do not inherit AT&T UNIX's code. The Tanenbaum–Torvalds debate began with the January 29, 1992 comp.os.minix post "LINUX is obsolete," and the point of contention was microkernel vs. monolithic and portability, not code plagiarism. The 2004 copy claim in Samizdat by Ken Brown / the Alexis de Tocqueville Institution was refuted by a source comparison of MINIX and Linux 0.01, and Tanenbaum, Ritchie, Stallman, and others pushed back. Multics is an ideological influence on UNIX, not a code inheritance. The "two trees" are a model for understanding; in reality, both lineage and idea inheritance vary in degree. ── To print, use your browser's "Print" and "Save as PDF" (in the print version, the figure controls and answers are frozen / hidden).

Printing / making a PDF: ⌘+P (on Windows, Ctrl+P). On screen, use the buttons in Figure 1 to switch between the two trees, and Figure 2 to switch the point of contention (kernel design). "Show answer" opens each solution.