History of operating systems
OS history is usually told as a list of dates, and nothing follows from it. Here it is laid out differently: at every point in time something was scarce, and a system was the answer to that scarcity. When the scarcity changed, the systems changed too. The old ones did not disappear; they moved to where their answer is still right.
This is an appendix, not a module: there is no new mechanism here to understand. It exists to put in place what the course explains piece by piece, and to make it visible that almost everything we use is older than we are.
Six scarcities
Each era on the map is not a decade but an answer to the shortage of a specific resource. The boundaries are rough: the previous scarcity does not go away, it just stops being the main one.
- 1955—1964scarce: machine time
- batch processing
- 1964—1975scarce: processor attention
- multiprogramming, time-sharing
- 1975—1990scarce: hardware cost
- a PC with no protection
- 1990—2002scarce: compatibility and networking
- POSIX, free kernels, the internet
- 2002—2012scarce: server utilization
- virtualization, then containers
- 2012—scarce: cores, battery, trust
- parallelism, energy, isolation
The map
Time runs top to bottom. Each system is a vertical line from its appearance to its fading, and adjacent columns belong to one family. A solid line of descent means shared code; a dashed one means inherited ideas only: Linux contains not a single line of Unix, and Windows NT is not a descendant of VMS, even though it was written by the same people. Hover over or select a system to highlight its whole lineage, from ancestors to descendants.
Hover over a system or select it with the keyboard (Tab, then the arrow keys). This panel will show where it came from and what it led to.
On a narrow screen the map is wider than the screen; you can scroll it sideways.
The most striking thing on the map is not how many systems died, but how many living lines start before 1995. Of everything that runs today on servers, phones, and in cars, almost nothing was designed in this century: the implementations changed, the decisions did not.
Where things came from
The mechanisms the course takes apart module by module did not appear where we meet them. The "Module" column leads to where the mechanism is properly explained: the appendix gives the date, the course gives the explanation.
| What | When | First in | Module |
|---|---|---|---|
| Batch monitor | 1956 | GM-NAA I/O | 1. What an OS is and why it exists |
| Time-sharing | 1961 | CTSS | 7. CPU scheduling |
| Paged virtual memory | 1962 | Atlas | 11. Paging |
| Virtual machine | 1968 | CP/CMS | 17. Virtualization and containers |
| Protection rings and segmentation | 1969 | Multics | 16. Protection and security |
| Kernel in a high-level language | 1973 | Unix V4 in C | 3. The kernel and the user/kernel boundary |
| Pipes as a way to compose programs | 1973 | Unix | 6. Processes |
| Sockets as the network interface | 1983 | 4.2BSD | 13. The I/O subsystem |
| Microkernel | 1985 | Mach, then L4 (1993) | 3. The kernel and the user/kernel boundary |
| POSIX as a written standard | 1988 | IEEE 1003.1 | 4. Unix, Linux, distributions |
| File system journaling | 1990 | JFS in AIX | 15. File systems |
| Threads in a standard | 1995 | POSIX threads | 8. Threads and concurrency |
| Isolation without a virtual machine | 2000 | FreeBSD jail, then cgroups (2007) | 17. Virtualization and containers |
| Formally verified kernel | 2009 | seL4 | 18. Where operating systems are heading |
| Kernel programmability without modules | 2014 | eBPF in Linux | 18. Where operating systems are heading |
Three lines that survived
Of all the variety on the map, three lineages made it to mass use, and each answered its own question.
Unix won on portability. A kernel written in a high-level language in 1973 made it possible to move the system between machines. After that the branch split into BSD and System V, and through NEXTSTEP it reached macOS and iOS. A modern Mac is a certified Unix, not "something like it".
Linux won on license and pace. It contains no Unix code. It has a Unix interface written from scratch, and the GPL, which makes it more worthwhile to send contributions upstream than to keep them in a fork. Today it is the same kernel on a supercomputer, in a phone, and in a coffee maker; only the configuration and the surroundings differ.
Windows NT won on compatibility. The DOS line with Windows 9x ended in 2001, and today's Windows is a kernel written from scratch in 1993, drawing on the VMS experience, with memory protection and access control lists from the first version. That it still runs programs from 1995 is not an accident but a commitment that shaped its architecture.
The fourth line on the map did not win, but it did not disappear either: microkernels. Mach turned out too slow for a desktop machine, but L4 lives in the modems of billions of phones, QNX in cars, and seL4 became the first kernel with a mathematical proof of correctness. Where this is heading is covered inmodule 18.
Sources
- The Unix Heritage Society: archives of Research Unix code and documentation
- Salus, A Quarter Century of UNIX: the BSD and System V split, firsthand
- Brooks, The Mythical Man-Month: OS/360 through the eyes of its manager
- Multicians.org: Multics, collected by the people who built it
- Torvalds, Diamond, Just for Fun: the early years of Linux
- Computer History Museum: dates, machines, and oral histories