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.
The subject of Communication Files on DTSS came up recently, and Doug
linked to this wonderful note:
https://www.cs.dartmouth.edu/~doug/DTSS/commfiles.pdf
Over on the Multicians list, I raised a question about the history of the
DTSS emulator on Multics in response to that, which sadly broke down into
antagonism, the details of which aren't terribly interesting. But Barry
Margolin suggested that the closest modern Unix analogue of Communication
Files were pseudo-TTYs, that had generated a dustup here. Doug's note
suggests that Plan 9's userspace filesystems, aided and abetted by mutable
namespaces and 9P as a common sharing mechanism, were a closer analogy.
But I wonder if multiplexed files were perhaps an earlier analogue; my
cursory examination of mpx(2) shows some similarities to the description of
the DTSS mechanism.
But I confess that I know very little about these, other than that they
seem to be an evolutionary dead end (they don't survive in any modern Unix
that I'm aware of, at any rate). I don't see much about them in my
archives; Paul Ruizendaal mentioned them tangentially in 2020 in relation
to non-blocking IO: they are, apparently, due to Chessen?
Does anyone have the story here?
- Dan C.
Hi all,
Today, as I was tooling around on stack overflow, I decided to ask a
question on meta. For those of you who don't know, stack overflow is
supposedly a q&a site. There are zillions of answers to quite a few "how
to do i do x" style questions. Folks upvote and downvote the answers and
the site is a goto for a lot of developers. I've used it since it came
online - back in the late 2000's. I have a love hate relationship with
the site. When there's a good answer to a question that I have, I love
it. When they downvote fringe cases that I care about to the point where
they effectively become gray literature that is near on impossible to
locate - I hate it. Meta is supposedly where you go to ask questions
about the stack.
Yesterday, I asked this question:
Do you know of any studies that have been done around downvoted
content, specifically on stack overflow or stack exchange?
By way of background - I find any questions or answers that are on
the border (+1, 0, -1) as dubiously helpful, but when the downvotes
pile up, much like upvotes, the answers become interesting to me
again as they give me insights I might miss otherwise.
After a slew of why would you think that was interesting, there's no
value with upvotes and downvotes, and your question is unclear responses
along with, as of now, 31 downvotes net, the question was closed for
lack of clarity. My answer, which was informed by some of the comments was:
There don't appear to be any papers on downvoting specific to Stack
Overflow. You can find a good list of known academic papers using
Stack Exchange data in the list hosted on Stack Exchange Meta
(link). It is an attempt to keep a current list of works up to date.
The Stack Exchange Data Explorer (link) is an open API for doing
data research, if you want to dig into the data yourself.
Which was quickly downvoted 9 times net.
To see the entire debacle:
https://meta.stackoverflow.com/questions/423080/are-there-any-serious-studi…
Anyhow, other than what I perceive to be a decidely hostile environment
for asking questions, it is still actually a useful resource.
Wow, have times changed though on the hostility front.
So, it got me thinking...
What was it like in the very beginning of things (well, ok, maybe not
the very beginning, but around and after the advent of v6 and when it
was at or around 50 sites) for folks needing answers to questions
related to unix?
The questions... and for the love of Pete, don't downvote me anymore
today, I'm a fragile snowflake, and I might just cry...
What was the mechanism - phone, email, dropbox of questions, snail mail,
saint bernardnet, what?
What was the mood - did folks quickly tire of answering questions and
get snippy, or was it all roses?
When did those individual inquiries get too much and what change was
made to aggregate things?
I'm thinking there may have been overlap between unix users and
usenet... Also, I remember using fidonet for some of my early question
about linux, but that was 1991, many years after the rise of unix.
Thanks,
Will
There was recent discussion here about the Typesetter C compiler; I don't
have the energy to look through the tons of opinion posts about recent
programming styles, to find the posts about actual Unix history which related
to that compiler, but I seem to recall that there was interest in locating
the source for it? I had strted to look, but then got distracted by some
other high-pri stuff; here are a few notes that I had accumulated to reply -
I hope they aren't too out-of-date by now.
I have a copy of it, from the dump of the CSR machine (I can't make the whole
dump public, sorry; it has personal material from a bunch of people mixed in).
I was pretty sure the C compiler from Mini-Unix, here:
https://minnie.tuhs.org/cgi-bin/utree.pl?file=Mini-Unix/usr/source/c
was from the right timeframe to be the Typesetter C, but a quick check of
c0.h, shows that it's not; that one seems to be more like the V6 one. (Ditto
for LSX.)
The PWB1 one:
https://minnie.tuhs.org/cgi-bin/utree.pl?file=PWB1/sys/c/c
seems, from a very quick look at c0.h (using that nice side-by-side compare
feature on the TUHS archive - thanks, Warren!), to be somewhat close to the
Typesetter C. It would be interesting to compare that one to the CSR one
(which definitely is) to be sure.
Also, the V7 C compiler (not pcc, but the PDP-11 one) seems to be a fairly
close relative, too.
Noel
Herewith some interesting (somewhat) contemporary papers on early windowing systems:
1. There was a conference in the UK early in 1985 discussing the state of window systems on Unix. Much interesting discussion and two talks by James Gosling, one about NeWS (then still called SunDew), and one about what seems to be SunWindows. It would seem then that these were developed almost in parallel.
http://www.chilton-computing.org.uk/inf/literature/books/wm/contents.htm
2. Then there is a 1986 paper by James Gettys, discussing the 18 month journey towards X10. In particular it focuses on the constraints that Unix set on the design of the X system.
https://www.tech-insider.org/unix/research/acrobat/860201-b.pdf
3. Next is the 1989 NeWS book that has a nice overview and history of windowing systems in its chapter 3:
http://bitsavers.trailing-edge.com/pdf/sun/NeWS/The_NeWS_Book_1989.pdf
Both the UK conference and the NeWS book mention a Unix kernel-based windowing system done at MIT in 1981 or 1982, “NU" or “NUnix”, by Jack Test. That one had not been mentioned before here and may have been the first graphical windowing work on Unix, preceding the Blit. Who remembers this one?
4. Finally, an undated paper by Stephen Uhler discussing the design of MGR is here:
https://sau.homeip.net/papers/arch.pdf
I’ve not included Rob Pike’s papers, as I assume they are well known on this list.
Some of the above papers may be worthy of stable archiving.
Hi all,
Firstly, thanks to Warren for adding me to the list!
The 6th Edition manual refers to 'cron', not 'crond' (even though
cron was indeed referred to as a 'daemon'). By 4.2BSD, however, we
have things like 'telnetd' and 'tftpd'.
Does anyone have any pointers as to when and where the '-d'
convention started to be used?
Thanks in anticipation,
Alexis.
All,
I just saw this over on dragonflydigest.com:
https://0j2zj3i75g.unbox.ifarchive.org/0j2zj3i75g/Article.html
It's an article from 2007 about the history and genesis of the Colossal
Cave Adventure game - replete with lots of pics. What I found
fascinating was that the game is based on the author's actual cave
explorations vis a vis the real Colossal Cave. Gives you a whole new
appreciation for the game.
My question is do y'all know of any interesting backstories about games
that were developed and or gained traction on unix? I like some of the
early stuff (wumpus, in particular), but know nothing of origins. Or,
was it all just mindless entertainment designed to wile away the time?
Spacewar, I know a bit about, but not the story, if there is one...
Maybe, somebody needed to develop a new program to simulate the use of
fuel in rockets against gravity and... so... lunar lander was born? I
dunno, as somebody who grew up playing text games, I'd like to think
there was more behind the fun that mindless entertainment... So, how
about it, was your officemate at bell labs tooling away nights writing a
game that had the whole office addicted to playing it, while little did
they know the characters were characterizations of his annoying neighbors?
If you don't mind, if you take the thread off into the distance and away
from unix game origins, please rename the thread quickly :).
Thanks,
Will
> In the annals of UNIX gaming, have there ever been notable games that have operated as multiple processes, perhaps using formal IPC or even just pipes or shared files for communication between separate processes
I don't know any Unix examples, but DTSS (Dartmouth Time Sharing
System) "communication files" were used for the purpose. For a fuller
story see https://www.cs.dartmouth.edu/~doug/DTSS/commfiles.pdf
> This is probably a bit more Plan 9-ish than UNIX-ish
So it was with communication files, which allowed IO system calls to
be handled in userland. Unfortunately, communication files were
complicated and turned out to be an evolutionary dead end. They had
had no ancestral connection to successors like pipes and Plan 9.
Equally unfortunately, 9P, the very foundation of Plan 9, seems to
have met the same fate.
Doug
> segaloco wrote:
> In the annals of UNIX gaming, have there ever been notable games that
> have operated as multiple processes, perhaps using formal IPC or even
> just pipes or shared files for communication between separate processes
> (games with networking notwithstanding)?
The machine of the DSSR/RTS group at MIT-LCS, Steve Ward's group (an -11/70
running roughly PWB1) had an implementation of a form of Perquackey:
https://en.wikipedia.org/wiki/Perquackey
that was a multi-player game; I'm pretty sure there was a process per player,
and they communicated, I'm pretty sure, through pipes, not files - there was
certainly no IPC in that system.
IIIRC, the way it worked was that there was a parent process, and it spawned
a child process for each terminal that was playing, and the children could
all communicate through pipes. (They had to communicate because in that
version, all the players shared a single set of dice, and once one person had
played a word, the other players couldn't play that word. So speed was
important in playing; people got really addicted to it.)
Alas, although their machine was very similar to CSR's (although ours was an
-11/45 with an Able ENABLE and a lot of memory, making it a lot more like a
/70), and we shared most code between the machines, and I have a full dump of
the CSR machine, we apparently didn't have any of the games on the CSR
machine, so I can't look at the source to confirm exactly how it worked.
Noel