[TUHS] The Curious Case of "x"-suffixed Kernel Headers in 50 Changes

Jonathan Gray via TUHS tuhs at tuhs.org
Sun Jul 19 20:00:07 AEST 2026


On Sat, Jul 18, 2026 at 08:54:30AM +0000, segaloco via TUHS wrote:
> I stumbled across something tonight that has me a bit curious.  So both
> Program Generic 3 and CB-UNIX 2.3 include a series of "x"-suffixed
> headers in the kernel which contain the declarations for a number of
> kernel data structures.  For instance, filex.h in PG3 is:
> 
> > /*
> >  * Allocation for the file table.
> >  */
> >  struct	file file[NFILE];
> 
> Well, the "50 Changes" tape issued between V6 and V7 also includes
> similar header changes, for instance:
> 
> > ------ filex.h
> > 0a1,4
> > > /*
> > >  * Allocation for the file table.
> > >  */
> > > struct        file file[NFILE];
> 
> Several other bits from "50 Changes" appear in both PG3 and PWB1,
> suggesting both were based on at least some portion of this updated V6,
> for instance both include pause(2), alarm(2), and access(2).  However,
> neither PWB1 nor V7 include these "x"-suffixed headers.  Additionally,
> they are not in System III and beyond, suggesting they did not work
> their way into UNIX/TS either.  This leaves the Program Generic and
> CB-UNIX lineages as the only ones that demonstrate this (although I have
> not gone looking to see if these are in No. 2 SCCS UNIX yet, I don't
> have kernel sources unfortunately but I may have a file schedule
> somewhere.)
> 
> Anywho, this suggests some interesting context for the "50 Changes"
> tape.  My speculative brain wants to say this may indicate that the
> changes swept up some USG-ish UNIX stuff, but this is just speculation.
> Does anyone know the absolute providence of the 50 Changes tape?  Is it
> possible that the kernel version therein is a little more USG-ish than
> research?  That said, when you get down to sysent, the message passing
> and error reporting features of USG UNIX are simply stubbed out as
> "reserved for USG", where these are implemented in PG3.

Ken gave a diff to Greg Chesson on the way to Berkeley.
This was later distributed by Mike O'Brien.
Salus QCU, pp 132,138-139
Unix News, November 1976, p 1
https://archive.org/details/unix_news_november-1976

Ken was at Berkeley from September 1975 to June 1976.
(determined from Ken's correspondence with Tony Marsland
University of Alberta Archives, Tony Marsland fonds
UAA-2004-058-061-003
UAA-2004-058-061-007)

diff is 'unix_changes', notes by Mike and Ken in 'changenotes'
relevant notes for *x.h headers:

from Mike:
1) Space allocation for buf, file, inode, proc, text, and u split out
   into separate files (see notes).

from Ken:
1) Separate definition and declarations of tables: a more portable
   C will require that there be only one space definition in
   a group of programs. This has to do with loader restrictions
   that are on some notable big blue machines.

> 
> By the way, the reason I'm looking into this 50 Changes tape is I want
> to make a cleaner diff between V6 *at the time USG would've sampled it*
> and PG3.  Many of the 50 Changes are also in PG3, so presumably there
> is a common ancestor, but the whole filex.h et. al. matter has
> certainly muddied the situation.  If I didn't know any better, I'd
> want to believe the 50 Changes is the patch from V6 to USG PG1, but
> that might be too far of a reach.

*x.h headers aren't in PG2 going by
https://www.tuhs.org/Archive/Documentation/TechReports/USG_Library/1046_UNIX_Support_Classifications_for_PG_1C300_Issue_2.pdf


More information about the TUHS mailing list