Good day everyone, I'm emailing to start a thread on part of my larger UNIX/TS 4.x
project that is coming to a conclusion. Lots of info here, so pardon the lack of
brevity.
Over the course of the past month or so I've been diffing all of the manual pages
between System III and System V to produce a content-accurate set of typesetter sources
for the UNIX Release 4.1 (3B20S) manual I found a while back. I've completed my
shallow pass of everything (all pages accounted for, generally complete, except the
permuted index) and am now about halfway through my second pass (detailed, three-way
diffs, documenting changes) and thought I'd share a few findings to kick off what
will likely be more exposition of the 3.x->4.x->5.x->SysV time-period vis-a-vis
available documentation. Most analysis here will center specifically around the contents
of the 4.1 3B20S manual and later Documents For UNIX 4.0 as those are the only documents
I've found for 4.x. I mention that as there are whole subsystems excluded from this
manual that show back up in my 5.0 manual, so I suspect they were pieces that weren't
ready for 3B-20 at the time but were in other installations. Fortran, SNOBOL, Honeywell
6000 communication, and the old lpr print system are absent, for instance. Anywho, as I
wrap up what I can prove, then I'll probably swoop through and compare these SysIII
to SysV to at least document what may have happened in that timeframe, if anything. If
I'm lucky there are no visible changes in the man pages meaning they were nominally
identical between the various versions. We'll see.
Also a disclaimer, this is entirely documentation based. I have not yet cross-referenced
changes I see in manuals with changes observed between code revisions. A later phase of
my project will be doing this sort of analysis to try and reconstruct some idea of what
code changes were 3-to-4 and which ones were 4-to-5, but that's quite a ways away.
All that to say, a manual page could entirely be updated much later than a change it
describes, so if something in code contradicts anything in the manuals, the code is
obviously what the system was actually doing at the time. The manual is just how well
someone bothered to document it.
The sections I've finished thus far are 2 - System Calls, 5 - Miscellaneous
Facilities, and 6 - Games, and the frontmatter/intro section. Here's a bit of digest
on what I've gone over with a fine toothed comb thus far:
3.x->4.x:
---------
There is a general trend towards platform-independence that already started with merging
of PDP-11 and VAX support into a single-ish codebase ala 3.x. This trend continues with
indicating that machine discrepancies (and obsolescence) will be noted in the mast head of
pertinent manual entries. References to adb are dropped from this intro section.
Additionally, a new section numbering is applied to the User's and
Administrator's Manuals (which are split by the way). This starts the
numbering/split scheme we continue to see in 5.0 and SysV a year or so later, where
sections 4, 5, and 7 are shuffled to stick device files in section 7 and in turn split off
1M, 7, and 8 into a separate Administrator's Manual (a_man vs u_man). Unfortunately,
since this split did occur at 4.x, I don't have the 1M, 7, and 8 sections to compare
with, the copy of the manual I nabbed was just the User's Manual. If someone has a
UNIX Administrator's Manual Release 4.x that they'd be willing to offer up for
scanning/analysis, that would definitely help complete the circle.
Other frontmatter changes imply a move more towards commercialize-able literature. The
Editors are commented out as indicated by the SysV manual sources later on. Unfortunately
this means my goal of documenting authorship remains unattainable at present, but in any
case, somewhere along the way the responsibility was shifted from Lab 364 (3.x) to Lab
4542 (5.x). An acknowledgement from the Lab 364 folks in the 3.x manual is dropped
entirely, not even commented out. This acknowledgement thanks the efforts of those who
assembled the V6, V7, PWB/2.0, and UNIX/TS 1.1 manuals (what I wouldn't give for the
latter two...). Another change regarding commercialized literature is the reference to
UNIX for Beginners in the intro section is replaced with a reference the "UNIX
User's Guide". This manual does show up by SysV, but I don't know if this
implies they were running those sets this way by the time of 4.1. Arnold Robbins provided
Documents for UNIX 4.0 last year which is very much still the old /usr/doc *roff
documents, so either they were pre-empting the material they would start to produce with
5.x, or there is yet another set of potential 4.x documents floating around out there.
In any case, there are a handful of changes to 2 - system calls:
- intro reflects that error.h has been renamed to errno.h
- The "SysV" IPC shows up here in 4.1. I forget who mentioned it but
someone has mentioned in the past 4.0 and 4.1 had different IPC systems, so this
isn't that illuminating unfortunately.
- A minimum of 1 character for filenames is noted. I suppose around this time someone
won the "well it doesn't *say* you can't have a zero character file
name" pedantic argument.
- Various areas where groups are referred to, text is updated to ensure it is
understood the author means "effective" group
- brk, exec, exit, and fork pages all now have verbiage concerning how they interact
with IPC
- brk clarifies that added space is initialized to zero
- exec adds verbiage about argc, argv, envp, and environ, and notes that ENOEXEC
doesn't apply to execlp and execvp
- fork adds a thorough description of which attributes of the parent process are
passed down
- kill elaborates that real or effective user (and group) can influence permissions
- ptrace updates adb references to sdb and adds 3B-20 verbiage
- setuid consolidates explanations of setuid and setgid, no noticed change to
functionality
- signal now defers to exit(2) to describe termination actions and changes header
references from signal.h to sys/signal.h
- sys3b is added for 3B-20-specific system calls
- utsname gains the machine field (for -m)
- wait now stashes the signal number causing a return in the upper byte of the status
word
And then under 5 - misc:
- Many pages used a .so directive to directly populate a given header. By SysV this
has been changed to include the text in the pages directly. Unsure exactly what 4.x did
but I went with the latter
- eqnchar loses the scrL, less-than-or-equal-to, and greater-than-or-equal-to
character replacements
- ldfcn is added, this is the general description page for what will become the COFF
library, at this stage it is very 3B-20 oriented in description
- man adds the \*(Tm trademark indicator
- mosd and mptx macro pages are added
- mv's macro page is pretty much rewritten to include the actual macros, the
version in 3.x simply referred to there being macros and a manual coming soon
- types in 3.0 has variable sizes for cnt_t and label_t depending on VAX or not. 4.x
seems to remove this discrepancy and always present the VAX sizes
And finally under 6 - games:
- A note about using cron to restrict access has been removed, unknown if this is a
stylistic choice or because cron is a 1M and therefore no longer in this manual
- chess and sky both have their FILES sections removed
- jotto is added
- ttt gains a note that the cubic variant does not work on VAX
- wump is no longer PDP-11 only as of 4.1
Other stuff not fully digested yet:
- It appears what would become COFF (Common Object File Format) had its beginnings as
the 3B-20 object file format for UNIX/TS 4.x. The 3B-20 object-related stuff becomes the
more general versions in 5.x.
- The LP print service has its start in 4.x.
- SysV IPC appears to be largely there by 4.1, with only icprm missing as far as I
could tell.
- 4.x introduces the termio system.
- 4.1 may signal the start of distributing guidance material as "Guides"
rather than "Documents For UNIX". There are a number of tech report citations
that have been updated to reflect this.
4.x->5.x:
---------
As for the 4.x->5.x for these same items (I'll mention 4.x->5.x and
5.x->SysV both):
- Sys V adds a notice that the manual describes features of the 3B20S which is not
out. No such notice is in the 5.0 manuals, so this was specifically for outside
consumption
- The BTL version of the 5.0 manual features the return of the acknowledgements page
as well as a preface describing the manual and DIV 452's involvement. If there was a
BTL version of 4.x manuals, I suspect they may have also included this as it was in the
3.0 manual.
- Sys V begins the "The UNIX System" nomenclature in earnest.
- Otherwise the frontmatter seems pretty much unchanged from 4.x to 5.x, the only
discrepancies arise in the BTL and SysV variants
In 2 - system calls:
- adds a few required headers
- shmop appears to have changed headers slightly, requiring ipc.h and shm.h instead of
shmem.h
- signal states that apparently SIGCLD is now reset when caught
- sys3b adds syscalls 3, 9, and 10, for attaching to an address translation buffer,
changing the default field test set utility-id, and changing FPU flag bits respectively
- times switches to the tms struct from the tbuffer struct. Same fields but slight
change in names. Times also notes that times are given in 1/100th of a second for WECo
processors (1/60th for DEC).
In 5 - misc:
- ldfcn is moved to section 4 and drops 3B-20 specificity, signaling the start of COFF
in earnest
- term adds names for TELETYPE 40/4 and 4540 as well as IBM Model 3270 terminals
- types adds the uint (unsigned int) and key_t (long) types
And there are actually no noteworthy changes to section 6.
So general takeaways thus far on the 4->5 transition:
- COFF becomes formalized here rather than being the 3B-20 format that might get
extended to things
- "The UNIX System" nomenclature begins with System V
- 3B20S starts showing up in external literature but isn't openly available yet
- 3B-20 support is still growing and being used as a model for "generic"
components, especially COFF and SGS
- CB-UNIX init is moved over starting with 5.0
---------
There'll definitely be more to come as I do my second pass of sections 1, 3, and 4.
As things begin to wrap up I also intend to upload the manual restoration somewhere,
probably
archive.org. I still intend to scan the physical copy sometime later this year,
but this'll get info out so people can research things, and of course if any
discrepancy ever arises I'll happily pull the original manual page and scan it as
proof of anything odd.
My biggest takeaway from what I've covered thus far is this clarifies the history of
COFF a bit. Wikipedia states that COFF was a System V innovation, which commercially, it
very well was. However, this documentation demonstrates that it began life likely as a
3B-20-specific format that was then applicable to others. This now places, COFF, LP,
*and* IPC all as things credited to System V that really started with at most UNIX/TS
4.1.
The more I look at things, the more 5.0 appears to actually be a minor release compared to
what all was going on in the 4.x era. From 4.1 to 5.0 the largest changes I see thus far
are the addition of CB-UNIX init, generalization of COFF from a 3B-20 object format, and
otherwise just clerical, marketing, and accuracy improvements to the literature. This
statement will be qualified much better as I turn over more ground on this, but
that's the general gist I've been gathering as I go through this: 3.x->4.x
saw the introduction of a great number of soon-to-be-ubiquitous parts of UNIX and then
4.x->5.x and on to System V saw those components being tuned and the release being
shepherded along into a viable commercial solution.
As with anything, this is of course, all based on analysis of documents, so if there are
any inaccuracies in anything, I apologize and welcome corrections/clarifications.
Hopefully by the end of all of this there'll be enough content to draft up a proper
Wikipedia article on the "System IV" that never was and correct what truly was a
System V innovation vs what just finally popped out of USL with that version. If you made
it all the way here, thanks for reading!
- Matt G.