TCP ancestry (was re: is IETF is being shunned...)

Craig Partridge <craig@tereschau.net> Mon, 19 January 2026 16:53 UTC

Return-Path: <craig@tereschau.net>
X-Original-To: ietf@mail2.ietf.org
Delivered-To: ietf@mail2.ietf.org
Received: from localhost (localhost [127.0.0.1]) by mail2.ietf.org (Postfix) with ESMTP id 2B957A9F9A73 for <ietf@mail2.ietf.org>; Mon, 19 Jan 2026 08:53:14 -0800 (PST)
X-Virus-Scanned: amavisd-new at ietf.org
X-Spam-Flag: NO
X-Spam-Score: 0.601
X-Spam-Level:
X-Spam-Status: No, score=0.601 tagged_above=-999 required=5 tests=[BAYES_50=0.8, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, HTML_MESSAGE=0.001, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001] autolearn=ham autolearn_force=no
Authentication-Results: mail2.ietf.org (amavisd-new); dkim=pass (2048-bit key) header.d=tereschau.net
Received: from mail2.ietf.org ([166.84.6.31]) by localhost (mail2.ietf.org [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id Om8ZJg7RfmdH for <ietf@mail2.ietf.org>; Mon, 19 Jan 2026 08:53:13 -0800 (PST)
Received: from mail-lf1-x12b.google.com (mail-lf1-x12b.google.com [IPv6:2a00:1450:4864:20::12b]) (using TLSv1.3 with cipher TLS_AES_128_GCM_SHA256 (128/128 bits) key-exchange X25519 server-signature ECDSA (P-256) server-digest SHA256) (No client certificate requested) by mail2.ietf.org (Postfix) with ESMTPS id 99011A9F9A6C for <ietf@ietf.org>; Mon, 19 Jan 2026 08:53:13 -0800 (PST)
Received: by mail-lf1-x12b.google.com with SMTP id 2adb3069b0e04-59b6df3d6b4so5449775e87.0 for <ietf@ietf.org>; Mon, 19 Jan 2026 08:53:13 -0800 (PST)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=tereschau.net; s=google; t=1768841592; x=1769446392; darn=ietf.org; h=to:subject:message-id:date:from:mime-version:from:to:cc:subject :date:message-id:reply-to; bh=ep/4azGhk6fES6ZdLZ92dXoPgkNt37qTHXB/EqDxarA=; b=jQ7mmP1+vKEyOAzU+L/FTGJxfBtMy0GZ+mL7PKBUM++R+j3GMjc5YbThrLbGcpBOLx mt8Eg335c1dITNdzzNGzBmr1/8BqW6K54ba1v4Xl20KLXmmsgPaBNCfG6jbLov3V1d0s SyV2IizyiE6y16twB6rwjEqhBrlxUkDnR+rZ378qYRrONaGYu+AZ8WWuT5UZE3frHzGy yHoWyYc0Zde9R9Z/1aywbOWbE4n51u+hzPfvc5VUkbfyR3GaUMt4UImjOfFqTMHfQnAJ WAVUutvD6HXVuqyGCyYlvnG4E3RFrlEz4ACzWF4gxtfbStkFBorh2OA9BuSUlhR4ddVP fvPA==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1768841592; x=1769446392; h=to:subject:message-id:date:from:mime-version:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=ep/4azGhk6fES6ZdLZ92dXoPgkNt37qTHXB/EqDxarA=; b=o24dbdEaDAOJ6RGOnyvT8sSSw7Zp/0R7LrAB2Ugl0fn3TQCiFGgvwkqZ0T+lFY+Q3s +kO9zsApRZYobP++UD564JHe0bBXE9OLpDpWLkiOmuHkTHB2a9zv58Enxs2GtvYg2f06 wc9XGnQfOLP1vxsmY1yXuuZQBj063uvf/yLAIreA/Z3NOwkN8fbJv9My4pMkzkQXBpJ6 N6Our8s2gKE3A+EueKegi0IWYK9XPtqTNAtsdBQpgtptAUhogDrVm1WeetI0KPxJBiDt wnNK+5xneBMNJyoSZ391IR/3wYb240N3l31XzqMvgZyoP0+/mYl9r48AajQCmj1Amrum zQbw==
X-Gm-Message-State: AOJu0Yz7dJxVc/DAc0q/t+cgNhtCWXRp49O2MXISANdJcQNGTxEqxUdB Oq5jjqBGhOCqthp9l7v6rTjqyJ75X1E2I4fhu/6EDE1ZfVG7rLPj0ctxy9PYW5KZc0BKYZOV4ta 1z7Rxnohph1mYMNlnGyla0g1/90DJ7FCU3n2Z62kzKZoNzBwI4fmKDf+tGA==
X-Gm-Gg: AY/fxX6zDGnSsSIq3thwFRDM4bb8YeZ7C6D7eNy6y6dIaMx3pvpofxrs2vBVA0Isfg3 xphz5xHwGBsaNP+UyS4I271jlqy5txLY4bsPTOZNrKZy3hkwJugw/zG1kS8i+hyuq4kOhwEJp3T VJvQkoLfyiNWsWGNOkyZorWE+i0AURE3Vg2KUTazMlvAM7rk9K8F5J3mrZGk1j7CNVio7Zv7OqM oXZljN1kZ/9fBZak6cxeE54znfB65HDA4WmKXgsLxYzJUw9WQXt32Jcb/6e/lbxMT2GtpDvPVfI PfP26X1eJT46Gs3ZQ0wHLVo33m2k
X-Received: by 2002:a05:6512:234f:b0:59b:717b:c152 with SMTP id 2adb3069b0e04-59baef01aafmr4110005e87.45.1768841591612; Mon, 19 Jan 2026 08:53:11 -0800 (PST)
MIME-Version: 1.0
From: Craig Partridge <craig@tereschau.net>
Date: Mon, 19 Jan 2026 09:53:00 -0700
X-Gm-Features: AZwV_QhEXd5D76ojiTkdZqTPgxuBY4KElX4KFaf1biOgqM-ckX4-bnjqucgJ4CI
Message-ID: <CAHQj4Cf1YRYdd5WXdXZX8+OhsUX13q3BFiygr_ocd5DO5f9Y8g@mail.gmail.com>
Subject: TCP ancestry (was re: is IETF is being shunned...)
To: ietf@ietf.org
Content-Type: multipart/alternative; boundary="000000000000bb77c80648c08629"
Message-ID-Hash: I6OOH7TKFXL7Z5F7FSYWBATS4DQF2JH4
X-Message-ID-Hash: I6OOH7TKFXL7Z5F7FSYWBATS4DQF2JH4
X-MailFrom: craig@tereschau.net
X-Mailman-Rule-Misses: dmarc-mitigation; no-senders; approved; emergency; loop; banned-address; member-moderation; header-match-ietf.ietf.org-0; nonmember-moderation; administrivia; implicit-dest; max-recipients; max-size; news-moderation; no-subject; digests; suspicious-header
X-Mailman-Version: 3.3.9rc6
Precedence: list
List-Id: "IETF-Discussion. This is the most general IETF mailing list, intended for discussion of technical, procedural, operational, and other topics for which no dedicated mailing lists exist." <ietf.ietf.org>
Archived-At: <https://mailarchive.ietf.org/arch/msg/ietf/rbWOYPjlCs2HwT4x66Hsuu7bCpI>
List-Archive: <https://mailarchive.ietf.org/arch/browse/ietf>
List-Help: <mailto:ietf-request@ietf.org?subject=help>
List-Owner: <mailto:ietf-owner@ietf.org>
List-Post: <mailto:ietf@ietf.org>
List-Subscribe: <mailto:ietf-join@ietf.org>
List-Unsubscribe: <mailto:ietf-leave@ietf.org>

> I wonder what percentage of TCP/IP stacks are still based on the BBN
reference implementation Rob Gurwitz wrote for BSD.

I would say "few or none".  On the other hand, if you'd asked how many
modern TCP/IP stacks were "influenced by" Rob's implementation,  I'd say
most.

For those who are curious, a quick history. Much is by memory as searching
the web I see partial histories -- much of the messy aspects are politely
ignored -- but I probably also get some bits wrong here.  And this
conversation, if it persists, should migrate to the internet-history list
(I'm replying here because some newer TCP experts in IETF may be interested
in the background):

In the 1970s, there were several TCP implementations and they were debugged
together in TCP bakeoffs that helped shape the TCP spec.  (Infamously,
implementing the checksum proved hard and the TCP spec contains the
description used by the team deemed to have implemented it best). The UNIX
implementation was done at BBN, if I remember correctly, by Jack Haverty.

(D)ARPA was hunting for a research operating system to succeed TENEX. Unix
was the obvious choice except it (a) lacked virtual memory and (b) lacked
networking.  So ARPA funded Berkeley to put VM into Unix and funded BBN to
enhance Haverty's Unix TCP for virtual memory and integrate it with the
Berkeley UNIX.   Rob Gurwitz did the BBN TCP work -- which required
substantial effort (e.g. Rob had to invent a way to create packet buffers
in a VM system and developed mbufs -- and much of how we think about
network buffering is influenced by Rob's decisions; Rob also redid the code
to work with software interrupts).  The resulting BSD updated Unix with
virtual memory and Rob's TCP code became 4.1BSD.

Bill Joy did not like the BBN TCP implementation.  I've heard many stories
about Bill's motivation but never seen/heard anything from Bill, so I'll
stick to two obvious dislikes you can infer from his code: (1) the BBN TCP
used /dev/tcp and ioctls and Bill felt the API was ugly and so he created
sockets; and (2) the BBN TCP used a state table on the inbound side (packet
type x socket state -> routine to give packet to) while Bill preferred a
flat (large) IP input routine.  So Bill rewrote the BBN TCP into his
preferred form -- having read the two versions, my sense is Bill wrote his
own code for much of it, but sought to stay bug-for-bug compatible with the
BBN 4.1 TCP.  He also retained mbufs and the basic software interrupt
architecture.  (I still remember c. 1989 when a TCP bug appeared in BSD,
the BSD folks made a point of saying it was in the BBN 4.1 code).  This was
released as 4.1c and then 4.2BSD.

Bill's rewrite caused pain.  The BBN TCP had been improved for the expected
4.2BSD release (the BSD release tape left out the improved BBN TCP) and
Bill's rewrite of 4.1's TCP effectively was a step backwards in TCP
maturity.  ARPA was not happy that BSD had spent money duplicating
(superceded) BBN work. There were moments when it appeared ARPA might try
to force BSD back to using BBN code.  That did not happen (my personal
sense -- sockets was so clearly an API win, that it carried the day) and
the result is that the reference TCP/IP in the 1980s, from which many TCPs
are derived, was descended from Bill's BSD implementation.

So Rob's code influenced the reference BSD implementation in the 1980s, but
the BSD implementation was (sorta) distinct and that's the one that carried
down to today.

Craig (who worked with the BBN code briefly c. 1985 and ran the BBN BSD
networking code project for DARPA from 1986 to 1991 or so)

-- 
*****
Craig Partridge's email account for professional society activities and
mailing lists.