Comment by spijdar
1 day ago
More succinctly:
- Darwin has no direct BSD ancestor. Unlike {Net,Free,Open}BSD and the more obscure ones (Bitrig, anyone?) there was never a point in time where it directly "connects" to the BSD lineage. The other BSDs all can trace their repositories back to CSRG's BSD.
- Darwin isn't stored or built like a BSD. The BSDs have massive monorepos containing all of the source, traditionally checked out to /usr/src, while Darwin is split into many independently versioned packages, (usually) compiled with Project Builder/Xcode.
Yes, the C API is derived from and supposed to resemble BSD, and much of the userspace was copied from a BSD-derivative (this has grown over time, as Apple (and the BSDs) replaced GNU utilities).
But that's why I would call macOS/Darwin "BSD-like" or "BSD-derived" rather than "a BSD".
Also, this isn't meant to be taken too seriously. I just like "OS taxonomy", and I think macOS/Darwin is distinct enough to qualify as a separate species ;-)
It's rather a bit more BSD than merely having a "C API that resembles BSD" or a "BSD userland".
https://github.com/apple-oss-distributions/xnu/tree/main/bsd
You can find there the better part of a whole BSD kernel, including the fundamental datastructures like proc, tty, vnode, and user.
The point of departure is 4.4BSD-Lite2. The majority of the core of the BSD kernel carries the relevant notices for that.
Yeah, I probably went too far in saying it's just the userland, but I'll insist it's more complicated than saying it was based on 4.4BSD-Lite2. I haven't done a proper deep dive yet, but I can tell that it wasn't strictly based on the Lite2 release. Take a look at XNU 123.5's (OS X 10.0) kern/tty.c:
https://github.com/apple/darwin-xnu/blob/xnu-123.5/bsd/kern/...
Notice the SCCS version info dates the file 1/21/94. Now look at the Lite2 equivalent:
https://github.com/sergev/4.4BSD-Lite2/blob/master/usr/src/s...
The SCCS date on this file is 1/9/95, a year later. It appears the XNU copy is from Lite1 instead:
https://github.com/dspinellis/unix-history-repo/blob/BSD-4_4...
You'll also see the source has been reorganized, with e.g. the VFS source being regrouped into bsd/vfs, instead of being left in bsd/kern. This coincidentally mirrors how OSF/1 was organized (no other source relation though, just an interesting observation):
https://github.com/Arquivotheca/OSF1/tree/OSC200/src/kernel/...
For that matter, compare the the differences between vfs_bio.c in XNU:
https://github.com/apple-oss-distributions/xnu/blob/rel/xnu-...
With Lite2's, where most function bodies have been replaced with the comment "Body deleted.", presumably due to use of encumbered code:
https://github.com/sergev/4.4BSD-Lite2/blob/master/usr/src/s...
This file had to be reimplemented by all of the BSDs. In this case, this version appears distinct from the FreeBSD and NetBSD versions I can find.
If you grep around for the `NeXT` ifndef/ifdefs in XNU, too, you'll see some code of which some appears to have been copied/adapted from the NeXT source tree, itself derived from Mach/CMU sources. (and 4.3BSD ;-)
I say all this to draw attention to the ways XNU differs from BSD, which is pretty interesting, at least to me.
No person acting in good faith can argue that having similarities to 4.3BSD-Lite1 or 4.3BSD-Reno (the basis for OSF/1) make something less of a BSD.
These are not ways it "differs from BSD." These are ways it is identical to BSD.
That's objectively false. You're just trolling at this point.