As mentioned in the first post on SysIII porting, I was surprised to see how much code was
needed to initialise modern hardware and to load an OS. Of course, modern devices are much
more capable than the ones of 40 years ago, so maybe my surprise is misplaced. It did
raise an interest in the history of Unix system configuration though.
It would seem that 5th Edition already contained a configuration program that generated a
few system tables and the ‘low.s’ file with interrupt vectors and alike. Although it
steadily grew in sophistication, the approach appears still the same in SysIII. I suppose
this is all in line with common practice of the era, with OS’s typically having a ’system
generation kit' to combine the pre-linked OS kernel with device drivers and system
tables.
SysIII also introduces the "var struct" and the “v” kernel variable that
summarises some of the system configuration. I’m not sure whether it has roots in earlier
Unix systems, it does not seem to originate from Research. I’m not sure what the point of
this ‘v’ kernel variable was. Does anybody remember?
One could argue that one of the drivers of the success of CP/M in the 1970’s was due to
its clear separation between the boot rom, BIOS and BDOS components. As far as I am aware,
Unix prior to 1985 did never attempt to separate the device drivers from the other kernel
code. I am not very familiar with early Xenix, it could be that Microsoft had both the
skill and the interest to separate Xenix in a standard binary (i.e. BDOS part) and a
device driver binary (i.e. BIOS part). Maybe the differences in MMU for the machines of
the early 80’s were such that a standard binary could not be done anyway and separating
out the device drivers would serve no purpose. Once the PC became dominant, maybe the
point became moot for MS.
It would seem that the next step for Unix in the area of boot, config and device drivers
came with Sun’s OpenBoot in 1988 or so. This also appears to be the first appearance of
device trees to describe the hardware to the bios and the kernel. Moreover, it would seem
to me that OpenBoot is a spiritual ancestor of the modern Risc-V SBI specification. Maybe
by 1988 the IO hardware had become sufficiently complex and/or diverse to warrant a break
from tradition?
Was there any other notable Unix work on better organising the boot process and the device
drivers prior to OpenBoot?