Line Mode
For twenty-four years the way to use the internet was to type at it. Not metaphorically: you opened a connection to a port, typed a line, pressed return, and the far end answered in text you could read. That worked because a command was a line of ASCII ending in a carriage return and a line feed, and it worked for file transfer, news, mail, menus, chat and the web alike. A keyboard was a sufficient client. Then it stopped, in two steps, and only the second one was impossible.
I spent 1994 and 1995 at Spry, in Seattle, the company that put Internet in a Box on a shelf. Part of my job was a crawler for Usenet news, and there is no way to write one of those without learning NNTP as lines, or to debug one without opening a connection to port 119 and typing at it until you can see what your program got wrong. That is what this page is: the thing I did at a terminal in 1994, and the reason a person cannot casually do it any more.
One terminal, six ports
Pick a protocol and type at it. The hint under the box is a line that will do something; everything else the grammar allows works too.
- connected to
- —
- what this one shows
- —
- specified in
- —
try: —
- typed so far
- —
Six protocols, three shared ideas
They were designed by different people for different jobs across fifteen years, and they agree about three things. That agreement is why one pair of hands could drive all of them.
| protocol | port | year | what it contributes |
|---|
The first idea: a command is a line of ASCII ending in CR LF. Two bytes with no glyph, which is why the wire column above is worth turning on — a five-character line costs seven bytes and the two extra are the reason the far end knows you have finished.
The second: a reply starts with three digits and the FIRST one is the category. FTP prints the five in its own standard, SMTP and NNTP use the same shape, and IRC calls it “the three digit numeric”. Four protocols, one idea about how to answer.
| code | name | what it means |
|---|
The third is the one worth building. A block of text ends with a line containing only a period — which immediately creates a problem, because the text might contain such a line. Switch to SMTP or NNTP above, start a data block, and type a line beginning with a period.
And then you could not
The same request, three times, twenty-four years apart. It degrades in two steps and only the second is impossible.
| year | what you type | result | what comes back |
|---|
- the first five bytes of a TLS record
- —
- can you type them
- —
The first step was not impossible, it was ambiguous: one machine began answering for many names, so a request that did not carry the name reached the wrong site. You could still type it. You had to know to type more.
The second step is a different kind of thing. A handshake is not text and was never meant to be. There is no arrangement of keys that produces the byte 22, so the question is not whether you know the protocol. And the reason is a good one: everything above crosses the wire in the clear, including the password you typed into FTP.
What this page checked when it loaded
| claim | held | measured |
|---|
What is real here, and what is not
Nothing here opens a socket
There is no server at the other end of that terminal and no connection of any kind. The replies are written from each protocol’s own grammar as published, and a real server would differ in its greeting, its capabilities and most of its text. What is faithful is the SHAPE: the commands are the commands, the reply codes are real codes in their real classes, and the terminators are the terminators. A page that recorded real sessions would be more honest about the text and would need six servers still running six protocols, two of which are effectively gone.
The transparency rule is real code, not a description
Everything else here is a grammar written down. The doubling of a leading period is an actual transformation with an actual inverse, implemented and checked: twelve shapes of text including a line that is only a period, stuffed, sent through the wire form with its terminator, read back, and compared with the original. That is the one thing on this page you could take away and use.
Six protocols is a selection, and Archie was cut
The plan had a seventh, Archie, and it came out on research rather than for space. RFC 1580 is a guide to network tools rather than a specification, and it documents how a person reached Archie — a local client, a telnet login, or email — without defining a wire protocol of its own. A service you reached by logging in and typing at somebody else’s program is a different thing from a protocol with a grammar, and it would have been the only member of the six that could not answer the question this page asks.
The dates are the specifications, not the inventions
1971 is RFC 114, “A File Transfer Protocol”, dated 16 April 1971, which is where this era starts. 1995 is where it ends, and the end date moved during the build: the roster said 1994, which is when SSL 1.0 existed inside Netscape and was never released because it was broken. The first version an ordinary person could use was SSL 2.0, in Navigator 1.1, in February 1995. Ending the era at a version nobody could run would have been a nicer round number and a worse fact.
Line Mode is named after a browser this page does not simulate
CERN’s Line Mode Browser was written by Nicola Pellow during a student work placement and, in CERN’s own words, “By March 1991, a simple ‘Line-Mode’ browser was made available to users of CERN’s central computers.” It was the second browser there ever was and the first that ran on more than one kind of machine. It is the name because line mode is the real term for the thing this page is about — a screen you drive one line at a time — not because anything here reproduces that program. CERN built a faithful simulator of it in 2013 and this is not that.
What the neighbouring machine already covers
Winsock, on this same roster, gets to HTTP from underneath: it builds the dial-up link a layer at a time and then uses HTTP/0.9 narrowly, to show what a crawler misreads when there is no status line. That is the same protocol and a different question, and the overlap was checked rather than assumed before this page was built. This one is about the typing.
Sources
- A. Bhushan, A File Transfer Protocol, RFC 114, 16 April 1971. Where this era starts.
- J. Postel and J. Reynolds, File Transfer Protocol, RFC 959, 1985. The five reply classes, printed in section 4.2, and the second connection.
- J. Postel, Simple Mail Transfer Protocol, RFC 821, 1982. The lone period, and the transparency procedure that keeps it working.
- B. Kantor and P. Lapsley, Network News Transfer Protocol, RFC 977, 1986. Where the doubling rule is spelled out in full.
- F. Anklesaria and others, The Internet Gopher Protocol, RFC 1436, 1993. The item type as the first character of the line.
- J. Oikarinen and D. Reed, Internet Relay Chat Protocol, RFC 1459, 1993. The three digit numeric.
- T. Berners-Lee, The Original HTTP as defined in 1991. One line, terminated by CR LF, and no way to tell an error from a document.
- T. Berners-Lee, R. Fielding and H. Frystyk, Hypertext Transfer Protocol — HTTP/1.0, RFC 1945, 1996. What the simple form became.
- CERN, Line Mode browser available at CERN. March 1991, and Nicola Pellow’s work placement.