[TUHS] Some USG Program Generic Observations

segaloco via TUHS tuhs at tuhs.org
Mon Jan 12 10:56:42 AEST 2026


Lots of info pulled from the recent USG document dump incoming.
Some of this is already known, but confirmed helpfully by documents here
so pardon any repeat information.  I thought I'd share a little writeup
on early USG UNIX patterns observed in some of these documents.

The first thing I've gleaned from this documentation is detail on the
source code directory structure of USG's Program Generic line of UNIX,
as well as how this line relates to earlier efforts by USG.

First, USG's prior efforts were simply named "Releases", as is seen in
both [1] and [2].  The former concerns the automated kernel build system
"SYSGEN" which USG used for their kernels.  Therein, the familiar
structure under /usr/sys for kernel sources is seen.  This would be
between the Fourth and Fifth Edition.  In June, 1974, the same month
that the Fifth Edition manual is issued, a report is also issued[3]
detailing the addition of comments to the source headers in USG UNIX.
These comments do not show up until the Sixth Edition in the
research stream so this may indicate the commentary added between those
kernels originated with the USG.

In any case, the main takeaway here is that USG's first go around with
"Release" issues retained the source code structure of Research for the
most part, but were not opposed to adding in their own changes.  Both
the Release 2 and Release 3 documents show the sources of various bits
in the same place they are in Research UNIX.

Once Program Generic comes into the picture in late 1975/early 1976,
things change up a bit.  A paper in 1974[4] establishes a suggested tree
for source code that is quite different from the Research tree.
Instead, different subsystems are isolated and all such subsystems, both
kernel and user, are stored in /usr/source.

This file structure is realized in file schedules for both Issue 1 and
Issue 2 of Program Generic[5][6].  Between these and [4] it is possible
to reconstruct the source file tree for both Issues.  This gives then
several insights into the differences in the Program Generic line.

Issue 2 picks up the following new features:

- Agen, An Associative Memory Generator (Described in [7])
- Bc - The familiar mathematics language
- Cref - Cross reference lister
- Lex - Lexical analyzer generator (Looks more like PWB than V7ish)
- LIL - A little language
- Neqn - Even better equations
- Nroff - Even better typesetting
- Portc - The Portable C Library
- Sno - SNOBOL
- Yacc - Yet another compiler compiler

As well as the following changes:

- Adds a fifth syscall file (sys5.c) to the kernel, presumably for USG
kernel additions.

- Ed, getty, ld, and mesg are all updated to C versions.  These are all
similarly moved to C between V5 and V6.

- Added gsi, icheck, ichecks, wall, removes msh and tty, consistent with
V5 -> V6 update.

- Adds mtm, a magtape manipulation program.  This remains in Issue 3
as well as CB-UNIX 2.1[8].

- The ov nroff filter is removed.  This was not carried forward in
research after V3.

- Dropped the cat(4), draa(4), tiu(4), vs(4), and vt(4) drivers.

- Picked up hp(4), hs(4), ht(4) drivers.

- Picked up rh(4) driver.

So much of this rings of the changes seen between V5 and V6 in research.
This speaks to UNIX Program Generic Issue 1 being a more V5-ish
experience whereas Issue 2 is on its way to V6.  In any case, it sounds
like Release 2 and Release 3 (pre-Program Generic) took after V4 a bit
more.

Interesting in this too is that this source code structure is seen,
somewhat, in the PWB and CB-UNIX lines, but only in their kernel
sources.  This is seen in path names like io, os, ml, which are used for
kernel system segregation in both the CB-UNIX and PWB/commercial line.
However, sources are still in the s1/s2/s3/s4/etc. tree as of PWB1,
then are in the V7-ish cmd/libc/sys(or uts) structure as of System III.

This goes go show at least four source tree influences in C-UNIX:

- PDP-11/45 Research (/usr/source, /usr/sys, kernel with ken/dmr paths)
- USG (/usr/source/io1, /usr/source/opsys, /usr/source/cmd1)
- PWB ($PREFIX/sys/ml, $PREFIX/sys/os, $PREFIX/sys/cf where $PREFIX=/sys PWB1, /usr PWB2)
- V7 Research (/usr/src, /usr/sys, kernel with dev/sys paths)

System III then sticks the kernel down in /usr/src/uts in a PWB-ish
structure while everything else is V7-ish in directory structure.
Hopefully whenever some PWB 2.0 and/or UNIX/TS documentation pop up the
providence of the different ways of storing source code will be clearer.

Thanks for following along, getting some solid info like this on the
Program Generic line has been elusive for some time...

- Matt G.

[1] - https://www.tuhs.org/Archive/Documentation/TechReports/USG_Library/1060_SYSGEN_Shell_Procedure.pdf
[2] - https://www.tuhs.org/Archive/Documentation/TechReports/USG_Library/1017_Setting_Up_UNIX_Issue_Three.pdf
[3] - https://www.tuhs.org/Archive/Documentation/TechReports/USG_Library/1066_UNIX_Operating_System_Change_to_Header_Files.pdf
[4] - https://www.tuhs.org/Archive/Documentation/TechReports/USG_Library/1039_Reorganization_of_UNIX_Source_Files.pdf
[5] - https://www.tuhs.org/Archive/Documentation/TechReports/USG_Library/1040_UNIX_Operating_System_Generic_Program_Issue_1.pdf
[6] - https://www.tuhs.org/Archive/Documentation/TechReports/USG_Library/1046_UNIX_Support_Classifications_for_PG_1C300_Issue_2.pdf
[7] - https://www.tuhs.org/Archive/Documentation/TechReports/USG_Library/1064_Agen_An_Associative_Memory_Generator.pdf
[8] - https://www.tuhs.org/Archive/Distributions/USDL/CB_Unix/man/man1/mtm.1.pdf
[9] - https://gitlab.com/segaloco/usg_pg_skeldiff



More information about the TUHS mailing list