by Darius Kazemi, Feb 11 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 proposal for typed messages

RFC-42 is authored by Enrico I. Ancona of MIT Lincoln Laboratory on March 31st, 1970. It's called “Message Data Types”.

The technical content

This document proposes that the first 8 bits of any “normal” message is reserved for a code that tells you what kind of message will follow. It proposes translation programs on the receiving and sending end of messages that add the data type to a message (on the sending end) and decode the data type (on the receiving end). This is a little bit like what MIME types do for HTTP messages today, so a web browser knows if it's dealing with text or an image or video et cetera.

Ancona provides a way for this system to be extensible, so that different HOST systems could make their own data types available to other HOSTs.

Specifically this proposal is framed in terms of a feared explosion of potentially conflicting technical conventions:

It is important that conventions regarding the contents of messages be set up early so that there will not be a large proliferation of such conventions between every pair of programs running on the network.


The document opens with a bit of art that, in my opinion, is far better in the original than in the normalized official ASCII art version. Here's a photo I took at the Computer History Museum's archives:

The front page of RFC-42 featuring a blob-like cloud illustration labeled "PROCESS".

Compare to the ASCII art version:

        Socket    Port
        |    |      |    ____________
        |    V      V   /            \
        V              /              \
            |=|    /==|                |
-------(+)->|Y|--><   |                |
            |=|    \==|                |
                      |    PROCESS     |
                      |                |
            |=|    /==|                |
-------(-)->|X|<--<   |                |
            |=|    \==|                |
                       \              /

You'll also note a transcription error in the diagram! The original “Socket” label is clearly pointing to the (+), with another arrow to its right that has been crossed out. In the transcribed official version, both arrows were left in, with nothing to indicate that the second arrow under “Socket” was crossed out.

In general I found this RFC a bit light on details and kind of hand-wavey, making promises for future compatibility that I can't really see evidence of in the proposal itself.

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.