Archaic *nix history question
#1
Archaic *nix history question
So I'm in the middle of extending one of my bits of hobby-project software (a simulator for a homebrew CPU project) to support asynchronous I/O, in order to be able to run the simulation in "real time." This is a mild adventure for me as it's the first time I've ever had occasion to dig down into the *nix kernel I/O functions as opposed to just rolling with stdio, but overall, nothing too crazy.

However, one of my random just-for-kicks goals is to be able to host it on one of my vintage workstations, and I'm running up against that age-old problem with documentation in Our Modern Age: it's trivial to find out what's supported now, on modern *nixen, but is there any good way to find out about the history of various kernel features on the interwebs?

Like, the documentation all says that the aio library is POSIX, but was it created for the POSIX standard, or something codified out of older SysV or BSD functionality? Will I find it on, say, SunOS 4, etc.? I suppose I can just boot my SparcStation and check the man pages, but it seems typically silly of the modern Internet that I'd have to bother doing that.

Computers: Amiga 1200, DEC VAXStation 4000/60, DEC MicroPDP-11/73
Synthesizers: Roland JX-10/SH-09/MT-32/D-50, Yamaha DX7-II/V50/TX7/TG33/FB-01, Korg MS-20 Mini/ARP Odyssey/DW-8000/X5DR, Ensoniq SQ-80, E-mu Proteus/2, Nord Lead 2, Behringer Model D
commodorejohn
PDP-X

Trade Count: (0)
Posts: 367
Threads: 7
Joined: May 2018
Find Reply
02-12-2022, 12:02 AM
#2
RE: Archaic *nix history question
Hey John,

So the POSIX standard was first published in 1988, the first revision is IEEE Std 1003.1-1988

That would apply to something like 3.x or 4.x BSD, some of the SVR1/2/3 OSes etc.

If you want to see how things went along, look at the code of xv6, 2BSD, System V R1 (This code is proprietary, but available online) and other such things.

I'm the system admin of this site. Private security technician, licensed locksmith, hack of a c developer and vintage computer enthusiast. 

https://contrib.irixnet.org/raion/ -- contributions and pieces that I'm working on currently. 

https://codeberg.org/SolusRaion -- Code repos I control

Technical problems should be sent my way.
Raion
Chief IRIX Officer

Trade Count: (9)
Posts: 4,239
Threads: 533
Joined: Nov 2017
Location: Eastern Virginia
Website Find Reply
02-12-2022, 12:18 AM
#3
RE: Archaic *nix history question
I can only add to this indirectly, when I was in college we had fairly free access to the ANSI gateway online and some large businesses like Microsoft do/did as well for full time employees. Most UNIX stuff I know about when down between between 1996-1998. Around 2004, I took the opportunity grab every single standards document related to Ada and POSIX I could find with a little POSIX C cross-over. I still have those PDF now 20+ years later...ughh...it's been that long.

While I could be very wrong (and am happy to be proven so, on this topic)...I was lead to believe that the last and greatest UNIX updates occured before the year 2000 and not much or anything has happened since then due to the death or mergers of so many MAJOR players in the old UNIX world. Compared to what we used to have we have like 1/2 or less.

In terms of "finding" whether a UNIX variant has a feature...you are suppose to use feature test macros. Some C macros are literally feature names and some are ANSI POSIX standards number and date (it's not standardize, convention I guess)?

here: https://www.gnu.org/software/libc/manual...acros.html

So if you're hard-core UNIX, you're supposed to have all these preprocessor macros add features (should they be supported) but somehow have as much support as possible without them (AIO is good example of this).

In terms of the "history" of a feature (it's origins and iterations through time) I'd assume it's a secret due to the intellectual property laws? Anecdotally I'm sure some pieces here or there were said by the creators in various books or memoirs. Other than getting headers or source and reading them from various OSes yourself, I'm unsure how this info could be assembled.
weblacky
I play an SGI Doctor, on daytime TV.

Trade Count: (10)
Posts: 1,716
Threads: 88
Joined: Jan 2019
Location: Seattle, WA
Find Reply
02-12-2022, 12:22 AM
#4
RE: Archaic *nix history question
There's tons of stuff available from The Unix Heritage Society (https://www.tuhs.org/) for anyone seriously interested in researching the earliest origins of Unix.  Depending on what you're interested in, you may have to do a lot of digging through source code to find out, though.  And more recent additions won't be covered.  But there's certainly a lot of fascinating stuff there.

SGI:  Indigo, Indigo2, Octane, Origin 300
Sun:  SPARCstation 20 (x4), Ultra 2, Blade 2500, T5240
HP:  9000/380, 425e, C8000
Digital: DECstation 5000/125, PWS 600au
jpstewart
Developer

Trade Count: (1)
Posts: 444
Threads: 6
Joined: May 2018
Location: SW Ontario, CA
Find Reply
02-12-2022, 12:42 AM
#5
RE: Archaic *nix history question
POSIX 1003.1b was ratified in 1993, after the SunOS 4 era, but the functions ( aread(), awrite(), await(), acancel() ) were already present in SunOS 4.1 in 1990. I have a full set of SunOS 4.1 hardcopy manuals and the pages for these calls do exist.
The way that Unix traditionally handled interactive applications is using signals and select(). Sockets can be opened in non-blocking mode so that reading from a socket with no new data returns to the work loop instead of waiting. SunOS also has lightweight processes (threads) so that a process can have more than one function active at once. POSIX 1003.1b threads (pthreads) were supported in Solaris 2 (SunOS 5) but not SunOS 4.

Personaliris O2 Indigo2 R10000/IMPACT Indigo2 R10000/IMPACT Indigo2 Indy   (past: 4D70GT)
robespierre
refector peritus

Trade Count: (0)
Posts: 640
Threads: 3
Joined: Nov 2020
Location: Massholium
Find Reply
02-12-2022, 11:18 AM
#6
RE: Archaic *nix history question
Interesting - I'm curious what exact revision you're looking at, but the copy on Bitsavers (PDF pg. 228) lists aioread() etc., while the modern documentation has it as aio_read() etc. - and the arguments for each are substantially different (the modern POSIX version takes a pointer to a separate control-block structure, while the SunOS version takes the arguments individually.) Wonder how this evolved over time...

Computers: Amiga 1200, DEC VAXStation 4000/60, DEC MicroPDP-11/73
Synthesizers: Roland JX-10/SH-09/MT-32/D-50, Yamaha DX7-II/V50/TX7/TG33/FB-01, Korg MS-20 Mini/ARP Odyssey/DW-8000/X5DR, Ensoniq SQ-80, E-mu Proteus/2, Nord Lead 2, Behringer Model D
commodorejohn
PDP-X

Trade Count: (0)
Posts: 367
Threads: 7
Joined: May 2018
Find Reply
02-12-2022, 04:21 PM
#7
RE: Archaic *nix history question
(02-12-2022, 04:21 PM)commodorejohn Wrote:  Interesting - I'm curious what exact revision you're looking at, but the copy on Bitsavers (PDF pg. 228) lists aioread() etc., while the modern documentation has it as aio_read() etc. - and the arguments for each are substantially different (the modern POSIX version takes a pointer to a separate control-block structure, while the SunOS version takes the arguments individually.) Wonder how this evolved over time...
You have a keener eye than me! The hardcopy manual for aioread() etc says "Last updated 21 January 1990".
Solaris's manpage for aio_read() says: "Solaris 2.6 was the first release to support the Asynchronous Input and Output option. Prior to this release, this function always returned −1 and set errno to ENOSYS." I think this only refers to the POSIX version.
Another difference is that SunOS 4's aioread() etc require the libaio library and the <sys/asynch.h> header. Solaris 2.6's aio_read() etc require librt and <aio.h>.

Personaliris O2 Indigo2 R10000/IMPACT Indigo2 R10000/IMPACT Indigo2 Indy   (past: 4D70GT)
robespierre
refector peritus

Trade Count: (0)
Posts: 640
Threads: 3
Joined: Nov 2020
Location: Massholium
Find Reply
02-12-2022, 11:23 PM
#8
RE: Archaic *nix history question
https://en.wikipedia.org/wiki/Advanced_P...nvironment
I have home both the first and the third editions, and I think the first edition is what you would be looking for.

As described by wikipedia:
It covered programming for the two popular families of the Unix operating system, the Berkeley Software Distribution (in particular 4.3 BSD and 386BSD) and AT&T's UNIX System V (particularly SVR4). The book covers system calls for operations on single file descriptors, special calls like ioctl that operate on file descriptors, and operations on files and directories. It covers the stdio section of the C standard library, and other parts of the library as needed. The several chapters concern the APIs that control processes, process groups, daemons, inter-process communication, and signals. One chapter is devoted to the Unix terminal control and another to the pseudo terminal concept and to libraries like termcap and curses that build atop it. Stevens adds three chapters giving more concrete examples of Unix programming: he implements a database library, communicates with a PostScript printer, and with a modem. The book does not cover network programming: this is the subject of Stevens' 1990 book UNIX Network Programming and his subsequent three-volume TCP/IP Illustrated.
Shiunbird
Administrator

Trade Count: (1)
Posts: 553
Threads: 45
Joined: Mar 2021
Location: Czech Republic
Find Reply
02-13-2022, 05:30 PM
#9
RE: Archaic *nix history question
Thanks to everybody for weighing in, and for all the terrific reference material - it's certainly a rabbit-hole one could get lost going down ;D As I sort of suspected, the answer probably lies in the fact that this particular featureset was in the process of being developed right around the time that the hardware/software I wanted to target was contemporary. Probably what I'll end up doing is just hosting it on my MicroVAX, which is running NetBSD 6 and should have no problems just using the modern POSIX version.

Computers: Amiga 1200, DEC VAXStation 4000/60, DEC MicroPDP-11/73
Synthesizers: Roland JX-10/SH-09/MT-32/D-50, Yamaha DX7-II/V50/TX7/TG33/FB-01, Korg MS-20 Mini/ARP Odyssey/DW-8000/X5DR, Ensoniq SQ-80, E-mu Proteus/2, Nord Lead 2, Behringer Model D
commodorejohn
PDP-X

Trade Count: (0)
Posts: 367
Threads: 7
Joined: May 2018
Find Reply
02-14-2022, 06:47 PM


Forum Jump:


Users browsing this thread: 1 Guest(s)