Unix History Repository

The goal of this project is to create a git repository representing the Unix source code history, starting from the 1970s and ending in the modern time. To fulfill this goal the project brings data from early snapshots, repositories, and primary research. The project aims to put in the repository as much metadata as possible, allowing the automated analysis of Unix history. The following table illustrates the type of material that can be gathered and integrated into the repository.

SnapshotRepositoryPrimary Research

Two repositories are associated with the project:

unix-history-repo is a repository representing a reconstructed version of the Unix history, based on the currently available data. This repository will be often automatically regenerated from scratch, so this is not a place to make contributions. To ensure replicability its users are encouraged to fork it or archive it.unix-history-make is a repository containing code and metadata used to build the above repository. Contributions to this repository are welcomed.

The first phase of the project involved creating a single timeline from the First Edition of Unix until the present.

The project has achieved its first major goal with the establishment of a continuous timeline from 1972 to 2015. The repository contains:

snapshots of V1, V3, V4, V5, V6, and V7 Research Edition,Unix/32V,all available BSD releases,the CSRG SCCS history,two releases of 386BSD,the FreeBSD 1.0 to 1.1.5 CVS history,an import of the FreeBSD repository starting from its initial imports that led to FreeBSD 2.0, andthe current FreeBSD repository.

The files appear to be added in the repository in chronological order according to their modification time, and large parts of the source code have been attributed to their actual authors. Commands like git blame and (sometimes) git log produce the expected results.

The repository contains a number of two-way merges.

3 BSD is merged from Unix/32V and Research Edition 6Various BSD releases are merged from the development branch and a time point of BSD-SCCSFreeBSD 1.0 is merged from Net/2 BSD and 386BSD-0.1FreeBSD 2.0 is merged from BSD 4.4/Lite1 and FreeBSD 1.1.5

Blame is apportioned appropriately.

The following tags or branch names mark specific releases, listed in rough chronological order.

EpochResearch-V1Research-V3Research-V4Research-V5Research-V6BSD-1BSD-2Research-V7Bell-32VBSD-3BSD-4BSD-4_1_snapBSD-4_1c_2BSD-4_2BSD-4_3BSD-4_3_RenoBSD-4_3_Net_1BSD-4_3_TahoeBSD-4_3_Net_2BSD-4_4BSD-4_4_Lite1BSD-4_4_Lite2BSD-SCCS-END386BSD-0.0386BSD-0.1FreeBSD-release/1.0, 1.1, 1.1.5FreeBSD-release/2.0 2.0.5, 2.1.0, 2.1.5, 2.1.6,, 2.1.7, 2.2.0, 2.2.1, 2.2.2, 2.2.5, 2.2.6, 2.2.7, 2.2.8FreeBSD-release/3.0.0, 3.1.0, 3.2.0, 3.3.0, 3.4.0, 3.5.0FreeBSD-release/4.0.0 4.1.0, 4.1.1, 4.2.0, 4.3.0, 4.4.0, 4.5.0, 4.6.0, 4.6.1, 4.6.2, 4.7.0, 4.8.0, 4.9.0, 4.10.0, 4.11.0FreeBSD-release/5.0.0 5.1.0, 5.2.0, 5.2.1, 5.3.0, 5.4.0, 5.5.0FreeBSD-release/6.0.0, 6.1.0, 6.2.0, 6.3.0, 6.4.0FreeBSD-release/7.0.0, 7.1.0, 7.2.0, 7.3.0, 7.4.0FreeBSD-release/8.0.0, 8.1.0, 8.2.0, 8.3.0, 8.4.0FreeBSD-release/9.0.0, 9.1.0, 9.2.0FreeBSD-release/10.0.0, 10.1.0

More tags and branches are available.

The -Snapshot-Development branches denote commits that have been synthesized from a time-ordered sequence of a snapshot’s files.The -VCS-Development tags denote the point along an imported version control history branch where a particular release occurred.


git clone https://github.com/dspinellis/unix-history-repogit checkout BSD-Release

to get a local copy of the Unix history repository.


git log –reverse –date-order

will give you commits like the following

commit 94a21182365ebb258eeee2aa41c5fbcb1f7fd566Author: Ken Thompson and Dennis Ritchie Date: Tue Jun 20 04:00:00 1972 -0500 Research V1 development Work on file u5.s[…]commit b7b2640b9e27415d453a8fbe975a87902a01849dAuthor: Ken Thompson Date: Tue Nov 26 18:13:21 1974 -0500 Research V5 development Work on file usr/sys/ken/slp.c[…]commit 3d19667a65d35a411d911282ed8b87e32a56a349Author: Dennis Ritchie Date: Mon Dec 2 18:18:02 1974 -0500 Research V5 development Work on file usr/sys/dmr/kl.c[…]commit 171931a3f6f28ce4d196c20fdec6a4413a843f89Author: Brian W. Kernighan Date: Tue May 13 19:43:47 1975 -0500 Research V6 development Work on file rat/r.g[…]commit ac4b13bca433a44a97689af10247970118834696Author: S. R. Bourne Date: Fri Jan 12 02:17:45 1979 -0500 Research V7 development Work on file usr/src/cmd/sh/blok.c[…]Author: Eric Schmidt Date: Sat Jan 5 22:49:18 1980 -0800 BSD 3 development Work on file usr/src/cmd/net/sub.c


git checkout Research-Releasegit log –follow –simplify-merges usr/src/cmd/c/c00.c

to see dates on which the C compiler was modified.


git blame -C -C usr/sys/sys/pipe.c

to see how the Unix pipe functionality evolved over the years.

3cc1108b usr/sys/ken/pipe.c (Ken Thompson 1974-11-26 18:13:21 -0500 53) rf->f_flag = FREAD|FPIPE;3cc1108b usr/sys/ken/pipe.c (Ken Thompson 1974-11-26 18:13:21 -0500 54) rf->f_inode = ip;3cc1108b usr/sys/ken/pipe.c (Ken Thompson 1974-11-26 18:13:21 -0500 55) ip->i_count = 2;[…]1f183be2 usr/sys/sys/pipe.c (Ken Thompson 1979-01-10 15:19:35 -0500 122) register struct inode *ip;1f183be2 usr/sys/sys/pipe.c (Ken Thompson 1979-01-10 15:19:35 -0500 123) 1f183be2 usr/sys/sys/pipe.c (Ken Thompson 1979-01-10 15:19:35 -0500 124) ip = fp->f_inode;1f183be2 usr/sys/sys/pipe.c (Ken Thompson 1979-01-10 15:19:35 -0500 125) c = u.u_count;1f183be2 usr/sys/sys/pipe.c (Ken Thompson 1979-01-10 15:19:35 -0500 126) 1f183be2 usr/sys/sys/pipe.c (Ken Thompson 1979-01-10 15:19:35 -0500 127) loop:1f183be2 usr/sys/sys/pipe.c (Ken Thompson 1979-01-10 15:19:35 -0500 128) 1f183be2 usr/sys/sys/pipe.c (Ken Thompson 1979-01-10 15:19:35 -0500 129) /*9a9f6b22 usr/src/sys/sys/pipe.c (Bill Joy 1980-01-05 05:51:18 -0800 130) * If error or all done, return.9a9f6b22 usr/src/sys/sys/pipe.c (Bill Joy 1980-01-05 05:51:18 -0800 131) */9a9f6b22 usr/src/sys/sys/pipe.c (Bill Joy 1980-01-05 05:51:18 -0800 132) 9a9f6b22 usr/src/sys/sys/pipe.c (Bill Joy 1980-01-05 05:51:18 -0800 133) if (u.u_error)9a9f6b22 usr/src/sys/sys/pipe.c (Bill Joy 1980-01-05 05:51:18 -0800 134) return;6d632e85 usr/sys/ken/pipe.c (Ken Thompson 1975-07-17 10:33:37 -0500 135) plock(ip);6d632e85 usr/sys/ken/pipe.c (Ken Thompson 1975-07-17 10:33:37 -0500 136) if(c == 0) {6d632e85 usr/sys/ken/pipe.c (Ken Thompson 1975-07-17 10:33:37 -0500 137) prele(ip);6d632e85 usr/sys/ken/pipe.c (Ken Thompson 1975-07-17 10:33:37 -0500 138) u.u_count = 0;6d632e85 usr/sys/ken/pipe.c (Ken Thompson 1975-07-17 10:33:37 -0500 139) return;6d632e85 usr/sys/ken/pipe.c (Ken Thompson 1975-07-17 10:33:37 -0500 140) }

You can help if you were there at the time, or if you can locate a source that contains information that is currently missing.

Look for errors and omissions in the files that map file paths to authors.Look for parts of the system that have not yet been attributed in these files and propose suitable attributions. Keep in mind that attributions for parts that were developed in one place and modified elsewhere (e.g. developed at Bell Labs and modified at Berkeley) should be for the person who did the modification, not the original author.Look for authors whose identifier starts with x- in the author id to name map files for Bell Labs, and Berkeley, and provide or confirm their actual login identifier. (The one used is a guess.)Contribute a path regular expression to contributor map file (see v7.map) for 4.2BSD, 4.3BSD, 4.3BSD-Reno, 4.3BSD-Tahoe, 4.3BSD-Alpha, and Net2.Import further branches, such as 2BSD and NetBSD.

The -make repository is provided to share and document the creation process, rather than as a bullet-proof way to get consistent and repeatable results. For instance, importing the snapshots on a system that is case-insensitive (NTFS, HFS Plus with default settings) will result in a few files getting lost.

Nevertheless, the -repo repository can be created with the following commands.

Diomidis Spinellis. A repository with 44 years of Unix evolution. In MSR ’15: Proceedings of the 12th Working Conference on Mining Software Repositories, pages 13-16. IEEE, 2015. Best Data Showcase Award. PDF, HTML, poster.Wikipedia: The Free Encyclopedia TUHS: The Unix Heritage Society USENIX: The Advanced Computing Systems Association Historical documents and data Studies The following people helped with Bell Labs login identifiers. Brian W. KernighanDoug McIlroyArnold D. RobbinsThe following people helped with *BSD login identifiers. Clem ColeEra ErikssonMary Ann HortonWarner LoshKirk McKusickJeremy C. ReedIngo SchwarzeAnatole ShawThe BSD SCCS import code is based on work by

View the original article here