Got a little present for folks today. Been working on this for a little while now, and while there'll probably be some edits here and there, I believe it to be quite accurate.
After the link is a manpage restoration of the UNIX 4.1 User's Manual (3B20S) that I bought a little while ago: https://gitlab.com/segaloco/pwb4u_man
The permuted index is the only significant piece that isn't done, but that shouldn't impact the informational value. Note this is just u_man, I haven't found a complimentary a_man copy yet. I hope one will turn up one of these days, but I plan on at least analyzing the gap between System III and System V with regards to those pages as a future project.
My process involved diff'ing the available III and V manpage sources and reconciling differences between the two and 4.1 with some copy-paste here and some restoration there. Where differences couldn't be resolved, I simply removed content to match the physical pages. One minute detail that is also not filled in is the page count in M.folio. So I didn't count the pages. Maybe someday. In any case, I appreciate the opportunity this has given me to learn the manpage macros pretty well.
Anywho, in the second pass of verifying the changes I took some notes on noteworthy mentions. This list is not an exhaustive analysis but represents some of the areas where significant developments shine through in the text:
System III->4.1 (No claims are made as to what occurred at 4.0):
- The documentation is cleaned up quite a bit in general, in what seems like a push towards commercial-ready manuals. Many sections are edited to be more clear and descriptive. There is also a notable shift towards gender neutral language. The editors and acknowledgements info are removed, casting an anonymous shadow over the manual maintainers and their muses alike.
- The tty manpage is renamed termio, reflecting the shifting terminal interface landscape at this time.
- This release adds IPC with a familiar interface to what is in System V. According to various accounts the IPC was under heavy development at this time, but while the underlying components may have been shifting and changing, the documentation changes suggest a relatively stable programmer API by this point. The only IPC-related piece System V adds is icprm(1).
- The LP print service is added here. The old lpr system is still there in the background; it is in System V. However, it is relegated to DEC only status.
- SGS and COFF development components show up with 4.1 3B-20. No telling what else they officially supported in the 4.x timeframe. The System V pages as described below indicate a number of supported platforms.
- The shell gets the $CDPATH and ulimit features
- Many system features show a trend towards portability (except the PDP-11, the system appears to be moving away from it)
- The Virtual Protocol Machine (VPM) seems to go from targeting KMC11 to UN53 and V.35. Haven't researched what these are yet, but VPM is on the move.
- As of 4.1, 3B-20 does *not* support: Fortran, BASIC, Honeywell/GCOS 6000 connectivity, lpr printing, SNOBOL, standalone C
- Added pages include cflow(1), cprs(1), cxref(1), dis(1), dump(1) (was a tape dump (1m), now a SGS tool), enable(1), hpio(1), ipcs(1), list(1), lp(1), lpstat(1), newform(1), sadp(1), trouble(1), x25pvc(1), msgctl(2), msgget(2), msgop(2), plock(2), semctl(2), semget(2), semop(2), shmctl(2), shmget(2), shmop(2), sys3b(2), drand48(3c), getcwd(3c), hsearch(3c), ld*(3x) (COFF library), setbuf(3s), stdipc(3c), strtol(3c), termio(4) (renamed from tty(4)), ldfcn(5), mosd(5), mptx(5), jotto(6)
- Removed pages include cref(1), dump(1m), fget.odemon(1c), odpd(1c), orjestat(1c), reform(1), tp(1), typo(1), xref(1), tp(4), tty(4) (renamed to termio(4))
- Some pages were skipped and show back up in System V with minimal changes, meaning they were probably in 4.x: adb(1), arcv(1), bs(1), dpd(1c), dpr(1c), efl(1), f77(1), factor(1), fget(1c), fget.demon(1c), fsend(1c), gcat(1c), gcosmail(1c), kas(b)/kun(b)(1), lpd(1c), lpr(1), ratfor(1), scc(1), sno(1), vpr(1)
4.1->System V (Likewise, there was at least a 4.2):
- Documentation is cleaned up and edited some more. Almost everywhere that the name "UNIX" occurs, it has been replaced with some variation on "The UNIX System" with a capital S. This is lower case in my 5.0 manual which I have not combed for differences with System V yet. Still, the "system" following is standard by 5.0 it seems. This is right around the time of dashing Bell associations too, so variations of this manual exist with and without the Bell logo on the front, and with varying degrees of modification to explain the legal landscape involved.
- Section 3 in particular sees a pretty significant rewrite effort. This coincides with MR 1055 here: https://archive.org/details/unix-system-release-description-system-v/I%20-%…
- A new portable archive format is introduced. By the sounds of it, this introduces a new header type into the ar(4) format.
- A new 1024-block filesystem is introduced, along with necessary support.
- A new synchronous terminal interface is added.
- VAX is supported by SGS/COFF now. Additional platforms as suggested by formatting marks in the pages include: Basic-16, Bellmac 32, and 8086, in addition to the already supported 3B-20. Unknown whether these platforms found any support with USG releases.
- ex(1) is added (along with vi(1) and edit(1)). There is also the se(1) editor which I don't know much about.
- CB-init is added, shaking up the /etc/inittab format and many login-related features. MAUS also steps in from CB for shared memory on PDP-11.
- Added pages include asa(1), convert(1), cpp(1), edit(1), ex(1), fsplit(1), ipcrm(1), machid(1), makekey(1), net(1c), nscstat(1c), nsctorje(1c), nusend(1c), scat(1), se(1), stlogin(1), ststat(1), vi(1), maus(2), clock(3c), dial(3c), erf(3m), getut(3c), matherr(3m), memory(3c), sputl(3x), ttyslot(3c), x25*(3c), filehdr(4), gettydefs(4), issue(4), linenum(4), reloc(4), scnhdr(4), syms(4)
- Removed pages include vpmc(1c), vpmsave(1c), vpmset(1c), x25pvc(1c), fptrap(3x)
That's all I've got. As time goes on I'll start documenting worthwhile tidbits in the Wiki. If there's any question of the contents of any of the pages, I'll happily consult the original and make corrections, and can scan any page to verify the contents if needed. I'll eventually be scanning the whole thing, just not right now. Feel free to open a pull request if you think something needs to change.
- Matt G.
On 2/25/23, Brian Walden <tuhs(a)cuzuco.com> wrote:
> It was originaly 205. See A.OUT(V) (the first page) at
> https://www.bell-labs.com/usr/dmr/www/man51.pdf it was documented as to
> why.
>
>
> The header always contains 6 words:
> 1 "br .+14" instruction (205(8))
> 2 The size of the program text
> 3 The size of the symbol table
> 4 The size of the relocation bits area
> 5 The size of a data area
> 6 A zero word (unused at present)
>
> I always found this so elegant in it's simplicity. Just load and start
> execution at the start (simplifies exec(2) in the kernel) I always wondered
> if this has done anywhere else before, or invenetd first in unix.
IBM's Basic Program Support (BPS) for System/360 was a set of
stand-alone utilities for developing and running stand-alone programs.
BPS/360 wasn't really an operating system because there wasn't any
resident kernel. You just IPLed (Initial Program Load; IBM-speak for
"boot") your application directly. So the executable format for BPS
had a bootstrap loader as the "program header". Not quite the same
thing as a.out's 205(8) magic number, but similar in concept.
I don't know of any other OS ABI that uses this trick to transfer
control to application programs.
Microsoft uses something similar in PECOFF. A PECOFF executable for
x86 or X86-64 starts with a bit of code in MS-DOS MZ executable format
that prints the message "This program cannot be run in DOS mode".
-Paul W.
It was originaly 205. See A.OUT(V) (the first page) at https://www.bell-labs.com/usr/dmr/www/man51.pdf it was documented as to why.
The header always contains 6 words:
1 "br .+14" instruction (205(8))
2 The size of the program text
3 The size of the symbol table
4 The size of the relocation bits area
5 The size of a data area
6 A zero word (unused at present)
I always found this so elegant in it's simplicity. Just load and start
execution at the start (simplifies exec(2) in the kernel) I always wondered
if this has done anywhere else before, or invenetd first in unix.
Theres was also a recent discussion of ar(1). That pdf also explains its magic
number a few pages later. It was simply choosen because it seemed unique.
A file produced by ar has a "magic number" at the start,
followed by the constituent files, each preceded by a file
header. The magic number is -147(10), or 177555(8) (it was
chosen to be unlikely to occur anywhere else).
-Brian
On Sat, 25 Feb 2023, Dave Horsfall wrote:
> On Thu, 23 Feb 2023, Paul Winalski wrote:
>
> > a.out was, as object file formats go, a throwback to the stone age from
> > the get-go. Even the most primitive of IBM's link editors for
> > System/360 supported arbitrary naming of object file sections and the
> > ability for the programmer to arrange them in whatever order they
> > wished. a.out's restriction to three sections (.text, .data, .bss) did
> > manage to get the job done, and even (with ZMAGIC) could support
> > demand-paged virtual memory, but only just.
>
> That may be so, but those guys didn't exactly have the resources of
> IBM behind them...
>
> And I wonder how many people here know the significance of the "407" magic
> number?
>
> -- Dave
Good day all, figured I'd start a thread on this matter as I'm starting to piece enough together to articulate the questions arising in my research.
So based on my analysis of the 3B20S UNIX 4.1 manual I've been working through, all evidence points to the formalized SGS package and COFF originating tightly coupled to the 3B-20 line, then growing legs to support VAX, but never quite absorbing PDP-11 in entirety. That said, there are bits and pieces of the manual pages for the object format libraries that suggest there was some providence for PDP-11 in the development of COFF as well.
Where this has landed though is a growing curiosity regarding:
- Whether SGS and COFF were tightly coupled to one another from the outset, with SGS being supported by the general library routines being developed for the COFF format
- Whether COFF was envisioned as a one-size-fits-all object format from its inception or started as an experiment in 3B-20 development that wound up being general enough for other platforms
- If, prior to this format, there were any other efforts to produce a unifying binary format and set of development tools, or if COFF was a happy accident from what were a myriad of different architectural toolset streams
One of the curious things is how VAX for a brief moment did have its own set of tools and a.out particulars before SGS/COFF. For instance, many of the VAX-targeted utilities in 3.0/System III bear little in common option/manual-wise with the general common SGS utilities in System V. The "not on PDP-11" pages for various SGS components in System V much more closely resemble the 3B-20 utilities in 4.1 than any of the non PDP-11/VAX-only bits in System III.
Some examples:
- The VAX assembler in System III contains a -dN option indicating the number of bytes to set aside for forward/external references for the linker to fill in.
- The VAX assembler in System V contains among others the -n and -m options from 4.1 which indicate to disable address optimization and use m4 respectively
- The System V assembler goes on to also include -R (remove input file after completion) -r (VAX only, add .data contents to .text instead) and options -b, -w, and -l to replace the -d1, -d2, and -d4 options indicated in the previous VAX assembler
- System V further adds a -V to all the SGS software indicating the version of the software. This is new circa 5.0, absent from the 4.1 manual like the R, r, b, w, and l options
- The 4.1 manual's singular ar(1) entry still agrees with the System III version. No arcv(1) is listed, implying the old ar format never made it to 3B-20
- The System V manual has both this ar(1) version as well as the new COFF-supporting version. Not sure if this implies the VAX ar format was expanded to support the COFF stuff for a little while until they decided on a new one or what.
- The System III ld (which is implied to support PDP and VAX) survives in System V, but is cut down to supporting PDP-11 only
- The COFF-ish ld shows up in 4.1, is then extended to VAX presumably in the same breath as the other COFF-supporting bits by Sys V, leading to two copies like many others, PDP-11-specific stuff and then COFF-specific stuff
The picture that starts to form in the context of all of this is, for a little while in the late 70s/early 80s, the software development environments for PDP-11, VAX-11, and 3B-20 were interplaying with each other in often times inconsistent ways. Taking a peek at the 32V manuals, the VAX tools in System III appear to originate with that project, which makes sense. If I'm understanding the timeline, COFF starts to emerge from the 3B-20 project and USG probably decides that's the way to go, a unified format, but with PDP-11 pretty much out the door support wise already, there was little reason to apply that to PDP-11 as well, so the PDP-11 tools get their swan song in System V, original VAX-11 tools from 32V are likely killed off in 4.x, and the stuff that started with the 3B-20 group goes on to dominate the object file format and development software stuff until ELF comes along some time later.
I guess other questions this raises are:
- Were the original VAX tools built with any attention to compatibility with the PDP-11 bits Ken and Dennis wrote many years prior (based on some option discrepancies, possibly not?)
- Do the VAX utilities derive from the Interdata 8/32 work or if there was actually another stream of tools as part of that project?
- Was there any interplay between the existing tool streams (original PDP-11, 32V's VAX utilities, possibly Interdata 8/32) and the eventual COFF/SGS stuff, or was the latter pretty well siloed in 3B-20 land until deployment with 4.1?
- Matt G.
I found this 1984 video about MIT's Project Athena. A few VAXstation
100 are visible running some demos in a windowing system. Nothing
exciting unfortunately, just a few seconds and no details visible.
Since X was started in 1984, it could be a very early version we see
here. I asked Jim Gettys, and he suggested it could also be W since it
was apparently used before X in Project Athena.
https://youtu.be/tG7i7HCD9g0?t=28
I checked the xdemo director in X10R3 (earliest available so far) for a
match against the circle demo, but all samples are written in CLU...
> Date: Thu, 23 Feb 2023 18:38:25 +0000
> Subject: [TUHS] Re: Origins of the SGS (System Generation Software)
> and COFF (Common Object File Format)
>
> For the sake of timelines:
>
> June 1980 - Publication date on the front page of the 3.0 manual in which the utilities are still very much research for PDP-11 and 32V-ish for VAX where distinctions matter.
>
> June 1981 - Publication date on the front page of the 4.1 manual in which the man-pages very much refer to all of this as the "3B-20 object format"
>
> June 1982 - Publication date on the front page of the 5.0 manual by which point these same pages had been edited and extended to describe the "common object file format"
>
> Additions at the 1981 release include dump(1), list(1), and the ld-prefixed library routines for managing these object files. These likewise persist in 5.0, SysV, and beyond as COFF-related tools.
>
> So this puts the backstop of what would become COFF at at least '81.
>
> - Matt G.
The surviving source code for SysV R2 supports this timeline:
- The header files (start from https://github.com/ryanwoodsmall/oldsysv/blob/master/sysvr2-vax/src/head/a.…) have dates of late ’82, early ’83.
- The source for exec() has a comment that refers to the 4xx magic formats as “pre 5.0 stuff”.
- The COFF format headers are #ifdef’ed for the 3B series.
Interestingly, the lowest magic numbers in the 5xx series are not for the 3B, but for the “Basic-16” and for the “x86”. That led me to this paper:
https://www.bell-labs.com/usr/dmr/www/otherports/newp.pdf
It seems that the roots of COFF go back to the initial portability effort for V7 and in particular the 8086 port (which was done in 1978 according to the paper).
> From: Clem Cole
> MIT had a modified a.out format for the NU machine ports - that might
> have been called b.out.
Yes. Here's the man page output:
http://ana-3.lcs.mit.edu/~jnc/tech/unix/help/b.out.lpt
(I don't have the source for that, alas.) It's basically just a.out with
32-bit fields instead of 16-bit. I have a .h file for the format too, if
anyone has any interest in it. It's all part of the MIT 68K workbench that
used PCC (the source for all of which I do have).
Noel
COFF transfer, TUHS Bcc'd to know where this thread went.
Between the two if you're not doing UNIX-specific things but just trying to resurrect/restore these, COFF will probably be the better place for further discussion. @OP if you're not a member of COFF already, you should be able to reach out to Warren Toomey regarding subscription.
If you're feeling particularly adventurous, NetBSD still supports VAX in some manner: http://wiki.netbsd.org/ports/vax/
YMMV, but I've had some success with NetBSD on some pretty oddball stuff. As the old saying goes, "Of course it runs NetBSD". You might be able to find some old VMS stuff for them as well, but I wouldn't know where to point you other than bitsavers. There's some other archival site out there with a bunch of old DEC stuff but I can never seem to find it when I search for it, only by accident. Best of luck!
- Matt G.
------- Original Message -------
On Wednesday, February 22nd, 2023 at 10:08 AM, jnc(a)mercury.lcs.mit.edu <jnc(a)mercury.lcs.mit.edu> wrote:
> > From: Maciej Jan Broniarz
>
>
> > Our local Hackroom acquired some VAX Station machines.
>
>
> Exactly what sort of VAXstations? There are several different kinds; one:
>
> http://gunkies.org/wiki/VAXstation_100
>
> doesn't even include a VAX; it's just a branding deal from DEC Marketing.
> Start with finding out exactly which kind(s) of VAXstation you have.
>
> Noel
Has anyone tried talking to anyone at Oracle about possibly getting
the SunOS code released under an open source license? There can't be
any commercial value left in it.
- Dan C.
> From: Maciej Jan Broniarz
> Our local Hackroom acquired some VAX Station machines.
Exactly what sort of VAXstations? There are several different kinds; one:
http://gunkies.org/wiki/VAXstation_100
doesn't even include a VAX; it's just a branding deal from DEC Marketing.
Start with finding out exactly which kind(s) of VAXstation you have.
Noel
Hello Everyone,
Our local Hackroom acquired some VAX Station machines. The problem is, we
have absolutely no docs or knowledge how to run the machine or how to test
if it is working properly. Any help would be appreciated
All best,
--
Maciej Jan Broniarz
Was an upgrade for ethernet TCP/IP for Unix V7 ever
done when running under SIMH?
Was an upgrade ever done for Unix V7 when running
under SIMH to read and set the date/time? I have a
work around but it doesn't work because when running
the sim it inserts boot code then when the 'run 2002'
is issued further startup commands in the 'conf' file are
ignored.
System was built from unix_v7.tm dated 20 June 2006.
run.conf contents:
echo
echo Unix V7 startup 2-19-2023 KenUnix
echo
set cpu 11/45
set cpu 256k
set rp0 rp04
attach rp0 system.hp
d cpu 2000 042102
d cpu 2002 012706
d cpu 2004 002000
d cpu 2006 012700
d cpu 2010 000000
d cpu 2012 012701
d cpu 2014 176700
d cpu 2016 012761
d cpu 2020 000040
d cpu 2022 000010
d cpu 2024 010061
d cpu 2026 000010
d cpu 2030 012711
d cpu 2032 000021
d cpu 2034 012761
d cpu 2036 010000
d cpu 2040 000032
d cpu 2042 012761
d cpu 2044 177000
d cpu 2046 000002
d cpu 2050 005061
d cpu 2052 000004
d cpu 2054 005061
d cpu 2056 000006
d cpu 2060 005061
d cpu 2062 000034
d cpu 2064 012711
d cpu 2066 000071
d cpu 2070 105711
d cpu 2072 100376
d cpu 2074 005002
d cpu 2076 005003
d cpu 2100 012704
d cpu 2102 002020
d cpu 2104 005005
d cpu 2106 105011
d cpu 2110 005007
echo
echo To boot type boot enter then hp(0,0)unix enter after 'mem =' press
ctrl-d
echo To cancel press ctrl-e then at sim> type exit enter
echo At login: type root enter at password type root enter
echo To shutdown sync;sync wait 5 then press ctrl-e then at sim> type exit
enter
echo
echo Copy / paste date at #
echo DATE 2302191116
run 2002
Thanks,
Ken/--
WWL 📚
Hello there,
I recently watched an old Unix promotion video by AT&T on YouTube (AT&T
Archives: The UNIX Operating System: https://youtu.be/tc4ROCJYbm0) and
they mention a design tool for integrated circuits (apparently named
L-Gen or lgen; timestamped link: https://youtu.be/tc4ROCJYbm0?t=1284)
Part of this software is a language implemented with YACC that appears
to describe the behavior of digital logic, like modern hardware
description languages, i.e. Verilog and VHDL.
Does anyone have information about this, in particular:
- Documentation
- Which projects were realized with this?
- Source code, if possible
I asked this question on retrocomputing.stackexchange.com (see
https://retrocomputing.stackexchange.com/q/26301/26615) but so far there
is no satisfying answer. A "Circuit Design Language" (CDL) is mentioned
and there is some good information about it but it has another syntax
(as shown in the video vs. the documentation about CDL) and apparently
another purpose (description of board wiring vs. logic behavior).
Best regards,
Christian
Here is a simplified 'more' command for Unix V7:
/*********************************************************************
* UNIX pager (v7 compatible) Chipmaster and KenUnix
*
* cc -o more more.c
*
* Usage examples:
* man wall | more
* more xyz
* more abc def xyz
*
* Started February 15th, 2023 YeOlPiShack.net
*
* This is the ultimately dumbest version of more I have experienced.
* Its main purpose is to illustrate the use of /dev/tty to interact
* with the user while in a filter role (stdin -> stdout). This also
* leaves stderr clear for actual errors.
*
*
* NOTES on Antiquity:
*
* - The early C syntax didn't allow for combining type information
* in the parenthesized argument list only the names were listed.
* Then a "variable" list followed the () and preceded the { that
* declared the types for the argument list.
*
* - There is no "void", specifically there is no distinction
* between a function that returns an int or nothing at all.
*
* - Many of the modern day header files aren't there.
*
* - Apparently "/dev/tty" couldn't be opened for both reading and
* writing on the same FD... at least not in our VM.
*
* - Apparently \a wasn't defined yet either. So I use the raw code
* \007.
*
* - Modern compilers gripe if you do an assignment and comparison in
* the same statement without enclosing the assignment in (). The
* original compilers did not. So if it looks like there are too
* many ()s it's to appease the modern compiler gods.
*
* - I'm not sure where they hid errno if there was one. I'd think
* there had to be. Maybe Kernighan or Pike knows...
*
*********************************************************************/
#include <stdio.h>
/*** Let's make some assumptions about our terminal columns and lines. ***/
#define T_COLS 80
#define T_LINES 24
/*** Let's set up our global working environment ***/
FILE *cin; /* TTY (in) */
FILE *cout; /* | (out) */
int ct = 0;
/*** message to stderr and exit with failure code ***/
err(msg)
char *msg;
{
fputs(msg, stderr);
exit(1);
}
/*** A poor man's CLear Screen ***
*
* Yup! This is how they used to do it, so says THE Kenrighan & Pike!
* termcap?!?! What's that?
*/
cls()
{
int x;
for(x=0; x<T_LINES; ++x) fputc('\n', cout);
ct = 0; /* reset global line count */
}
/*** The PAUSE prompt & wait ***/
pause()
{
char in[T_COLS+1]; /* TTY input buffer */
fflush(stdout); /*JIC*/
fputs("--- [ENTER] to continue --- Ctrl-d exits ", cout);
fflush(cout);
if(!fgets(in, 81, cin)) {
/* ^D / EOF */
fputc('\n', cout); /* cleaner terminal */
exit(0);
}
}
/*** Read and page a "file" ***/
int pg(f)
FILE *f;
{
char buf[T_COLS+1]; /* input line: usual term width + \0 */
/*** read and page stdin ***/
while(fgets(buf, sizeof(buf), f)) {
/* page break at T_LINES */
if(++ct==T_LINES) {
pause();
ct = 1;
}
fputs(buf, stdout);
}
return 0;
}
/*** Let's do some paging!! ***/
int main(argc, argv)
int argc;
char *argv[];
{
FILE *in;
int x, er;
/*** Grab a direct line to the TTY ***/
if(!(cin=fopen("/dev/tty", "r")) || !(cout=fopen("/dev/tty", "w")))
err("\007Couldn't get controlling TTY\n");
/*** with CLI args ***/
if(argc>1) {
er = 0;
for(x=1; x<argc; ++x) {
if(argc>2) {
if(!er) cls();
er = 0;
/* remember all user interaction is on /dev/tty (cin/cout) */
fprintf(cout, ">>> %s <<<\n", argv[x]);
pause();
}
/* - is tradition for stdin */
if(strcmp("-", argv[x])==0) {
pg(stdin);
/* it must be a file! */
} else if((in=fopen(argv[x], "r"))) {
pg(in);
fclose(in);
} else {
/* errors go on stderr... JIC someone want to log */
fprintf(stderr, "Could not open '%s'!\n", argv[x]);
fflush(stderr);
er = 1; /* this prevents cls() above. */
}
}
/*** no args - read and page stdin ***/
} else {
pg(stdin);
}
return 0;
}
End...
--
WWL 📚
In 'more.c' there is a typo
Line 154
replace
fprnntf(stderr, "Could not open '%s'!\n", argv[x]);
with
fprintf(stderr, "Could not open '%s'!\n", argv[x]);
--
WWL 📚
All,
If you think unix ends without x, just move along, nothing to see here.
Otherwise, I thought I would share the subject of my latest post and a
link with those of you interested in such things.
Recently, I've been tooling around trying to wrap my head around x
windows and wanted to give programming it a shot at the xlib level... on
my mac, if possible. So, I bought a copy of Adrian Nye's Xlib
Programming Manual for Version 11 R4/R5, aka Volume One of The
Definitive Guides to the X Window System, published, get this... 30+
years ago, in 1992 :) and started reading like a madman. As usual, this
was an example of great technical writing from the prior millenium,
something rarely found today.
Anyway, I hunted up the source code examples as published, unpacked
them, did a few environmental things to my mac, and built my first xlib
application from that source. A few tweaks to my XQuartz configuration
and I was running the application in twm on my mac, with a root window.
To read about it and see it in all of its glory, check it out here:
https://decuser.github.io/operating-systems/mojave/x-windows/2023/01/24/x-w…
The same sort of setup works with Linux, FreeBSD, or my latest
environment DragonFly BSD. It's not the environment that I find
interesting, but rather the X Window System itself, but this is my way
of entering into that world. If you are interested in running X Windows,
not as an integrated system on your mac (where x apps run in aqua
windows), but with a 'regular' window manager, and you haven't figured
out how, this is one way.
On the provocateur front - is X part of unix? I mean this in oh so many
nuanced ways, so read into it as you will. I would contend, torpedoes be
damned, that it is :).
Will
I found mention of Cadmus CadMac Toolbox/PCSMac when reading more
about the RT PC. It is interesting that this would later be sold to
Apple. Something not often mentioned in histories of PCS,
Cadmus Computer Systems or Apple.
"Cadmus Computer Systems had created the CadMac Toolbox, a Macintosh
Toolbox implemented in C on a UNIX base), and under a special agreement
with Cadmus, we received a license to port the CadMac code from their
hardware base to the RT"
Norman Meyrowitz - Intermedia: The Architecture and Construction of an
Object-Oriented Hypermedia System and Applications Framework
https://dl.acm.org/doi/10.1145/28697.28716
A video presentation of Intermedia and CadMac running on
IBM ACIS' port of 4.2BSD for the RT PC, with kernel changes
https://vimeo.com/20578352
they later moved to A/UX on the Macintosh II
InfoWorld 13 Jun 1988
https://books.google.com/books?id=-T4EAAAAMBAJ&pg=PT11
'Meyrowitz: It was before Apple Unix. There was a workstation company
called Cadmus that was producing workstations largely for CAD and
Tom Stambaugh took the Macintosh APIs and reprogrammed them to run
on Unix workstations. We went up to Cadmus and convinced them to
license that to us for the university. We were using Mac APIs on
Unix systems because we wanted systems that supported the network
file system, that had virtual memory, that had bigger disks. So we
did that and it was a beautiful system. Eventually, convinced Apple
to create a A/UX [Apple Unix] which was a Unix system and we ran
on that. Cadmus went out of business, and we had the only license
to CadMac, and Apple wasn't that happy to have it around. We had
actually convinced them that they should release it to universities,
because having that API around, especially if they could sell it
to other companies to put it on their workstations, could actually
be lucrative. We almost convinced them to do that. We were actually
having a celebratory dinner at McArthur Park in Palo Alto to celebrate
this and then Jean-Louis Gassée walked in and said, "The deal is
off."'
Oral History of Norman Meyrowitz
http://archive.computerhistory.org/resources/access/text/2015/05/102658326-…
"we chose the Apple Macintosh front-end, or rather our local version
thereof (CadMac, now PCSMac) which was available on the
Cadmus 9000 computers."
https://quod.lib.umich.edu/cgi/p/pod/dod-idx/development-of-an-intelligent-…
"Apple Workstation Efforts Get Boost from Cadmus
Although Apple Computer Inc, won't say so, industry analysts believe the
company's acquisition of software technology from Unix workstation maker
Cadmus Computer Systems may speed up the introduction of high-end Unix
workstations from Apple.
...
At Apple's analysts' meeting April 23, chairman John Sculley said Apple
had acquired the rights to the technology from Cadmus of Lowell,
Massachusetts, to use in long-term advanced product development
efforts for the Macintosh. He said the Cadmus software would help the
company develop a workstation for the engineering community and federal
government markets, which use Unix-based systems, according to Apple's
transcripts.
Although Sculley has not detailed what Apple will do with the Cadmus
technology, Cadmus introduced last summer a graphics workstation
equipped with Cadmac, a graphics environment that is compatible with
Apple's Macintosh graphics routines."
InfoWorld 19 May 1986
https://books.google.com/books?id=SS8EAAAAMBAJ&pg=PA3
Sandy wrote the original CDL tool set. It had a graphical front end that provided for chips , pins,
wires etc and generated a connectivity list which was then consumed by wire wrap and other back end
tools. We had Tek 4014 terminals at the time (late 70s is what I recall) which made all this
reasonable.
I took it over the code base at some point and among other things added macros so that repeated wire
to chip connection patterns and names could be generated without the labor intensive one wire at a
time e.g. wire[0-7] connects to pin[0-7]. The macro would be expanded so that wire0 connected to
pin0 etc. This later system was call UCDS - Unix Circuit Design System.
UCDS was used by Joe Condon for the chess machine that he and Ken built. Ken may remember more
about this. It was also one of the reasons that BTL got a $1B Navy contract.
Steve
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