365 RFCs

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

by Darius Kazemi, March 8 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.

Wildly enthusiastic

RFC-67 is titled “Proposed Change to Host/IMP Spec to Eliminate Marking” by William Crowther of BBN. It's undated but since it refers to Dave Walden leaving BBN for Norway, and judging from its number in the series, it is probably from August of 1970.

The technical content

Crowther backs his former coworker and collaborator Walden's suggestion to break messages in two and have a first message with leader data and a second message containing the actual content payload.

We can see no disadvantages to this scheme, and a sampling of Host reactions range from neutral to wildly enthusiastic.

I hope there was fist-pumping or screaming or something.

Crowther says that because the response was so good, the IMP team and BBN plans to implement this solution, and they will give Host sites a weeks' notice of the new solution with the specifications necessary to modify their network control programs to be compatible.

Analysis

First, I think this is a masterfully written little paragraph:

We can see no disadvantages to this scheme, and a sampling of Host reactions range from neutral to wildly enthusiastic. Therefore, we tentatively plan to implement this change. We recognize that this change will involve Host program changes, and that the new release must be scheduled to coincide with those changes. We propose providing modified Host spec text along with a one week notice of the new release.

Understanding without being apologetic, but also taking action and not dithering. This is, essentially, a unilateral statement that they are going to implement something that will change the network in big and small ways for everyone.

Also worth noting that this is kind of a response to Walden's sentiment in RFC-65 that he feels bad to make a suggestion that would foist extra work on his former BBN colleagues. This is Crowther saying, to my mind, “Don't worry about it, it's a great idea and we are happy to do the work.”

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 a Mozilla Fellow and I do a lot of work on the decentralized web with both ActivityPub and the Dat Project.

by Darius Kazemi, March 7 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.

Levels

RFC-66 is titled “3rd Level Ideas and other Noises” and is authored by Steve Crocker on August 26th, 1970.

The technical content

This RFC is the result of a meeting between Crocker and unnamed representatives from BBN and MIT. The meeting was held a couple weeks before publication of this RFC, on August 12th 1970.

The bulk of the (short) RFC is about a “third level” protocol, essentially detailing what the rules are for a process/socket on one computer to connect to a process/socket on another computer. A detailed sketch is included of the data that eventually must be send back and forth between the sending Host and the receiving Host via their Network Control Programs. (Recall that these programs will be different on every Host so it's important that when the time comes to communicate on the network they speak the same language.)

Crocker and BBN folks agreed that 7-bit ASCII would be used across the network, with the high bit set to 1. This is also what the IMP uses so I think it means that the IMP will need to do minimal processing when it comes to character coding.

There is also the question of a “break” or “interrupt” signal. A lot of terminals have a special character for this built in, in which case that will be used. In the case of those systems where a break is 250 milliseconds of silence on the line (which blew me away when I heard about it), they can send a special INR interrupt control signal.

Analysis

“Third level” speaks to a concept of “levels” that has appeared a few times in these RFCs. In RFC-57 the “second level protocol” is implied to be the Host-Host protocol. It seems here that “third level” refers to abstractions on top of the Host-Host protocol, in this instance a protocol for connecting two sockets (rather than connecting the NCPs themselves). My assumption is the “first level” would be the internal protocol for the IMPs to talk to each other.

These are conceptually the same idea as the more modern concept of OSI network layers which is sometimes taught in computer science schools.

I spoke with Steve Crocker about this via email and he was very generous in his response, which boils down to: yes, he was thinking about these protocols in terms of levels/layers of abstraction where some protocols would depend on others. That said, in practice these levels tend to be relatively porous and almost fractal, with levels inserted between levels, and “individual” levels consisting of multiple levels themselves.

Further reading

For contemporary reading on their thinking about protocol levels, Crocker, Postel, Heafner, and Metcalfe authored a 1972 Spring Joint Computer Conference paper called Function-oriented protocols for the ARPA Computer Network. It's worth a read, or at least a skim for the diagrams!

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 a Mozilla Fellow and I do a lot of work on the decentralized web with both ActivityPub and the Dat Project.

by Darius Kazemi, Mar 6 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 marking

RFC-65 is titled “Comments on Host-Host Protocol Document No. 1 (S. Crocker – 8/3/70)”, dated August 29th, 1970, and is authored by Dave Walden, formerly of BBN, very recently of A/S Norsk Data-Elektonikk.

The technical content

This document is a list of suggestions for the Host-Host protocol proposal.

The first is to get rid of marking entirely and instead break every message sent into two messages: the first containing the leader (header) and metadata, and the second containing the actual content of the message. Because the content would be contained in its own sub-message, every computer no matter what its architecture would know that the content starts on the second message at position 0. “Thus, no more hunting for the beginning of the data is necessary.”

Next the author states there should be a control socket rather than a control link. No reason to hard-code a link for a special purpose when a more flexible socket could be used.

Next Walden says that “assigning sockets permanently to certain network resources should be encouraged and a directory of the socket/resource associations should be available somewhere in the network, perhaps in physical book form at each site.” This is essentially what we do today when we agree to things like “websites over HTTP are assumed to use port 80”.

There are a few more comments I won't go into detail on, followed by a comment that the error message system as laid out in the current proposal is perhaps over complicated and not as useful as people might think it is. An argument is made for a simpler error handling system.

Finally, Walden notes with some regret that he is now making suggestions that his former coworkers at BBN would need to do extra work to implement on the IMP. It's one thing to do the work yourself, it's another to ask that others do the work for you.

Analysis

The most important bit of this RFC, to me, is the suggestion for messages to be broken into two. This multiple message model will eventually be evident in the design of TCP/IP.

There is an interesting comment about how links don't really matter to the Host-Host interface; they are really more of an internal IMP thing, useful to Hosts only a shorthand “so that socket numbers don't have to be included in all messages and to simplify table look-ups”. It seems to me that where the fundamental transmission identifier of an IMP is a link, the fundamental transmission identifier of a Host is a socket.

Further reading

You can read about Walden's move to Norway in section 9 of his brief memoir. It was a short-lived stay of about a year, after which he went back to work at BBN.

Socket numbers did eventually get standardized and assigned to specific purposes. The first such listing is from 1972 in RFC-433.

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 a Mozilla Fellow and I do a lot of work on the decentralized web with both ActivityPub and the Dat Project.

by Darius Kazemi, Mar 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.

Marking considered harmful

RFC-64 is titled “Getting Rid of Marking”, dated July 1970 and is authored by Michel Elie of UCLA.

The technical content

This document is about how something called “marking” is undesirable and needs to be eliminated from the protocol. So, a refresher: what is marking?

Marking is a solution proposed in RFC-33 by Postel and Crocker. It was not invented by them, but they proposed its use to solve a problem. Quoting RFC-33, that problem is when

the sending Host wants to send an irregular length message and its hardware is only capable of sending word-multiple messages, some additional convention is needed.

Maybe a little explanation is in order. A “word” is the smallest length of data can that be passed around by a given computer. For example, an 8-bit computer sends around data in 8-bit bundles called “words” (that's 8 ones and zeroes), and a 16-bit computer does the same but in 16-bit bundles of words. If an 8 bit computer wanted to store or send the binary message 11, which is two bits long, it would need to store or send something like 00000011. So an “irregular length message” is one that doesn't exactly fit as an even multiple of whatever size words a computer is using. Back in the ARPANET era there were 8-bit, 12-bit, 16-bit, and 32-bit computers. I'm sure there were other computers that used more esoteric word lengths too. But anyway, if we wanted to send a 17-bit message and we were on a 16-bit computer, we would pad out the message until it was 32 bits long, because that is a multiple of 16 that we can work with.

Side note: you might say, “What, a 32-bit computer back in that day?” Well, remember these were not mass produced consumer microcomputers. They were expensive mainframes! The MIT Whirlwind, which fully launched in 1951, was a 16-bit computer. The SDS Sigma 7 was a 32-bit computer launched in 1966. So while 16-bit computing didn't reach mass markets until the early 1980s, and 32-bit computing later than that, it was always available to anyone who wanted to shell out a few million dollars.

Marking is also mentioned in RFC-7 (though not related this this particular protocol), RFC-48, and RFC-54.

Anyway, the general proposal was that the sending Host would apply marking, which is a bunch of 0s followed by a 1 until the message text began on a word boundary, and the IMP would apply padding, which is a 1 followed by a bunch of 0s so that the ultimate length of the entire message would end on a word boundary.

All of this is just to make it so that the receiving machine knows the where in the data a message starts, where it ends, and how to quickly and efficiently get there.

One problem that this RFC brings up is when the sending Host has a different word length than the receiving Host. The RFC author shows a simple case where you could easily end up sending “112 bits to carry 8 bits of information”, which is very inefficient and costly in terms of time to transmit.

The solution proposed by Elie in this RFC involves embedding counters in the sending/receiving process and sending a “word complete” message on counter overflow. This is rather complex and I'm not even sure I fully understand it.

Analysis

There is more to come on marking. Several more RFCs will address this problem. It's interesting to me how a relatively minor feature of the protocol is taking up most of the discussion time in the summer of 1970, at least in the RFC series.

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 a Mozilla Fellow and I do a lot of work on the decentralized web with both ActivityPub and the Dat Project.

by Darius Kazemi, Mar 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.

Belated

RFC-63 is titled “Belated Network Meeting Report”, authored July 31st, 1970 by Vint Cerf of UCLA.

The technical content

This RFC is indeed belated! It's meeting minutes for a meeting that happened almost 3 months prior on May 8th, 1970 at Lincoln Laboratory. This is the meeting to discuss Lincoln's proposal for a Local Interaction Language that was proposed back in RFC-43.

The document itself is a short summary so I will summarize that summary by saying: they talked about some things and came to some agreements related to the message data type system in RFC-42. My complaint about that RFC was it was a bit unclear and unspecific. This meeting ironed out a few specifics and made it more implementable.

Analysis

There is barely any mention of Local Interaction Language in this document other than to mention that it was discussed. According to RFC-43, learning about LIL was the purpose of this meeting. So now I'm going to put on my highly opinionated and possibly projecting personal experience hat. I have been to technical meetings where the pretext is we are going to discuss some technology that nobody really understands or particularly cares to learn about. You might be open to hearing about the tech but the real reason you go is that having a bunch of your colleagues in the same room is useful. And boy there were lots of east coast and west coast ARPANET implementors (or their representatives) in the room for this meeting. Twenty-seven by my count. The tone of this RFC suggests that people politely listened to the LIL presentation and then there was “considerable discussion” of message data types for the remainder of the meeting.

Further reading

The author notes that the full details of the Local Interaction Language are available in a Lincoln Lab technical report titled “Graphics”, which you can read here. As far as I can tell it was never implemented.

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 a Mozilla Fellow and I do a lot of work on the decentralized web with both ActivityPub and the Dat Project.

by Darius Kazemi, Mar 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.

A revision of another shot at interprocess communication

RFC-62 is titled “A System for Interprocess Communication in a Resource Sharing Computer Network”, authored August 3rd, 1970 by Dave Walden of BBN.

The technical content

This RFC is a revision of RFC-61. It adds:

  • a more “narrative” introduction
  • a conclusion section
  • several new technical questions and possible answers that arose since the previous revision
    • how to match SEND and RECEIVE buffers for size
    • how to maintain unique numbers across a geographically diverse network
    • how to maintain a high bandwidth connection between remote processes

And is generally edited for clarity and layout.

The paper is overall very similar so I won't go into detail. (Also: I am tired. The last ten RFCs have been very long and very technical.)

Further reading

As I mentioned in my RFC-61 post, these drafts form the basis of a paper that would eventually be published in April 1972 in Communications of the ACM and is fairly heavily cited by other papers. The full paper is hosted by Walden at his web 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 a Mozilla Fellow and I do a lot of work on the decentralized web with both ActivityPub and the Dat Project.

by Darius Kazemi, Mar 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.

Another shot at interprocess communication

RFC-61 is titled “A Note on Interprocess Communication in a Resource Sharing Computer Network”, authored July 17th, 1970 by Dave Walden of BBN.

After a long career in computing and management, Walden has taken to researching various aspects of computing history. I have already written here about the history of BBN that he co-edited (I'm partway through and it's great). He contacted me early on in this project to offer valuable contextual information from his point of view as someone involved in the IMP/ARPANET project at BBN, for which I am grateful.

The technical content

This document is a draft of a study Walden is in the process of writing at BBN. The paper tackles “inter-process communication” on a network, which is the same thing that the host-host protocol and NCP combination proposed by Crocker et al had been attempting to solve. Specifically the study is trying to lay out a standard by which all computers on a network can invoke programs and move data around, rather than an ad-hoc system that would be different for every single pair of computers on the network. The ideas herein would never be fully implemented as they are laid out but certainly influenced the development of other such schemes.

The document makes reference to the host-host paper that Carr, Crocker, and Cerf proposed at the 1970 Spring Joint Computer Conference just a few months prior.

Here for the first time in an RFC we get a clear definition of “monitor” and “process” in their operating system context. In full:

The model time-sharing system has two pieces: the monitor and the processes. The monitor performs several functions, including switching control from process to process as appropriate (e.g., when a process has used “enough” time or when an interrupt occurs), managing core and the swapping medium [memory], controlling the passing of control from one process to another (i.e., protection mechanisms), creating processes, caring for sleeping processes, etc.

The processes perform most of the functions normally thought of as being supervisor functions in a time-sharing system (system processes) as well as the normal user functions (user processes). A typical system process is the disc handler or the file system. For efficiency reasons it may be useful to think of system processes as being locked in core.

A process can talk to the monitor and ask it to do the following things:

  • start another process
  • halt or pause the current process
  • send a message to another specific process
  • prepare to receive a message from another specific process
  • send a message to ANY process (so, broadcast, basically)
  • receive a message from ANY process (so, consume any incoming messages)
  • get a “unique” number from the monitor (presumably to uniquely identify messages being sent out)

The actual commands are a little more wonky than this. A SEND is actually a request to another process to “SEND something to me” so it operates logically backwards from how you might assume. But all the above functionality is there even if the grammar is weird.

The paper then lays out how this kind of communication could happen at a single physical computer. The examples are very clear.

The next section generalizes this communication to communications between a local host and a remote host (so, over the network).

I really like this image that Walden paints of what a networked computer might look like in an abstract sense:

Consider first a simple configuration of processes distributed around the points of a star. At each point of the star there is an autonomous time-sharing system. A rather large, smart computer system, called the Network Controller, exists at the center of the star. No processes can run in this center system, but rather it should be thought of as an extension of the monitor of each time-sharing system in the network.

So the computer has many processes on it, and every process talks to a special computer system (called the NCP in other RFCs), and that computer system really ought to be thought of as part of the core operating system itself. This Network Controller acts as a broker between all the processes on the computer and the rest of the network. Walden makes the claim that

if the Network Controller is able to perform the operations SEND, RECEIVE, SEND FROM ANY, RECEIVE ANY, and UNIQUE and that if all of the monitors in all of the time-sharing systems in the network do not perform these operations themselves but rather ask the Network Controller to perform these operations for them, then we have solved the problem of interprocess communication between remote processes. We have no further change to make. [emphasis mine]

Next he says that somewhere on the computer is a table of unmatched SEND and RECEIVE requests (or RECEIVE ANY requests that haven't gotten anything yet). This table of unmatched pairs lets a computer listen for outstanding messages it hasn't yet received.

The last big piece is that the UNIQUE number function must provide numbers that are unique across the network. This is handled by giving out unique blocks of numbers to each computer to parcel out on their end as needed.

Because this is a BBN paper, and BBN designed and implemented the IMP (recall: basically a proto-router), the IMP is considered of great importance. The IMP is hardly even mentioned in RFCs by the various west coast entities. It's fully “black boxed” to everyone except for the people who invented it. But BBN knows what is in the black box and thus has some things to say about it.

In the scheme put forward by this RFC, in the ARPANET context, the IMP itself will host the NCP rather than the host. This is a new proposal; prior to this RFC the idea was that the Host would be the sole arbiter of interprocess communications. It seems to me that main reason for the IMP role in this is so that there is some central source of unique numbers that is still “neutral”. That way it's not just some Host machine at UCLA doling out number ranges to the other computers but a more neutral party in the network. The other reason for putting the NCP software on the IMP is that the IMP is known hardware and software. You only need to write the NCP once for the IMP system. Since every host has the same type of IMP installed on site, you no longer have to write a new NCP for every new kind of computer you connect to the network.

Analysis

This paper is long but, in my opinion, well worth reading (or perhaps just read its final edition, linked in the “Further reading” section below). To me, this is by far the clearest elucidation in the RFC series to date of how processes can talk to each other over the network (and there have been many attempts!).

Here is a photo of a few pages of this RFC that I took at the Computer History Museum's warehouse.

Four handsomely typewritten pages fanned out on a desk.

You might not be impressed with what you see here but after combing through dozens and dozens of these documents, there is something uniquely beautiful about any BBN document I come across. For example, note that the headings are written in an entirely different type face from the body of the document (compare the “T” in “A MODEL FOR A TIME-SHARING” with the “T” that begins several body paragraphs). There is italicized and bolded text. You'll have to trust me on this but the physical paper quality is really nice. According to Walden himself in one of our email correspondences, BBN had an illustration department, an editor, and a secretary that did excellent work when it came to corporate document preparation and publication.

Further reading

This RFC is an early draft of a paper that would eventually be published in April 1972 in Communications of the ACM and is fairly heavily cited by other papers. The full paper is hosted by Walden at his web site.

Walden has a short memoir here.

Here is The Nucleus of a Multiprogramming System, the 1970 paper by Per Brinch Hansen cited in the RFC.

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 a Mozilla Fellow and I do a lot of work on the decentralized web with both ActivityPub and the Dat Project.

by Darius Kazemi, Mar 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.

A simpler NCP

RFC-60 is titled “A Simplified NCP Protocol”, authored July 13th, 1970 by Richard Kalin of MIT.

The technical content

This document proposes a simpler Network Control Program than the one laid out in RFC-55. The simplification mostly comes from a central premise: that we can assume that all ( or nearly all) communications will be bidirectional. The author points out that simple communication theory dictates that a useful communication will be a conversation between two entities, a feedback loop of sorts.

By assuming bidirectional communication, you essentially cut the complexity of the NCP in half. Much of the paper is proving this intuitive idea out, and provides a set of commands that can be implemented.

Interestingly, the assumption in this RFC is that larger foreign hosts will lie about the amount of storage they have in their buffers. What a host can (and I believe in the eyes of this author, pretty much should do) is say “I can get away with claiming X amount of storage because statistically speaking, nobody is every going to need all of that storage at once.”

An extreme analogy would be having a one-room hotel in a remote location and saying “my hotel can handle up to 365 guests” when really you mean 365 guests per year at a rate of one each day. If your hotel is remote enough that two guests will basically never need a room at the same time, you can make that claim and it'll never be a problem! (As I said, this is an extreme analogy.)

Unlike RFC-59, this document touches on the trade-offs between “coding simplicity” and technical performance.

Analysis

I like this author's approach to persuasion. They end the RFC with the following paragraph:

It is the hope of the author that the above protocol presents an attractive alternative to that proposed by RFC 54 and its additions. Although it appears at a late date, it should not be more than a minor jolt to implementation efforts. It is simple enough to be implemented quickly. If adopted, a majority of the present sites could be talking intelligently with one another by the end of the summer.

Basically: I'm sorry I'm late, I think this will be easy to program, and implementing it will result in us being where we all want very soon.

Further reading

A bit of an aside, but two incredibly important publications happened in 1948: Norbert Weiner's book Cybernetics, and Claude Shannon's paper “A Mathematical Theory of Communication”. The ideas in these books completely changed scientific thought. I mention them here because the casual claim in this RFC that “[a]ll communication requires a cyclical flow of information” is only possible in a post-Weiner and post-Shannon world.

Here's a brief biography of Weiner.

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 a Mozilla Fellow and I do a lot of work on the decentralized web with both ActivityPub and the Dat Project.

by Darius Kazemi, Feb 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.

The case for perfect

RFC-59 is another odd one. It's missing the standard RFC cover page and as such I had to poke around for its title, which is available on page 2 and beyond in the header. It's called “Flow Control – Fixed Versus Demand Allocation”. It is authored by Edwin W. Meyer of MIT's Project MAC and dated June 27th, 1970.

This RFC also features an erratum (correction). Errata are a formal aspect of the RFC series. Since an RFC, once submitted, can never be changed in place, instead corrections happen by appending errata, which are short notes that say, for example, “this section had a typo, it should read xyz instead of abc”. Here is the errata entry for this RFC. The errata entry corrects an incorrect reference to a different RFC number.

The technical content

This RFC is a strongly worded disagreement with the official host-host protocol offering by Crocker et al in RFC-54, particularly the section of that RFC on “Flow Control”.

They list a number of disadvantages with the RFC-54 flow control scheme, which I'll excerpt here verbatim:

(i)  chronic underutilization of resources,

(ii) highly restricted bandwidth,

(iii)considerable overhead under normal operation,

(iv) insufficient flexibility under conditions of increasing load,

(v)  it optimizes for the wrong set of conditions, and

(vi) the scheme breaks down because of message length indeterminacy.

They go on to describe these in detail, but the crux of the document is, the RFC-54 scheme has these six problems, they do their best to prove that the scheme has these problems (and convincingly, I think), and they implore the NWG to use a previously proposed flow control scheme instead.

But even though the technical details of this paper seem correct... well... I'll save it for the analysis section, which is where my opinions come in.

Analysis

Once again this seems like a battle of “good enough” versus “perfect”. In RFC-54, the authors state

[t]his new procedure has demonstrable limitations, but has the advantages that it is more cleanly implementable and will support initial network use.

Specifically, the authors of RFC-54 say “this isn't perfect but we can build it today and it will be fine for now.” The authors of this RFC disagree, opening with what they see as the six major defects of the RFC-54 scheme.

When the authors of this document lay the pros and cons of their scheme side by side with the pros and cons of the RFC-54 scheme, one thing remains curiously absent: ease of implementation, which was very specifically a key advantage laid out by the authors of RFC-54, in fact probably the key advantage.

To my eye, this document is either written in bad faith, or written by authors who are unable to see the social compromises necessary to get things working at all instead of working correctly. Now I might just be fully projecting here and saying this will probably get me some angry emails, but... this does seem like the kind of thing to expect from the Project MAC team, who gave us Multics, where to my knowledge, the abstract idea of technical correctness took precedence over concepts like ease of use.

Further reading

For you documentation and organization nerds, here's the 2008 proposal for how the RFC errata system works today.

Also for Latin nerds: I use “errata entry” instead of “erratum” most of the time because the convention of the RFC Editors is to avoid the Latin singular.

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 a Mozilla Fellow and I do a lot of work on the decentralized web with both ActivityPub and the Dat Project.

by Darius Kazemi, Feb 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.

A big box of paper

RFC-58 is titled “Logical Message Synchronization”, and authored by Thomas P. Skinner of MIT's Project MAC.

The technical content

This document is primarily an attempt to urge the NWG to settle an unsettled matter. The matter in question is that of physical versus logical message boundaries. I'm a bit out of my depth here but I think I understand the basics and will attempt to summarize.

A physical message is a certain number of bits of data. Imagine a piece of standard office printer paper that can only hold so many typewritten characters: that piece of paper is the physical message. The paper may contain dozens of sentences, or it may contain the word “hi”, but one piece of paper is still one piece of paper and is the same size as another piece of paper from the same box.

The logical message is the actual information that is being conveyed. So a large piece of paper (the physical message) may contain a very short message like “hi” (the logical message). Or on the other extreme, a single logical message may span multiple physical messages (imagine an entire novel delivered over multiple pieces of paper).

Continuing the paper metaphor: assume we've put a bunch of paper documents in a cardboard box and mailed them to our friend. It is easy for the friend to see the boundaries of a physical message. The boundary is just the pieces of paper themselves. But where do we draw boundaries of logical messages? In our paper example we'd need to agree on some kind of notice to the reader that you've reached the end of my message. Maybe we type “END OF MESSAGE” at the end of our document, or maybe we number our pages 1 of 3, 2 of 3, 3 of 3. Maybe in case the pages get mixed up in the box with other documents, we need to put a unique ID on our document so that I can tell my 1 of 3 from someone else's 1 of 3. And so on.

Ultimately these solutions are rather technical but they actually boil down to the same kinds of solutions you'd use in an office filing system, and I won't belabor them here. The important bit of this document is at the end:

I have not intended to suggest a solution to the problem, but merely bring it to light. If we want to restrict logical messages to begin on physical boundaries we must plan this early in the game. (It probably works out that way in most cases anyway.) Other schemes can be tried later. We must, however, face up to this problem fairly soon.

Mostly, Skinner just wants everyone to agree on a solution as soon as possible.

Analysis

I think Skinner is right and they need to agree ASAP on a solution. I think he is also right when he says

I can think of several solutions to the problem at the moment. None of them seems to be very good.

I don't think there will ever be a good solution to this kind of problem. Just good enough. And that's okay.

Further reading

I've linked it here before, but this is a good background on MIT's Project MAC, which is where the Multics operating system was initially created.

This is Thomas Skinner's website.

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 a Mozilla Fellow and I do a lot of work on the decentralized web with both ActivityPub and the Dat Project.

Enter your email to subscribe to updates.