365 RFCs

Commenting on one RFC a day in honor of the 50th anniversary of the first RFC.

by Darius Kazemi, June 5 2019

In 2019 I'm reading one RFC a day in chronological order starting from the very first one. More on this project here. There is a table of contents for all my RFC posts.

Illinois status

RFC-156 is titled “Status of the Illinois Site (Response to RFC 0116)”. It's by W. Jack Bouknight of the University of Illinois. It's dated April 26th, 1971.

The technical content

This RFC lets people know that Illinois has made the hardware connection from their PDP-11 to their IMP. However, the connection is not in operation as the software isn't done. They expect their Network Control Program to be finished by the end of May. In June they will have the PDP-11 actually installed.

Analysis

This may seem odd, but to connect a computer to an IMP always required custom hardware. So I believe this RFC says “we built the adaptors, but the PDP-11 isn't even online yet and we haven't written the software, for obvious reasons.”

How to follow this blog

You can subscribe to this blog's RSS feed or if you're on a federated ActivityPub social network like Mastodon or Pleroma you can search for the user “@365-rfcs@write.as” and follow it there.

About me

I'm Darius Kazemi. I'm an independent technologist and artist. I do a lot of work on the decentralized web with ActivityPub, including a Node.js reference implementation, an RSS-to-ActivityPub converter, and a fork of Mastodon, called Hometown. You can support my work via my Patreon.

by Darius Kazemi, June 4 2019

In 2019 I'm reading one RFC a day in chronological order starting from the very first one. More on this project here. There is a table of contents for all my RFC posts.

More addressees

RFC-155 is titled “List to Receive RFC's”. It doesn't list an author in the RFC itself, but according to future RFC catalogs, it's Jeanne B. North of SRI-ARC. It's dated May 1971.

The technical content

This is another directory of people and institutions who are to receive copies of RFCs in the mail.

Of special interest are the institutions that are to receive RFC copies that are not currently ARPANET sites:

  • Berkeley Computer Corporation
  • Canadian Computer Communications Task Force
  • EDUCOM
  • IBM Watson Research Center
  • MERIT Computer Network
  • Raytheon Data Systems
  • Washington University Computer Systems Laboratory

If you look at the list of NIC Station Agents you'll find a whole boatload of women:

  • Nan Brown at University of Illinois
  • Cindy Page at ARI-ARC
  • Margaret Goering at ARPA
  • Martha Ginsberg at Computer Corporation of America
  • Carolyn Lisle at Carnegie-Mellong University
  • Linda Connelly at RAND
  • Shirley Watkins at the National Bureau of Standards
  • Frances L. Yost at MIT Project MAC
  • Carol Mostrom at MIT Lincoln Laboratory
  • Judith Needham at System Development Corporation
  • Rilla Reynolds at SRI-ARC
  • Barbara Barnett at Stanford University's Artificial Intelligence Project
  • Carol Wilkinson at Stanford University's Heuristic Programming Project
  • Imogen Beattie at UCLA
  • Anita Coley at UCLA's Computer Science Department
  • Elizabeth Gibson at UCSB's Computer Research Laboratory
  • Merilee Osterboudt at USC
  • Nancy Bruderer at University of Utah

These women were tasked with managing information for these institutions and departments. None of the computer scientists who worked on ARPANET would have been able to participate in the RFC project without them.

How to follow this blog

You can subscribe to this blog's RSS feed or if you're on a federated ActivityPub social network like Mastodon or Pleroma you can search for the user “@365-rfcs@write.as” and follow it there.

About me

I'm Darius Kazemi. I'm an independent technologist and artist. I do a lot of work on the decentralized web with ActivityPub, including a Node.js reference implementation, an RSS-to-ActivityPub converter, and a fork of Mastodon, called Hometown. You can support my work via my Patreon.

by Darius Kazemi, June 3 2019

In 2019 I'm reading one RFC a day in chronological order starting from the very first one. More on this project here. There is a table of contents for all my RFC posts.

Defensive pedantry

RFC-154 is titled “Exposition Style”. It's by Steve Crocker and dated May 12th, 1971.

The technical content

So. This one-page RFC seems completely off-topic, until you look at the metadata in the upper left corner of the page:

Updates: #107
Obsoletes: #132

If we look at RFC-132, we see that it's correcting an error in Crocker's RFC-107. This RFC is correcting an error (or misunderstanding) in that correction. The exact passage from RFC-107 in contention here is:

Each of these numbers is interpreted as "the number of 128ths of the current allocation" to be returned if it is in the range of 0 to 128, and is to be interpreted as "all of the current allocation", if it is in the range 128 to 255.

In RFC-132, Jim White says that the “0 to 128” should actually read “0 to 127”. Crocker in this RFC is claiming that he was correct the whole time. His argument is: if I'm describing two ranges of values, those ranges can overlap on their boundary as long as both claims about both ranges are true for the value on the boundary. In other words:

  • because 128/128 = 1 aka 100% allocation
  • and because the range 128 to 255 is meant to describe 100% allocation
  • he is not technically wrong to specify the 0 to 128 range; all values are correctly described

Analysis

Look. Crocker is correct that he's not wrong. But Jim White is correct in that that double-specifying the value of 128, when either range correctly specifies it, is just plain confusing.

How to follow this blog

You can subscribe to this blog's RSS feed or if you're on a federated ActivityPub social network like Mastodon or Pleroma you can search for the user “@365-rfcs@write.as” and follow it there.

About me

I'm Darius Kazemi. I'm an independent technologist and artist. I do a lot of work on the decentralized web with ActivityPub, including a Node.js reference implementation, an RSS-to-ActivityPub converter, and a fork of Mastodon, called Hometown. You can support my work via my Patreon.

by Darius Kazemi, May 30 2019

In 2019 I'm reading one RFC a day in chronological order starting from the very first one. More on this project here. There is a table of contents for all my RFC posts.

Interprocess communication

RFC-150 is titled “The Use of IPC Facilities”. It's by Richard B. Kalin of MIT Lincoln Laboratory and dated May 5th, 1971.

A business note: my ten-month Mozilla Fellowship has supported this project up until now, but that has ended. If you like what I'm doing here, please consider supporting me via my Patreon.

The technical content

Kalin is providing this document as a warning. He says that the current understanding of interprocess communication (IPC) over the ARPANET (communcation between one program on one computer with a program on a different computer) is woefully and perhaps dangerously underdeveloped. In particuar, the current implementations of IPC don't allow for some easily imaginable future uses of IPC.

He says that a general solution to IPC is necessarily going to be “clumsy and inefficient” and that solutions need to be machine-specific.

He then goes into various examples of IPC usage.

First he points out that different processes need different sized chunks of data input in order to actually do a computation on the input. For example, a character converter needs at least 1 character to do its thing. Some programs operate on whole lines of text, and some programs might need an entire file to be sent before they can do their thing.

Every executive system must face the problem of deciding at what times enough input is available for a given routine for it to run efficiently. This decision can not be taken lightly.

(By “executive system” he is broadly referring to the operating system, by the way.)

He talks about “wakeup”, which is the point at which the operating system tells the process: okay, you have received enough data so you can wake up and do some calculations now. Wakeups are computationally expensive, so you want to minimize the number of these orders you issue. While there is no general solution, one common solution is for a process to say to the operating system: “I am expecting N bits of information so wake me up when you have that many to give me.” Or perhaps “wake me up when you get a carriage return character since that's a whole line of input.”

Kalin calls these chunks of actionable data a logical message, and suggests that standardized boundary markers for logical messages might be a good thing to implement.

Sometimes full logical messages are too big to be sent in one go, as buffers on the receiving computer might be smaller than a logical message (for example in the case of sending a full file). So we need to be able to send logical messages in small chunks, indicating “this is part 1 of N, this is part 2 of N, […], this is part N of N.”

There is also the issue of the total amount of buffer available on the receiving computer. There should be some way for a receiving computer to say “I can't receive any more message parts right now, please cease further transmission until I give you the go-ahread.” Otherwise the buffer could overflow simply because a sending computer is sending data at too fast a rate.

Output buffers should be allocated as for similar reasons, though Kalin notes:

This particular user option is sure to raise the wrath of legions of system programmers. From their point of view, the empty buffer space that is being preallocated is necessarily being wasted. For although it contains no messages, it is not available for other uses. The user, on the other hand, does not correlate 'empty' with 'wasteful' nor 'full' with 'efficient'. A process needs empty output buffers as much as it needs full input ones. Both are resources necessary to sustain processing.

Sending processes should be able to know how many of its messages have not yet been processed, so perhaps it could back off on sending further messages. Note that this is with regards to actual processing of the messages, not just the NCP passing it on to a process and sending back an acknowledgment. This is more like getting a job status in the Remote Job Entry system. It could also assist with debugging remote issues.

There should also be an ability for an operating system to have a process operate in “burst mode” (Kalin's phrase). The idea here is that the OS deliberately lets a whole bunch of logical messages pile up in the input buffer, and then wakes the process and lets it process all the messages at once. This reduces the number of wakeup calls to the process, which as explained above are computationally expensive and should probably be minimized.

The remainder of the document describes in detail the various capabilities of an RJE-like remote status system concerning the input data stream on a remote machine and its statuses. Things like: querying basic info about the Nth logical messaged queued for a process, how many logical messages are queued total, measurement of throughput in the logical message queue, manage permissions on the queue, etc.

Kalin closes by requesting feedback.

Even the most informal note or telephone call will be
appreciated.

Analysis

I think it's interesting that the author includes a note near the beginning that he is keeping the document in electronic format, specifically drawing attention to the mutability of such a document:

one should not consider any document of this kind as either authoritative or final. For this reason, this paper is being kept as a computer based textfile, and so will remain subject to editting [sic] and rerelease whenever new insights become understood.

This RFC is asking for a lot and I'm curious to see how it plays out over future RFCs. At a glance, I don't see any direct responses to this RFC, so maybe they just ignore it?

How to follow this blog

You can subscribe to this blog's RSS feed or if you're on a federated ActivityPub social network like Mastodon or Pleroma you can search for the user “@365-rfcs@write.as” and follow it there.

About me

I'm Darius Kazemi. I'm an independent technologist and artist. I do a lot of work on the decentralized web with ActivityPub, including a Node.js reference implementation, an RSS-to-ActivityPub converter, and a fork of Mastodon, called Hometown. You can support my work via my Patreon.

by Darius Kazemi, June 2 2019

In 2019 I'm reading one RFC a day in chronological order starting from the very first one. More on this project here. There is a table of contents for all my RFC posts.

NIC status

RFC-153 is titled “SRI ARC-NIC Status”. It's by John Melvin and Richard Watson of the Network Information Center on May 15th, 1971.

The technical content

This is a status update on the Network Information Center's activities. They're almost done converting their system to the PDP-10 running the Tenex operating system. They hit some bugs due to a hardware issue: a noisy ground connection on a chip! Now the system only crashes once every other day which is a significant improvement (over what, they do not say).

They're trying to get their Network Control Program and Telnet working, and they want to get the latest Host-Host protocol working as well.

At the moment their system supports local connections of 12 displays and 24 teletypes, though 10 display connections does currently strain the system. They expect that by the middle of summer they'll be able to support from 6 to 12 remote users.

The authors then provide updates on other functions of the NIC, noting that they mail out RFCs within about 48 hours of receiving them from the authors who send them in. This is to account for time it takes to make copies of the documents, and they specifically ask authors to send in a high quality document that they can make copies from.

They recommend people re-read RFC-115 and RFC-118, which lay out some of the operating procedures of the NIC and what types of documents they process.

They close by encouraging readers to contact their Information and Agent Coordinator Jeanne North (AKA Reddy Dively) if they require any help organizing their own document collections at their site.

How to follow this blog

You can subscribe to this blog's RSS feed or if you're on a federated ActivityPub social network like Mastodon or Pleroma you can search for the user “@365-rfcs@write.as” and follow it there.

About me

I'm Darius Kazemi. I'm an independent technologist and artist. I do a lot of work on the decentralized web with ActivityPub, including a Node.js reference implementation, an RSS-to-ActivityPub converter, and a fork of Mastodon, called Hometown. You can support my work via my Patreon.

by Darius Kazemi, June 1 2019

In 2019 I'm reading one RFC a day in chronological order starting from the very first one. More on this project here. There is a table of contents for all my RFC posts.

Artificial intelligence online

RFC-152 is titled “SRI Artificial Intelligence Status Report”. It's by B. Michael Wilber of SRI's Artifical Intelligence Group. It's dated May 10th, 1971.

The technical content

The Artificial Intelligence Group at Stanford Research Institute expects to connect to the ARPANET in the summer of 1971 via their PDP-10. They plan to use the IMP currently connected to SRI ARC.

Mid-July 1971 is their “most optimistic estimate”.

Once online, they plan to support several simultaneous remote users during the business day. In particular they are excited to provide access to

  • QA3.6, a question-answering system (hence QA) which is “a first-order resolution theorem prover”
  • STRIPS, the Stanford Research Institute Problem Solver

Further reading

It's tough to find information on QA3, but it's described in this paper from 1969 or 1970 as

programmed in LISP on the SDS 940 computer, operating in the time-sharing mode. The user works at a teletype, entering statements and questions, and receiving replies.

A user session might look like this:

[User states that Smith is a man]

STATEMENT: MAN(Smith)

OK

[User asks is Smith a man]

QUESTION: MAN(Smith)

ANSWER: YES

[User states that all men are animals]

STATEMENT: (∀x)[MAN(x)=>ANIMAL(x)]

OK

[User asks “Is there some “y” such that “y” is an animal? If so, show me”]

QUESTION: (Ǝy)ANJMAL(y)

ANSWER: YES, y = Smith

So the basic idea is: you input formal logical statements, and then you can make queries based on those formal statements.

More on STRIPS at Wikipedia. It seems to offer a similar kind of service.

B. Michael Wilber worked on many projects at SRI's Artificial Intelligence Group, including the famous robot SHAKEY.

This was, incidentally, right before ARPA made big funding cuts in artificial intelligence that led to what's known as the first AI winter.

How to follow this blog

You can subscribe to this blog's RSS feed or if you're on a federated ActivityPub social network like Mastodon or Pleroma you can search for the user “@365-rfcs@write.as” and follow it there.

About me

I'm Darius Kazemi. I'm an independent technologist and artist. I do a lot of work on the decentralized web with ActivityPub, including a Node.js reference implementation, an RSS-to-ActivityPub converter, and a fork of Mastodon, called Hometown. You can support my work via my Patreon.

by Darius Kazemi, May 31 2019

In 2019 I'm reading one RFC a day in chronological order starting from the very first one. More on this project here. There is a table of contents for all my RFC posts.

Conflicts between levels

RFC-151 is titled “Comments on a Proferred Official ICP”. It's by Arie Shoshani of System Development Corporation, and dated May 10th, 1971.

The technical content

Shoshani begins by pointing out a race condition that is possible in the Initial Connection Protocol as specified in RFC-123. He suggests that the eventual ICP spec should explicitly contain the fix for the race condition.

He then provides some general commentary on the ICP.

  1. Related to Bhushan's complaint in RFC-148, since the Host-Host protocol says that NCPs should be prepared to accept byte sizes between 1 and 255 bits, the fact that the ICP limits the first few messages to 32 bit bytes conflicts with the Host-Host protocol.
  2. The ICP is missing an ALL (“allocate”) command that is present in the Host-Host protocol. This is another conflict.
  3. He disagrees with RFC-127 where it states that the initial connection must be a single message containing 32 bits of data since it conflicts with the Host-Host protocol.

Analysis

His point about the 32-bit byte size restriction being unnecessary seems flat-out wrong to me. He says that “it is up to the sending process to chose the byte size”. The thing is, the fixed byte size on those first messages seems to be there in order to reduce the amount of time the well-known ICP socket needs to be open. Remember that there is a socket that is always open and listening for new connections, whose only job it is to shunt a new connection to a different socket and then listen for the next request for a new connection. If the data size is not agreed upon in advance then there is more processing needed, which means that ICP listener socket will be locked more often, slowing down the network in general.

His point about the missing allocation command also seems wrong, as I see an allocation command right there in RFC-127. If he's referring to that initial 32 byte connection and thinks it shouldn't be a special case, well then yes, I guess that is concerning. But I think it's clear that this special case should exist (since the ICP listening socket needs to be open as much as possible).

I don't know, I just fully disagree with Shoshani here but also, I've had trouble with his past RFCs! I found his RFC-144 to be counterproductive as it never defined the thing it was discussing (data sharing).

Shoshani really doesn't like conflicts between second-level and third-level protocols. And yes that conflict shouldn't be there but I think it could be resolved with a change to the Host-Host protocol providing room for the exception in the ICP case.

How to follow this blog

You can subscribe to this blog's RSS feed or if you're on a federated ActivityPub social network like Mastodon or Pleroma you can search for the user “@365-rfcs@write.as” and follow it there.

About me

I'm Darius Kazemi. I'm an independent technologist and artist. I do a lot of work on the decentralized web with ActivityPub, including a Node.js reference implementation, an RSS-to-ActivityPub converter, and a fork of Mastodon, called Hometown. You can support my work via my Patreon.

by Darius Kazemi, May 29 2019

In 2019 I'm reading one RFC a day in chronological order starting from the very first one. More on this project here. There is a table of contents for all my RFC posts.

Accommodating Dr. Roberts

RFC-149 is titled “The Best Laid Plans . . .” and is authored by Steve Crocker of UCLA on May 10th, 1971.

The technical content

This RFC informs readers that “Dr. [Larry] Roberts” is unlikely to attend the Monday afternoon Network Working Group sessions in Atlantic City due to a conflict. So they are going to move “Network Planning” and “other ARPA Projects” to different day so that he can be there for those.

Attendees are also told that they should read all RFCs since the last NWG meeting to prepare.

Analysis

If the ARPANET crew at this point was mostly people in their mid-20s, Dr. Lawrence Gilman Roberts must have seemed like some kind of wizened father figure at the ripe old age of 34. As head of ARPANET project from the ARPA side of things, he was one of the six people named on the initial RFC distribution list. In other words, when it comes to high-level planning and ARPA business, Roberts had to present for the two sessions mentioned in this paper, so it makes sense that they moved them for his convenience.

Dr. Roberts passed away on December 26th, 2018, just five days before I decided to start this blog.

How to follow this blog

You can subscribe to this blog's RSS feed or if you're on a federated ActivityPub social network like Mastodon or Pleroma you can search for the user “@365-rfcs@write.as” and follow it there.

About me

I'm Darius Kazemi. I'm an independent technologist and artist. I do a lot of work on the decentralized web with ActivityPub, including a Node.js reference implementation, an RSS-to-ActivityPub converter, and a fork of Mastodon, called Hometown. You can support my work via my Patreon.

by Darius Kazemi, May 28 2019

In 2019 I'm reading one RFC a day in chronological order starting from the very first one. More on this project here. There is a table of contents for all my RFC posts.

Severe strains

RFC-148 is titled “Comments on RFC #123”. It's authored by Abhay Bhushan of MIT Project MAC, dated May 7th, 1971.

The technical content

This RFC registers a complaint about the Initial Connection Protocol. Recall that byte size varies wildly from computer to computer — the ICP asks that computers send 32-bit bytes during the very initial stages of initial connection. So a server goes:

  1. Listen for a message of byte size 32
  2. On connection, send socket data, using byte size 32
  3. Close this connection
  4. Initialize the long-term connection using byte size B, as requested by the user

The Network Control Program (NCP) running on the PDP-10 at Project MAC has two modes: 36-bit bytes, and 8-bit ASCII bytes where the high bit is always 0. So they can't send arbitrary 32-bit data by stringing together four 8-bit bytes, as they are limited by the high bit of each byte always being zero. And the least common multiple of 36 and 32 is 288, which means they could send 8 36-bit bytes at a time representing a total of 9 32-bit bytes. But that seems unweildy.

Buhshan suggests that the default byte size on connection could be very large, like 72 bits, and use filler bits.

Analysis

Personally it sounds like Project MAC's NCP could use some tweaking to conform to the initial connection protocol, not the other way around.

How to follow this blog

You can subscribe to this blog's RSS feed or if you're on a federated ActivityPub social network like Mastodon or Pleroma you can search for the user “@365-rfcs@write.as” and follow it there.

About me

I'm Darius Kazemi. I'm an independent technologist and artist. I do a lot of work on the decentralized web with ActivityPub, including a Node.js reference implementation, an RSS-to-ActivityPub converter, and a fork of Mastodon, called Hometown. You can support my work via my Patreon.

by Darius Kazemi, May 27 2019

In 2019 I'm reading one RFC a day in chronological order starting from the very first one. More on this project here. There is a table of contents for all my RFC posts.

Sockets

RFC-147 is titled “The Definition of a Socket”. It's authored by Joel M. Winett of Lincoln Laboratory, dated May 7th, 1971.

The technical content

This RFC attempts to formally define what a socket is. The first time the term “socket” was used in an RFC was way back in RFC-33, more than a year prior to the publication of this RFC, so it seems like it's about time.

A socket is defined to be the unique identification to or from which information is transmitted in the network.

A socket is a 32-bit identifier. Even-numbered sockets are for receiving information, odd-numbered sockets are for sending information. Each socket maps to a “port”, which is a local input or output device, either physical (hardware like a printer) or logical (pure software like a file system). Simultaneously that socket maps to a “process”, or program. I think the implication is thus that programs also map to I/O devices.

Some sockets should be universally known and agreed upon by convention. For example, the socket for initial connection should be the same on all hosts—otherwise you'd need to maintain the references of every initial connection socket on every computer on the network in order to make things work. Having the socket the same for all initial connections means nobody has to keep track of this, all you need to do to connect to UCLA is know UCLA's network ID and then connect to the universally agreed-upon socket for initial connections.

Importantly, sockets are related to accounting procedures, aka “how do we track who does what and possibly charge them money for the privilege?” If an NCP logs the amount of time each remote socket is connected to a local socket, and if the remote socket can be associated with some user account on the remote server, then you can charge money for usage accordingly (or figure out who deleted your file, etc).

Given the importance of user identification, the author recommends using the 32 bits of a socket like so:

  • 8 bits to identify the host server
  • 16 bits to identify the user
  • 7 bits for a unique number that is mapped to a local process ID
  • 1 bit for the send/receive polarity

Analysis

So in a modern context, by this definition, a socket would be something like the combination of an IP address and a port—though a modern port is full-duplex, whereas a socket is half-duplex, requiring an even/odd socket pair for both sending and receiving. (So like, we use port 80 for http traffic by convention, but this specification would mean using port 80 for receiving http traffic and port 81 for sending http traffic.)

Apportioning 8 bits for host server identification in a socket allows for only 256 hosts, which probably seems like a lot in May 1971 but within a few years will be woefully insufficient.

I think it's funny and cute that Winett signed his cover page with not just the title, his name, and affiliation, but also the machine the RFC was prepared on, an IBM 360/67. This is kind of like “Sent from my iPhone” at the bottom of an email.

Further reading

There's an excellent 2015 paper by Bradley Fidler and Amelia Acker (available free online) that goes into the history of sockets on the ARPANET and proposes that sockets are both a kind of infrastructure and metadata.

How to follow this blog

You can subscribe to this blog's RSS feed or if you're on a federated ActivityPub social network like Mastodon or Pleroma you can search for the user “@365-rfcs@write.as” and follow it there.

About me

I'm Darius Kazemi. I'm an independent technologist and artist. I do a lot of work on the decentralized web with both ActivityPub and the Dat Project. You can support my work via my Patreon.

Enter your email to subscribe to updates.