Nsys

FileSizeDate
sysdir 

Dennis Ritchie writes:

So far as I can determine, this is the earliest version of the Unix kernel that currently exists in machine-readable form. There are earlier paper listings of the assembly-language version for the PDP-11, and somewhat more fragmentary listings of the PDP-7 version; as of writing, they are on paper only.

This is a tar archive derived from a DECtape labelled ``nsys''; a couple of years ago Keith Bostic and Paul Vixie attached a DECtape drive to a VAX and transcribed some tapes that we were storing.

The nsys files are timestamped August 31, 1973. This is consistent with other known dates. The files use structs, but in December 1972 the C compiler didn't support structs. In September 1973, the C version of the kernel finally supplanted the assembly version, and the kernel here certainly works fine.

Dennis continues:

1973, however, is a year consistent with other information. The Third Edition manual from early 1973 clearly refers to a system still written in assembly language; the Fourth Edition (nominally November, 1973, and incidentally the first rendered via troff on our first Graphic Systems typesetter) announces

In the months since the last appearance of this manual, many changes have occurred both in the system itself and in the way it is used. The most important changes result from a complete rewrite of the UNIX system in the C language....

The number of UNIX installations is now above 20....

What is here is just the source of the OS itself, written in the pre-K&R dialect of C. It is intended only for PDP-11/45, and has setup and memory-handling code that will not work on other models (it's missing things special to the later, smaller models, and the larger physical address space of the still later 11/70.) It appears that it is intended to be loaded into memory at physical 0, and transferred to at location 0.

So far as I can determine, the disk format it expects is compatible with the layout of other earlyish research systems (V5, V6) for example. But perhaps not, and it's not certain that the source is complete. Even the compilation mechanism is a bit unclear, though it certainly used the shell script ken/rc, which appears to depend on having the *.o files from ken/* and dmr/* and also slib.a, which doesn't exist on the tape. My guess is that this was an archive of already compiled .o files, so that (for example) to test-build a system one would edit a file, compile it, and run ken/rc to load it. The `ustr' routine referred to in ken/rc evidently stripped off the a.out header and the symbols from the a.out file.

Dennis Ritchie
January 1999