On 15 Jul 2022, at 19:15, segaloco
<segaloco(a)protonmail.com> wrote:
Not trying to be combative by any means, but I've
been doing a bit of research lately into when V8 was snapped from BSD and where Bell and
Berkeley then diverged from that last major confluence, especially with a focus on init
and other early stages of userland.
Not taken as combative - always working on the basis of my 'current understanding’
and that is evolving continuously as new views and facts present themselves.
My comments were intended around the kernel code, not the userland. That said, I’ve looked
into this a bit more and I think you were more right than I was.
"Research Unix 8th Edition started from (I think)
BSD 4.1c, but with enormous amounts scooped out and replaced by our own stuff." -
Dennis Ritchie
That is a good quote, but I think there is a better way to look at this, which is Warren’s
tool to establish similarity between files (it is integrated with the Unix Tree webpage on
TUHS).
There's definitely a good chunk of code from
4BSD. Compare init, getty, locore.c (as opposed to .s in V7 back). Heck, even the main.c
between the two kernels are more similar to each other than V7. I would almost opt
towards calling that being rebased on 4BSD rather than V7 with bits and pieces of BSD
added. I could see it being more beneficial to start with 4BSD and tack on necessary Bell
bits rather than take V7/32V and try and shoehorn in the VM implementation for VAX.
Looking at various kernel files in the V8 tree, it would seem that the most comparable
file in the TUHS database (and excluding V9-V10) would typically be “BBN-TCP”, closely
followed by “4BSD”. This BBN-TCP kernel code is based on a snapshot of BSD from August
1980 (see its history file). Joy sent it to Gurwitz for integration of the BBN TCP stack
with the BSD kernel. I think it is (or is close to) 4.1BSD.
From the output of Warren’s tool, it also seems that 4.1c deviated/evolved considerably
from that base. It would require a more in-depth comparison to say more, but based on this
quick check I think it is reasonable to say that V8 started from 4.1BSD (and not 32V as I
thought, or 4.1c as dmr remembered). It would be interesting to see what the
"enormous amounts scooped out” exactly were -- but maybe this refers more to the
userland than the kernel.
Some bits - like select() - were not in 4.1BSD and would have come from 4.1c. The V8
kernel still has a lowcore.s (next to lowcore.c). Interestingly, this has the best match
with later BSD versions. In all likelihood, there was cross-fertilisation after the
initial code fork.
The 4.1cBSD copy on the archive does appear to be
pretty different, so in terms of raw comparison, I suspect the basis is 4BSD rather than
4.1cBSD. I don't know that we have a clean copy of 4.1BSD gold, I'd be
interested to see if the structure of the source code changed between 4.1 and 4.1c, as
4.1c does exhibit the new organization by the BSD folks, 4BSD still shows folders like
cmd, lib, and so on.
Yes, we have (now) reached the same conclusion, but don’t forget that V8 adds a lot of
innovation on top of that (streams, file system switch, virtual proc file system,
networking, remote file system, support for the Blit terminal, etc.). Networking in the V8
kernel (including Chaos) is organised very differently from 4.1cBSD.
Paul