User Tools

Site Tools


Fourth Edition Unix

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.

systems/4th_edition.txt · Last modified: 2023/10/18 17:35 by segaloco