On Fri, Aug 11, 2023 at 3:05 AM Paul Ruizendaal <pnr(a)planet.nl> wrote:
Bill Joy of CSRG concluded that the BBN stack did not
perform according to
his expectations. Note that CSRG was focused on usage over (thick) ethernet
links, and BBN was focused on usage over Arpanet and other wide-area
networks (with much lower bandwidth, and higher latency and error rates).
He then in 1982 rewrote the stack to match the CSRG environment, changing
the design to use software interrupts instead of a kernel thread and
optimising the code (e.g. checksumming and fast code paths). It was a
matter of debate how new the code was, with the extremes being that it was
written from scratch using the spec versus it being mostly copied. Looking
at it with a nearly 50 year distance, it seems in between: small bits of
surviving SCCS suggest CSRG starting with parts of BBN code followed by
rapid, massive modification; the end result is quite different but retained
the ‘mbuf’ core data structure and a BBN bug (off-by-one for OOB TCP
segments).
When Kirk McKusick tells the story, UCB got a beta release (or early
access) of the BBN stack. UCB was supposed to add the socket interface to
whatever was there. But Bill Joy found it performed terribly (multiple
seconds to connect sometimes, single digit kB over 10Mb media, etc). He
optimized it to make it perform well. This was a combination of rewriting
chunks and tweaking other chunks, which matches your analysis of SCCS. When
BBN came back with their new, release ready stack Bill supposedly said
something like 'no thanks, we already got one that works way better.' This
is why much of the structure of the original BBN stack survived the
rewrite: if there wasn't a big issue with them, the design and mechanisms
wound up being conserved by this effort. It was too much work to move from
mbuf to something else, and too little gain.
I tried to find a good link, but they are in his BSD history retrospective
talks to differing degrees. Sorry I don't have an exact reference.
Warner