Release Date: November 1973
Released By: Bell Labs Research
Source Code: a kernel which predates 4th Edition is nsys.tar.gz in the Unix Archive
Documentation: 4th Edition man pages, browsable in the Unix Tree
The fourth edition of Unix was the first version to have a kernel written in a high level language, C, along with some of the commands. A full and complete copy of Fourth Edition no longer exists. We have:
The manuals for Fourth Edition in machine-readable format, and
A copy of the earliest extant kernel in C, the “nsys” kernel, which pre-dates the actual Fourth Edition by only a few months.
The “nsys” kernel was donated by Dennis Ritchie. This is a version of the kernel quite close to that released in Fourth Edition, but without pipes. Dennis Ritchie writes:
This is a tar archive derived from a DECtape labelled “nsys”. What is contains is just the kernel source, 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 address 0, and transferred to at location 0.
The Fourth Edition marks the first edition of research UNIX for which the accompanying manual is produced in NROFF rather than ROFF. Many deprecated/retired pages can be found in the manx folder that still bear ROFF formatting.
Among the more noticeable changes are:
The filesystem has been altered to support 14 character file names (over the previous 8 characters), to support group IDs, and to support indirect blocks allowing the use of larger storage devices (e.g. RP-11 disks)
The object file loader has dropped support for V1-style a.out binaries but now supports shared text segments, and associated development tools have been modified to support this as well
The epoch is redefined in seconds instead of milliseconds and with a reference date of 1/1/1970, starting the modern UNIX epoch
The signal(II) system call is added to replace individual system calls for redirecting specific exceptions
The contents of the /sys filesystem have been merged with the /usr filesystem
Pipes have gained their familiar | syntax (along with ^), replacing the > which could be confused with output redirection
Block devices now present both buffered and raw interfaces
The init process now offloads machine-specific startup to /etc/rc rather than requiring modification for different disks and other localisms
Other changes include:
Alteration of makdir(II) into the mknod(II) syscall
Removal of the mdate(II) and rele(II) syscalls
The stty(II) interface has been altered to be less DC-11 specific
open(II) now supports mode “2” (read/write)
nice(II) allows setting a priority (rather than dropping to a fixed one)
mount(II) expands mountable filesystem count past 4
kill(II) can now be used to send arbitrary signals, not just kill itself
stat(II) now reports if a file is a block or character special file
Deprecation of applications targeting the assembly version of UNIX such as tmg(VI) and m6(VI)
Deprecation of the salloc(III) library
Removal of any remaining formal B support
Removed DECish basic(VI) in favor of bas(I)
New dump(VIII)/restor(VIII) filesystem utilities to replace old chk/salv-based approach
chdir(I) now makes mention of needing 'x' permission on directories
Group support added to file modifiers
cref(I) gains better C support
date(I) adds support for setting the year
Core files now include the per-process data at the front, not the back
login(I) now always prompts for a password as opposed to receiving it as an argument
The tty driver supports 12 terminals instead of 10
the tty driver now discards the entire buffer on overflow instead of printing '#' per overflow character
The tty driver maps uppercase to lowercase if only uppercase is used
The console driver now has greater parity with other tty drivers
2741 terminal support appears to be on the way out
A new boot procedure is provided for the C UNIX system
Section I adds catsim, comm, file, grep, merge, nice, nohup, pfe, plot, shift, sleep, tr, troff, wait
Section II adds intro, getgid, indir, setgid
Section III adds getarg, getchr, getpw, hmul, ierror, ldiv, nargs, perror, printf, putchr, reset, setfil, vt
Section IV adds cat, da, tiu, vs
Section VI adds azel, chess, cubic, maze, sfs, sky, spline, wump
Section VII adds tmheader
Section VIII adds ino, mkfs, mknod, sync, update
For more information about Fourth Edition Unix, see The Evolution of the Unix Time-sharing System by Dennis Ritchie.