[comp.protocols.tcp-ip] Are Commercial TCPs Berkeley Code Or Custom?

Will@cup.portal.com (Will E Estes) (07/28/90)

Are most of the commercial TCP/IPs sold by companies like Wollongong, Excelan,
and FTP software written from scratch, or is the code basically just modified
Berkeley code?  Why is it so difficult to write a good TCP/IP?  I am
amazed that there are companies whose entire R&D seems to center around 
writing the TCP/IP protocol and supporting applications.  Is it really that
difficult?  You would think that if you started with the Berkeley stuff it
wouldn't be that difficult to improve it, or do legal restrictions prevent
you from using the Berkeley stuff as a base?  (You would think that it would
be pretty easy to license the Berkeley code from the owner if it isn't
public domain already....)

Will Estes        (sun!portal!cup.portal.com!Will)

imp@dancer.Solbourne.COM (Warner Losh) (07/28/90)

: Are most of the commercial TCP/IPs sold by companies like Wollongong, Excelan,
: and FTP software written from scratch, or is the code basically just modified
: Berkeley code?

WIN/TCP for VMS version 5.1 is based on BSD 4.3
Mutlinet (by TGV, sometimes sold by Excelan) is based on BSD 4.3 Tahoe
Excelan?  Don't know for sure.
Fusion:  They wrote their own, then ported it to VMS

WIN/TCP for DOS version 4.1 is based on a very old version of IP/TCP written
	at MIT.  Most of the original code is gone now, but the copyright
	notices remain.
FTP software is also based on the MIT IP/TCP, but I don't know how much they
	have changed it.  Based on what I've seen from them at trade shows
	and on the net, I would guess that this is quite alot.  I also
	got the impression that is president had a great deal to do with
	the original IP/TCP implemetation.

The large number of people that use BSD is a reflection of its unrestrictive
licensing requirements.

Warner
--
Warner Losh		imp@Solbourne.COM
Boycott Lotus.		#include <std/disclaimer>

romkey@asylum.sf.ca.us (John Romkey) (07/28/90)

FTP Software's code isn't based on Berkeley's. It's based on MIT's
PC/IP, some of the primary authors of which (including me) founded
FTP. Internally, it bears little resemblance to PC/IP these days,
having been pretty heavily rewritten.

As for porting the Berkeley code, I find that people who don't know it
well take perhaps 4 months to bring up a port of it - it really wants
to live inside a UNIX kernel. They still find that this is cheaper and
faster than writing a TCP implementation from scratch. One of the
reasons is that the Berkeley code is a *very* good protocol engine
with a lot of time in the field. There are a lot of tricks to bringing
up a TCP implementation from scratch, some of which are decoding the
RFC's sufficiently well to get something "right", figuring out the
stuff that's not in the RFC's (one of the reasons behind writing the
Host Requirements RFC's, which represent "the wisdom of the ages"),
and testing against the great many other TCP's out there. Now, yes,
many of them are ports of the Berkeley code, but there have been
several versions of the Berkeley code with varying levels of protocol
compliance and bugginess, and many vendors manage to introduce their
own bugs in their ports because they don't really have a deep
understanding of what they're doing.

A few years ago, it was possible to have two different people go and
sit in different rooms and write TCP/IP implementations from scratch
and not have them interoperate at all, or have them interoperate
poorly and slowly. I believe this is largely still the case now - a
TCP written in a vacuum isn't worth much. There are a lot of issues
involved in getting this byte-oriented, sliding window protocol to
work over network media spanning less than 300 bps to over 100Mbps
from extremely noisy network links to perfect network transmission
media, with a variety of latencies and having to interoperate in a
world of many perhaps less than bug-free or well-tuned
implementations.

And then you want it to work well.

The Berkeley code represents a lot of experience rolled into one piece
of software. The edges that have to be glued into the system you roll
it into are pretty rough; it's not really designed for that, but what
you get is worth a lot, especially when real network wizards are
expensive and hard to find (and many have better things to do than
write "another" TCP implementation). Likewise, FTP Software has spent
a lot of time getting that experience into its code. A lot of FTP's
support time is dealing with *other* vendor's problems. A lot of
development work has gone into making code that's bulletproof (or at
least resistant) in the face of erratic behaviour on the part of its
network peers.

I think you'll find there are very few individual TCP's out there. The
vast majority are ports of the Berkeley code. Before 4.2BSD, there was
a 4.1 TCP from BB&N, which was rewritten (as I recall) into 4.2's
code, and for a while 4.2 shipped with both until only Berkeley's was
included. MIT's PC/IP was developed based on some code Dave Clark
wrote while on sabbatical in England and brought back to MIT with him;
this spawned a different line of UNIX TCP's, and a number of vendors
implementations are based on PC/IP. Most of these vendors have
probably put a lot of work into rewriting the TCP module, though,
because the one MIT provided was inappropriate and inadequate for
general purpose use. Phil Karn rolled his own in KA9Q (he'll correct
me if I'm wrong). I believe the NCSA telenet TCP is probably
independent, though I've never read the source code for it.

Then there are TCP's for other operating systems, like MIT's ITS (on a
PDP-10), the several varieties of Lisp Machines, Multics, and TOPS-20,
all of which are independent strains.
			- john romkey
USENET/UUCP: romkey@asylum.sf.ca.us	Internet: romkey@ftp.com
King Kong died for your sins.

BILLW@MATHOM.CISCO.COM (William "Chops" Westfield) (07/28/90)

    Are most of the commercial TCP/IPs sold by companies like Wollongong,
    Excelan, and FTP software written from scratch, or is the code
    basically just modified Berkeley code?

I would expect that most of the "large computer" commercial tcps are based
on some version of the Berkeley code.  Most of the PC TCPs are probably
based on the MIT PC/IP code, although these have mutated more.


    Why is it so difficult to write a good TCP/IP?

It's not.  But it isn't easy either.  Read the Host Requirements RFC
sometime.  It's much easier to copy code from someone who has it almost
right than to start from scratch.  I once made a bunch of improvemets to
the TCP for top20, but I reached the point where it would be easier to
port berkeley code than to start from scratch to implement some new
useful features. (Even though it would have meant figuring out a way
to integrate C into an all assembler OS.  Fortunately, I got a different
job about then... :-)

    I am amazed that there are companies whose entire R&D seems to center
    around writing the TCP/IP protocol and supporting applications.  Is it
    really that difficult?

Well, entire companies have been know to support applications that DON'T
involve a network.  It is clearly more difficult if there is a network too.
People want their applications (and their networks) without having to
understand anything about the underlying technology.  Making the network
invisible is very hard.  I wish more comercial companies put effort into
it.  (There ought to be a mail system easier to install than sendmail...)


    You would think that if you started with the Berkeley stuff it
    wouldn't be that difficult to improve it, or do legal restrictions
    prevent you from using the Berkeley stuff as a base?

Berkeley TCP/IP was (is?) developed under government contract, which makes
it pretty much available.  The problem used to be the pieces of unix that
it contained.  Of course, porting the code to a non-unix environment presents
opportunities for numerous bugs to creep in.  And keeping up with the rate
of change the tcp code goes through is pretty tough too.  And if you're
talking about improvements to the applications, you have to remember that
"improvement" is in the eye of the beholder...

BillW
-------

schwartz@groucho.cs.psu.edu (Scott Schwartz) (07/29/90)

In article <12609238094.10.BILLW@mathom.cisco.com> 
 BILLW@MATHOM.CISCO.COM (William "Chops" Westfield) writes:

   There ought to be a mail system easier to install than sendmail...

There is.  Rayan Zachariassen's Zmailer, even in alpha test,
is easier to use and more reliable than sendmail.

hascall@cs.iastate.edu (John Hascall) (07/30/90)

In article <32140@cup.portal.com> Will@cup.portal.com (Will E Estes) writes:

}Are most of the commercial TCP/IPs sold by companies like Wollongong, Excelan,
}and FTP software written from scratch, or is the code basically just modified
}Berkeley code?  Why is it so difficult to write a good TCP/IP?
		 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

   Try it sometime!!  It has taken me over a year of evenings (as many as
my wife will stand for :-) to put together a good solid ARP,IP,ICMP,UDP,TCP,DNS
under VAX/VMS (working entirely in assembly doesn't help!).  And that still
leaves all the "user" stuff (Telnet, FTP, etc...).  [And since the arrival
of 300+ DECstations, VAXes look to be dead here soon, sigh.]

   A big part of the difficulty is all those RFCs -- if you have a working
implementation and a new "good thing" comes out, it is usually not that hard
to add it (unless of course your code looks nothing at all like BSD's :-(
but to try to get all of those things working while more are being thought-up
every day is rather a losing battle.

   By my estimation, most (at least half) of the difficulty is in TCP.
The other half was reverse-engineering DEC's "backdoor" into the ethernet
driver.  Leaving the rest as the third half.

John Hascall  /  john@iastate.edu  /  hascall@atanasoff.cs.iastate.edu

karn@envy.bellcore.com (Phil R. Karn) (08/01/90)

In article <9007272321.AA09325@asylum.sf.ca.us>, romkey@asylum.sf.ca.us
(John Romkey) writes:
|> Phil Karn rolled his own [TCP] in KA9Q (he'll correct
|> me if I'm wrong).

True. My TCP was written from scratch starting in late 1985. Its first
platform, believe it or not, was the Xerox 820, a 64K CPM Z-80 system.
It moved fairly quickly to the PC after that. In the next several
years various refinements such as the Van Jacobson mods were added. It
is fairly stable now, although I recently improved the slow-start code.

My TCP is probably the only one that was written essentially on a
dare. In 1985 the amateur packet radio community was swept by a raging
protocol war that would bring smiles of recognition to this group.  In
one camp were the connection-oriented ISO/CCITT/X.25 lackeys, and in
the other were the Internet TCP/IP people, the only ones who knew what
they were doing (nah, I'm not biased :-)). One of the more rabid
members of the opposing camp stridently argued that TCP was so
incredibly complicated that I could NEVER cram it into anything less
than a full-blown VAX, to say nothing of personal computer hardware
that could be afforded by the average radio ham.

Not one to be told I couldn't do something, I sat down with RFC-793
and started coding.  I had it limping along in a month or two, in time
to show at the ARRL Computer Networking Conference in February 1986.
However, the whole project quickly got into my blood, and over 5 years
later I'm still at it. And the guy who had originally challenged me has
still not conceded defeat.

I *strongly* agree that you can't write a good TCP in a vacuum.  Much
of my early testing took place over a SLIP link which revealed some,
uh, gaps in RFC-793's wisdom on round trip timing algorithms.  Our
CSNET/X.25Net connection to ARPANET at the time was marvelous for
stress testing my IP reassembly and TCP retransmission and
resequencing code. And running on a slow, memory starved machine gave
one a strong incentive to write tight code...

Phil

mwp@ubeaut.OZ.AU (Michael Paddon) (08/01/90)

From article <32140@cup.portal.com>, by Will@cup.portal.com (Will E Estes):
> Are most of the commercial TCP/IPs sold by companies like Wollongong, Excelan,
> and FTP software written from scratch, or is the code basically just modified
> Berkeley code?  Why is it so difficult to write a good TCP/IP?  I am
> amazed that there are companies whose entire R&D seems to center around 
> writing the TCP/IP protocol and supporting applications.  Is it really that
> difficult?  You would think that if you started with the Berkeley stuff it
> wouldn't be that difficult to improve it, or do legal restrictions prevent
> you from using the Berkeley stuff as a base?  (You would think that it would
> be pretty easy to license the Berkeley code from the owner if it isn't
> public domain already....)

The Berkeley code is not public domain; it is copyrighted by the
Regents of the University of California. However, the BSD code *is*
freely available as source. Obviously you can't sell it, but you can
sell any modifications you make to it.

A fair amount of the socket layer is missing from the BSD distribution
because there is AT&T code embedded in it.

From what I've seen of the Exelan and Wollongong IP implementations,
much has been borrowed from the BSD code, so it is likely that they
are both based on it originally.



As for how easy it is to port... I've been doing this for the last six
months, on and off, onto NCR towers under System V.

We rewrote the socket interface as a library/driver combination,
pulled out unix domain sockets and the NS protocols and hacked select
severely. The SLIP driver needed a complete reworking because it is far
too BSD dependent. The mbuf code required extensive thought.
Inetd, syslogd, rsh, rcp and other utilities needed to be hacked.

Another problem was that the BSD code is not bug free. Has anybody
noticed how in_losing() interacts with SLIP?

Getting all that working was about 2-3 man months worth of effort.
Since then, we've been porting to the 850 multiprocessor tower. This
is much more difficult because the BSD code never (and could never)
be designed with that architecture in mind.

In summary, porting IP from BSD sources is straightforward but not
trivial. 

					Michael

-------------------------------------------------------------------
|                     |     EasyNet:  meo78b::paddon              |
|                     |     Internet: paddon@meo78b.enet.dec.com  |
|  Michael Paddon     |     ACSnet:   mwp@ubeaut.oz.au            |
|                     |     ACSnet:   mwp@munnari.oz.au           |
|                     |     Voice:    +61 3 895 9392              |
-------------------------------------------------------------------

kevinr@moe.Tandem.COM (Kevin J. Rowett) (08/09/90)

In article <1990Aug1.013502.25874@bellcore-2.bellcore.com>,
karn@envy.bellcore.com (Phil R. Karn) writes:
|> 
|> In article <9007272321.AA09325@asylum.sf.ca.us>, romkey@asylum.sf.ca.us
|> (John Romkey) writes:
|> |> Phil Karn rolled his own [TCP] in KA9Q (he'll correct
|> |> me if I'm wrong).
|> 
|> True. My TCP was written from scratch starting in late 1985. Its first

Not to mention the hundreds of AR people who've tested and improved Phil's
work over the last few years.  KA9Q TCP/IP can't be considered a contribution
by one person, although the orignator does write some very fine code!

N6RCE

|>I *strongly* agree that you can't write a good TCP in a vacuum.

>Phil

romkey@asylum.sf.ca.us (John Romkey) (08/10/90)

   Date: 1 Aug 90 05:40:34 GMT
   From: decwrl!ucsd.edu!sdd.hp.com!samsung!munnari.oz.au!mtiame!ubeaut!mwp  (Michael Paddon)

   The Berkeley code is not public domain; it is copyrighted by the
   Regents of the University of California. However, the BSD code *is*
   freely available as source. Obviously you can't sell it, but you can
   sell any modifications you make to it.

4 out of 5 network companies do it. I believe that you can sell it;
however, you have to credit the source of the software. Of course,
the difference here is rather a moot point; nobody sells the Berkeley
code without making a bunch of changes too, unless they're selling a
4.xBSD system.
			- john romkey
USENET/UUCP: romkey@asylum.sf.ca.us	Internet: romkey@ftp.com
King Kong died for your sins.