└── README.md
/README.md:
--------------------------------------------------------------------------------
1 | # History of UNIX Design and Interfaces
2 |
3 | 
This work is licensed under a Creative Commons Attribution 4.0 International License.
4 |
5 | This document is an attempt to capture the history of UNIX design and interfaces from its inception in 1969 until today.
6 | We aim to answer the question of when specific parts of UNIX design and interfaces were introduced, and why.
7 | We use a liberal definition of UNIX in this document -- IOW, we include all UNIX-like operating systems (including Linux) and make no difference between POSIX and UNIX.
8 |
9 | If you find something that is inaccurate, or you want to add something, please send a pull request!
10 |
11 | ## Prelude
12 |
13 | ### 1964
14 |
15 | * The Multics project is started. Ken Thompson, and others, were working on Multics before creating UNIX [Salus, 1994].
16 |
17 | ## UNIX at Bell Labs
18 |
19 | ### 1969
20 |
21 | * Bell Labs withdraws from the Multics project, leaving Ken Thompson (and others) without an interactive, time-sharing operating system.
22 | * Ken Thompson writes the first version of UNIX on PDP-7 in the summer of 1969 [Salus, 1994].
23 |
24 | ### 1970
25 |
26 | * PDP-11 arrives to Bell Labs and UNIX is ported to it.
27 |
28 | ### 1971
29 |
30 | * 1st Edition UNIX is released in November.
31 |
32 | ### 1972
33 |
34 | * 2nd Edition UNIX is released in June.
35 |
36 | ### 1973
37 |
38 | * 3rd Edition UNIX is released in February. The `pipe` system call is introduced.
39 | * Ken Thompson presents UNIX at SOSP in October 1973.
40 | * 4th Edition UNIX is released in November. This is the first version of UNIX written in C.
41 |
42 | ### 1974
43 |
44 | * First paper on UNIX, "The UNIX Time-Sharing System" by Dennis M. Ritchie and Ken Thompson, is published in the "Communications of the ACM" in July 1974.
45 |
46 | ## UNIX at Berkeley
47 |
48 | ### 1975
49 |
50 | * Ken Thompson takes a sabbatical from Bell Labs, joins Berkeley as a visiting professor, and helps install V6 UNIX.
51 |
52 | ### 1978
53 |
54 | * Bill Joy releases Berkeley Software Distribution (BSD) in March 1978.
55 | * V7 UNIX is released.
56 |
57 | ### 1979
58 |
59 | * 3BSD is released. The `vfork` system call is introduced. Virtual memory is paging-based [[Babaoglu and Joy, 1981](https://dl.acm.org/citation.cfm?id=806595)].
60 |
61 | ### 1980
62 |
63 | * 4.0BSD is released.
64 |
65 | ### 1981
66 |
67 | * 4.1BSD is released.
68 |
69 | ### 1983
70 |
71 | * 4.2BSD released in September 1983 with networking (BSD sockets), new filesystem, redesigned system interface, and new signal interface. The `select` system call is also introduced [[Stenberg, 2019](https://daniel.haxx.se/docs/poll-vs-select.html)]. The 4.2BSD release also introduces the `fsync` system call and the `mmap` system call, although the latter is not implemented fully [[Gingell _et al._, 1987]](http://kos.enix.org/pub/gingell8.pdf).
72 | * UNIX System V Release 1 is released. Interprocess communications (IPC) (semaphores, message queues and shared memory) were added [[System V Definition](http://www.linfo.org/system_v.html)].
73 |
74 | ### 1986
75 |
76 | * 4.3BSD released.
77 |
78 | ### 1987
79 |
80 | * SVR3 Unix is released. The `poll` system call is introduced [[Stenberg, 2019](https://daniel.haxx.se/docs/poll-vs-select.html); [OpenBSD man page](https://man.openbsd.org/poll.2#HISTORY); AT&T, 1987].
81 |
82 | ## UNIX and POSIX
83 |
84 | ### 1988
85 |
86 | * 4.3BSD-Tahoe is released.
87 | * IEEE Std 1003.1-1988 ("POSIX") released in 1988.
88 | * SunOS 4.0 is released in December 1988. Virtual memory subsystem is rewritten to support shared-memory with `mmap` [[Gingell _et al._, 1987]](http://kos.enix.org/pub/gingell8.pdf). Gingell _et al._ mention Multics file/process memory integration and TENEX page-based VM in historical acknowledgements.
89 |
90 | ### 1989
91 |
92 | * System V Release 4 (SRv4) is released.
93 |
94 | ### 1990
95 |
96 | * 4.3BSD-Reno is released.
97 |
98 | ### 1991
99 |
100 | * Linux released in September 1991
101 |
102 | ### 1992
103 |
104 | * 386BSD released
105 |
106 | ### 1993
107 |
108 | * 4.4BSD released. Last major Berkeley UNIX release.
109 | * POSIX.1b released: Asynchronous I/O, process scheduling, high-precision clocks and timers, and interprocess communication using semaphores, shared memory, and message queues.
110 |
111 | ### 1995
112 |
113 | * POSIX.1c released: Threads
114 |
115 | ## Beyond POSIX
116 |
117 | ### 2000
118 |
119 | * POSIX.1g released: Network APIs (including sockets)
120 | * FreeBSD introduces the Kqueue interface [[Lemon, 2000](https://people.freebsd.org/~jlemon/papers/kqueue.pdf)]
121 |
122 | ## References
123 |
124 | * AT&T. UNIX System V Programmers Reference Manual. 1987.
125 | * [System V Definition](http://www.linfo.org/system_v.html)
126 | * [The Unix Heritage Society](https://www.tuhs.org/)
127 | * Marshall Kirk McKusick, Keith Bostic, Michael J. Karels, and John Quarterman. [The Design and Implementation of the 4.4 BSD Operating System ](https://www.amazon.com/Implementation-Operating-paperback-Addison-wesley-Systems/dp/0132317923). 1996.
128 | * Michael Kerrisk. [The Linux Programming Interface: A Linux and UNIX System Programming Handbook](https://www.amazon.com/Linux-Programming-Interface-System-Handbook-ebook/dp/B004OEJMZM). 2010.
129 | * Marshall Kirk McKusick. [Twenty Years of Berkeley Unix - From AT&T-Owned to Freely Redistributable](https://www.oreilly.com/openbook/opensources/book/kirkmck.html). 1999.
130 | * Eric S. Raymond [The Art of Unix Programming](http://www.catb.org/esr/writings/taoup/). 2003.
131 | * Peter H. Salus. [A Quarter Century of UNIX](https://www.amazon.com/Quarter-Century-UNIX-Peter-Salus/dp/0201547775). 1994.
132 | * Daniel Stenberg. [poll vs select vs event-based](https://daniel.haxx.se/docs/poll-vs-select.html). 2019
133 |
--------------------------------------------------------------------------------