This note describes my knowledge of the history of electronic mail and instant messaging.
(I don't really like to use the term "e-mail" or "email." I usually just call it "mail." The use of electrons for mail may someday become quaint, replaced by photons or quarks; should we prepare to speak of "p-mail" or "q-mail"?)
The Compatible Time-Sharing System (CTSS) was begun at MIT in 1961. It allowed multiple users to log into the the 7094 from remote dial-up terminals, and to store files online on disk. This new ability encouraged users to share information in new ways. When CTSS users wanted to pass messages to each other, they sometimes created files with names like TO TOM and put them in "common file" directories, e.g. M1416 CMFL03. The recipient could log into CTSS later, from any terminal, and look for the file, and print it out if it was there.
The CTSS MAIL command was proposed in an undated Programming Staff Note 49 by Louis Pouzin, Glenda Schroeder, and Pat Crisman. These folks were working on the design of a new, improved file system for CTSS with many additional features. Numerical sequence places the note in either Dec 64 or Jan 65. PSN 49 proposed a facility for the system operators so they could inform users when lost files were retrieved from tape, by sending a message to a file in their directory.
I was a new member of the programming staff at the time, and read the PSN document about the proposed CTSS MAIL command, and asked "where is it?" and was told there was nobody available to write it. My colleague Noel Morris and I wrote a version of MAIL for CTSS in the summer of 1965. Noel was the one who saw how to use the features of the new CTSS file system to send the messages, and I wrote the actual code that interfaced with the user.
My design contribution to electronic mail was that the original PSN described a limited facility for the CTSS machine operators to notify users when requests to retrieve lost files were completed. I argued successfully for a general facility that let any user send text messages to any other, with any content, instead of a special-purpose command controlled from the 7094 console switches.
MAIL was a privileged command, that could do things normal user programs could not: it used the call (shown in MAD)
ATTACH.(PROB, PROG)
to switch to the recipient's file directory, and then added the message to the user's mailbox file on disk.
The CTSS MAIL command took pairs of arguments, the problem and programmer numbers of the recipients:
MAIL M1416 2962
would start sending a message to me. You had to know the problem and programmer numbers for the recipients.
You could send mail to everybody on your project by typing
MAIL M1416 *
You couldn't send mail to * * (that is, all users on all projects) unless your programmer number or problem number was canned into the MAIL program. Dick Mills's (assistant director, Project MAC), Bill Bierstadt's (system administrator, MIT Comp Center), and my programmer numbers were baked into the code. We, and any user on the problem number M1416, used for CTSS system programming, could send messages to all users.
The MAIL command created or appended to a file called MAIL BOX in the recipient's home directory. Privileged users could send URGENT MAIL instead, and could send mail even if the user's disk quota was exhausted. The LOGIN command was modified to print
YOU HAVE MAIL BOX
or
YOU HAVE URGENT MAIL
at login if these files existed and had nonzero length.
I went to a lot of trouble to insert new mail at the top of the file, so that the most recent message was first. (I regretted this after some experience, and when I wrote the initial unsecure Multics mail command, I just appended new messages to the bottom.)
Since it uses the ATTACH. call, I believe MAIL could not have been implemented until after the CTSS New File System, which was put up for users on 8/9/65.
The listings for the source of CTSS are online in
Paul Pierce's Collection. The source of MAIL is the first file in file COM5 on tape S1. Authors are not listed but the code is recognizably mine, by comments, style, and indentation.
Brad Templeton wrote
a nice article on the history of spam on the occasion of the 25th anniversary of the DEC salesman ARPANet spam.
There was an earlier mass electronic mail message sent to a large community of unwilling readers [my definition of spam] that predates the 1978 DEC spam. This message was sent using CTSS MAIL about 1971, at a time of campus unrest and anti-war rallies.
By the start of the 70s, there were over a thousand users of MIT's CTSS system, using the system by dial-up from the MIT campus and from other, mostly academic, locations. They used mail to coordinate, share information on all kinds of topics, etc, just as now. At that time, I led the system programming group for some of MIT's services including CTSS, and I was mighty displeased one day, probably about 1971, to discover that one of my team had abused his privilege to send a long anti-war message to every user of CTSS that began
THERE IS NO WAY TO PEACE. PEACE IS THE WAY.
I pointed out to him that this was inappropriate and possibly unwelcome, and he said, "but this is important!"
One interesting point is that Noel and I had foreseen the possibility of inappropriate mass mailing in the original MAIL command, and put in code to prevent it. Then, as now, anti-spam measures were not always effective, and then, as now, the spammer thought that his behavior shouldn't be subject to the rules.
(This story was in
Wired Magazine in April 1998. The author got my name wrong and thought that the story had something to do with mailing lists. The programmer who sent the message, and Noel, are both gone.)
Now we all have to filter spam. I wrote up how I deal with over fifteen thousand spam messages a day.
There was a lot of nervousness at the time about ticking off the US Post Office. Calling our facility MAIL was thought by some to be a Bad Idea, because they feared the Post Office would require the destruction of a first class stamp for each message sent. If you put a personal note in a parcel, the rule then was that you were supposed to cancel and attach first class postage, because the US Post Office had a monopoly on mail transmission.
We cautiously tried to find out who to ask. We didn't want to ask any low-level people who could only say "no." Finally an MIT professor met someone fairly high up in the Postal Service, who said forget it, don't worry.
Noel and I also wrote a tool for CTSS called . SAVED (dot saved), inspired by the design for the Multics shell, during 1965 that provided, among other features, a user interface that allowed users to do "instant messaging." There were entry points to the CTSS supervisor that supported such messaging (written by Bob Fenichel) but no user-level way to use them: our program provided a user interface to Bob's code that allowed users to send lines of text to other logged-in users, and managed deferring and allowing communication so that program output would not be interrupted by messages. Noel did most of the programming on this feature, all in FAP. Multics was still in the design phase then, so . SAVED was an example of a successor system influencing its predecessor.
I think a hack was also added to to . SAVED to announce mail if it arrived while you were logged in, by checking the length of MAIL BOX after every command.
The Multics and Unix mail commands share the property that mail reads mail, while mail someaddress puts you into input mode and then sends it. This non-intuitive interface is my fault. I regret it now.
I am informed that SDC's Q32 operating system had both MAIL and inter-user messages (DIAL facility) before the fall of 1965. We probably knew about this; the timesharing world was very small in those days, and system developers knew each other and borrowed ideas freely. (Remember that in those days, you couldn't patent software.)
BBN was working on a project named "Mercury" in 1965 which was described as "electronic mail." We knew that it existed but nothing about its features or audience.
Tom Watson posted a message to alt.folklore.computers remarking that the SDS 940 had inter-user mail in the mid-60s.
This military messaging system was begun in 1962 (Philco-Ford was the contractor) and deployed starting in 1966. Its messages were something like electronic mail. SAGE may have had something similar.
The first Multics mail command was a direct re-implementation of CTSS MAIL, by me, in about 1969, because once again there was nobody available to do it right. At the time, we were under pressure to make Multics a complete replacement for CTSS, and one of the difficult features to replace was mail: Multics did not have the concept of a "privileged" command that could do things the user could not. Designs that used a daemon process to write the user's mailbox were complex and would increase load on an already loaded system. The only design I could find was one that depended on the good behavior of the users.
Original Multics mail was insecure, forgeable and trashable, since it simply opened the user's mailbox as a shared memory segment and added the message to the bottom. There was a lock word at the first location of the mailbox, which was stored into with the STAC (Store A Conditional) instruction to coordinate writers of the mailbox.
The user interface was quite similar to CTSS MAIL: the user typed
mail VanVleck.Multics
and the command, by convention, sent mail to the mailbox >user_dir_dir>Multics>VanVleck. Once again, you had to know the user's registered name and project in order to send mail.
The Multics mail facility was reimplemented to use message segments in ring 1 sometime in the early 70s. This made the mail secure, by moving the mailbox segment into an inner protection ring. The inner-ring program coordinated access to the mailbox, preventing destruction and overwriting, and applied extended access control to the mailbox: message segment access permissions were adroswu, for Add, Delete, Read, Own, Status, Wakeup, and Urgent. The extended permission flags allowed us to specify that a mail sender could add a message to a mailbox segment but not read its contents, for example.
Bob Frankston wrote the send_message and allied commands for Multics about 1970, to provide Multics with instant messaging similar to that in CTSS. The accept_messages command established an event-call channel in the user's process and wrote its ID into a shareable segment in the user's home directory. Then typing
send_message VanVleck.Multics Want to go to the F&T?
would place the message in the shared segment and send a wakeup. The process that had accepted messages would execute the event-call channel's handler, type out the message, and remove it. Once again, these messages were forgeable and trashable.
With Bob's permission, I adapted his code into a set of standard system commands and a subroutine interface for message sending when I was making improvements to the I/O daemon in the early 70s. When you printed a file on Multics, the print daemon could be asked to send you an instant message when the job printed, with the physical printer and the print job sequence number. This message helped you track down missing output and saved trips to the printer looking for output that hadn't been printed yet. My version of the accept_messages command allowed the user to specify a command to be executed on each arriving message: some users used this to silently save the print daemon messages in a file, while printing out all other messages.
The messaging facility's internals were also re-written about 1974 to use message segments, and integrated with the mail facility. The Wakeup and Urgent extended access control permissions allowed each user to specify which other users could cause an interrupt.
In the 1970s, Multics was used to create an extremely useful on-line meeting facility, which was used as another means of electronic communication. USGS employee Pat Doherty wrote continuum, a bulletin board program that supported threaded discussions on multiple topics, like the later USENET. Continuum was rewritten and hosted on the Honeywell Phoenix Multics machine to coordinate benchmarks, and then became a tool for developers to discuss proposed software changes. When continuum was made part of the Multics product in the 1980s, it was renamed forum. Forum was used by other Multics sites for online discussions: one extensive use was by the US National Security Agency to coordinate discussions of security certification by the users of the DOCKMASTER system. Noah Davids wrote a paper in 1983 describing the features and use of forum.
J.C.R. Licklider mentioned inter-computer mail to me in a conversation about 1968, when he asked me if I was interested in a project he had in mind, "to connect all the ARPA-funded machines together, and see what they said to each other." He was recruiting folks for what became the Project MAC networking group. By that time, many time-sharing systems had some kind of internal mail. Discussion of linking the mail systems on various computers was one of the earliest applications proposed for the ARPANet.
Larry Roberts supposedly wrote a TECO macro that would send mail messages across the prototype ARPANet in 1969, before the NCP and logger protocols existed.
A series of ARPANet RFCs discuss the "Mail Box Protocol," which was a way of sending messages to an ARPANet host preceded by a user ID. What the site did with such mail afterward was its problem. The first was RFC 196, "Mail Box Protocol," by R. W. Watson, dated Jul-20-1971. It is not clear this protocol was ever implemented.
Multics was connected to the ARPANet in October 1971, and a method of sending mail to other machines on the net and receiving mail from them was done in early 1972 by the MAC networking group, led by Mike Padlipsky; see his
"And They Argued All Night...", and RFC 491. Because the @ was a line kill character in Multics, sending Multics mail to other hosts used the control argument -at instead.
in March, 1972, Ray Tomlinson of BBN wrote the simple mail programs SNDMSG and READMAIL, according to Larry Roberts's
Internet Chronology. It doesn't say what machine these programs ran on: probably TENEX. Ray is famous for "inventing electronic mail." In fact,
Ray's achievement was to choose the @ sign to separate username from host name in mail addresses; electronic mail had existed for years when he made his invention.
RFC 385 "Comments on the File Transfer Protocol," by Abhay Bhushan of the MAC networking group, dated Aug-18-1972, introduced the MLFL and MAIL commands to FTP, as a way of sending mail. Several further RFCs discussed variations on the idea of sending mail inside FTP. A meeting in Feb 1973 agreed on the use of the @ sign in the proposed FTP TO command so that address had the format user@host, as documented in RFC 469. RFC 498 mentions that the TENEX SNDMSG command could send mail to users at remote hosts using the user@host syntax without requiring an FTP login; I guess this was Ray Tomlinson's code. In November 1975, Jon Postel wrote RFC 706, "On the junk mail problem," suggesting that the problem of junk electronic mail had been at least contemplated, if not experienced. RFC 772, "Mail Transfer Protocol," by S. Sluizer and J. Postel, dated Sep-01-1980, inaugurated a series of RFCs which described the features of the Internet mail protocols, leading eventually to the SMTP protocol used for mail today.
You may also be interested in my note on The Risks of Electronic Communication.
Peter Salus interviewed me on this subject in 1998 for the Matrix News.
Posted 01 Feb 2001
updated 06 Oct 2002,
30 Apr 2003,
29 Oct 2003,
10 Sep 2004
Copyright (c) 2001, 2002, 2003, 2004 by Tom Van Vleck