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.
|Snapshot | Repository | Primary Research
-------------|---------|------------|----------------- Source Code | X | X | Time | X | X | Contributors | | X | X Branches | | X | X
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.
- unix-history-make is a repository containing code and metadata used to build the above repository. Contributions to this repository are welcomed.
Project status
Currently, the project has finished the concept demonstration stage with the creation of a repository containing the V5, V6, and V7 Research Edition Unix snapshots. The files appear to be added in the repository in chronological order according to their modification time, and some part part of the source code has been attributed to its actual authors. Commands like git blame
and git log
produce the expected results.
Future plans involve the integration of BSD snapshots, the BSD SCCS repository, and the FreeBSD repository.
Branches and tags
The following branches are included in the unix-history-repo
.
- Research-Development-V5
- Research-Development-V6
- Research-Development-V7
- Research-Release
The -Development branches contain a commit for every file that was added during the development of the corresponding system. The Research-Release
branch has each development cycle merged into it.
In addition, the following tags mark specific releases.
- Epoch
- Research-V5
- Research-V6
- Research-V7
Cool things you can do
Run
git clone https://github.com/dspinellis/unix-history-repo
git checkout Research-Release
to get a local copy of the Unix history repository.
View log across releases
Running
git log --reverse --date-order
will give you commits like the following
commit b7b2640b9e27415d453a8fbe975a87902a01849d
Author: Ken Thompson <research!ken>
Date: Tue Nov 26 18:13:21 1974 -0500
Research V5 development
Add file usr/sys/ken/slp.c
[...]
commit 3d19667a65d35a411d911282ed8b87e32a56a349
Author: Dennis Ritchie <research!dmr>
Date: Mon Dec 2 18:18:02 1974 -0500
Research V5 development
Add file usr/sys/dmr/kl.c
[...]
commit 171931a3f6f28ce4d196c20fdec6a4413a843f89
Author: Brian W. Kernighan <research!bwk>
Date: Tue May 13 19:43:47 1975 -0500
Research V6 development
Add file rat/r.g
[...]
commit ac4b13bca433a44a97689af10247970118834696
Author: S. R. Bourne <research!srb>
Date: Fri Jan 12 02:17:45 1979 -0500
Research V7 development
Add file usr/src/cmd/sh/blok.c
View changes to a specific file
Run
git log --follow --simplify-merges usr/src/cmd/c/c00.c
to see dates on which the C compiler was modified.
Annotate lines in a specific file by their version
Run
git blame -C -C usr/sys/sys/pipe.c
to see how the Unix pipe functionality evolved over the years.
abaf72cd usr/sys/sys/pipe.c (Ken Thompson 1979-01-10 15:19:35 -0500 39) r = u.u_r.r_val1;
5161b35e usr/sys/ken/pipe.c (Ken Thompson 1975-07-17 10:33:37 -0500 40) wf = falloc();
5161b35e usr/sys/ken/pipe.c (Ken Thompson 1975-07-17 10:33:37 -0500 41) if(wf == NULL) {
5161b35e usr/sys/ken/pipe.c (Ken Thompson 1975-07-17 10:33:37 -0500 42) rf->f_count = 0;
5161b35e usr/sys/ken/pipe.c (Ken Thompson 1975-07-17 10:33:37 -0500 43) u.u_ofile[r] = NULL;
5161b35e usr/sys/ken/pipe.c (Ken Thompson 1975-07-17 10:33:37 -0500 44) iput(ip);
5161b35e usr/sys/ken/pipe.c (Ken Thompson 1975-07-17 10:33:37 -0500 45) return;
5161b35e usr/sys/ken/pipe.c (Ken Thompson 1975-07-17 10:33:37 -0500 46) }
abaf72cd usr/sys/sys/pipe.c (Ken Thompson 1979-01-10 15:19:35 -0500 47) u.u_r.r_val2 = u.u_r.r_val1;
abaf72cd usr/sys/sys/pipe.c (Ken Thompson 1979-01-10 15:19:35 -0500 48) u.u_r.r_val1 = r;
7aa93549 usr/sys/ken/pipe.c (Ken Thompson 1974-11-26 18:13:21 -0500 49) wf->f_flag = FWRITE|FPIPE;
7aa93549 usr/sys/ken/pipe.c (Ken Thompson 1974-11-26 18:13:21 -0500 50) wf->f_inode = ip;
7aa93549 usr/sys/ken/pipe.c (Ken Thompson 1974-11-26 18:13:21 -0500 51) rf->f_flag = FREAD|FPIPE;
How you can help
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 for the 5th, 6th, and 7th Edition Unix.
- Look for parts of the system that have not yet been attributed in the 5th, 6th, and 7th Edition Unix, and propose suitable attributions.
- Look for authors whose identifier starts with
x-
in the author id to name map file, 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.
Acknowledgements
- The following poeple helped with BSD contributor names
- Anatole Shaw
- Era Eriksson
- The following poeple helped with Bell Labs login ids
- Arnold D. Robbins
- Brian W. Kernighan