l (CLNP) was functionally very much like IP, which had preceded it, but with improvements such as a larger and more flexible address space. So OSI ended up with two parallel Layer 3 protocols to choose from both standards. Layers 4-7 generally operated only within the host systems at either end of the connection. Layer 4, the transport layer, provided end-to-end integrity and flow control, running at the two ends of the connection. The OSI Transport Protocol ended up with five classes defined, one of which, called TP4, was useful over CLNP or X.25. The others were somewhat simpler but required the more elaborate Layer 3 services of X.25. TP4 was rather like a cleaned-up TCP. The higher layers, however, were a disaster. Layer 5, the session layer, and Layer 6, the presentation layer, had uncertain functions that seemed to some to be a good idea in 1978 but which proved to be unworkable [6]. Layer 7, the application layer, included a set of protocols that were, as a rule, more elaborate than their Internet equivalents. By the late 1980s, it was clear that the functions originally posited for Layers 5 and 6 were really best left as options for the appli- cation layer. But many implementations had compounded the problem by try- ing to implement Layers 5 and 6 as discrete software, rather than within the application-layer code, which would probably have been much easier. It was not pretty. By the time workable implementations were reasonably commonplace, in the late 1980s, TCP/IP had already become the real open protocol for inter- connecting systems. OSI was the big engine that couldn't. TCP/IP Becomes the Standard The ARPAnet was the government's own playground, but its protocols were not. In the early 1980s, the University of California at Berkeley undertook a major effort, fueled by cheap graduate-student labor, to create a form of Bell Labs' Unix operating system. The Berkeley Software Distributions (BSD) were an early example of what is now called open source software. Along the way, the TCP/IP protocol stack wa