└── README.md /README.md: -------------------------------------------------------------------------------- 1 | # History of UNIX Design and Interfaces 2 | 3 | Creative Commons License
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 | --------------------------------------------------------------------------------