[TUHS] mh/hm, mmh (was: fmt(1): history, POSIX, -t, -c)
clemc at ccc.com
Mon Jun 1 00:53:57 AEST 2020
On Sun, May 31, 2020 at 9:02 AM markus schnalke <meillo at marmaro.de> wrote:
> Would you be so kind to explain a bit about the hm version of MH.
I can try ...
At the time V6 (and later V7) had a program called /bin/mail. The
important thing about this program is that it was both a Mail Transport
(and delivery) Agent as well as a Mail User Interface. The original
version only delivered mail locally. When networking, like UUCP, was added
to UNIX, it was easy to build a scheme that could send a transfer a message
using UUCP and then fork /bin/mail on the proper system to deliver it.
IIRC it was in Seventh Edition that /bin/mail was extended to recognize
email addresses in the prefix form of: host!user, strip the first host!
part and pass it to uucp.
I never used it on anything like Spider, so I have not idea what it did
internally and in fact, the prefix address form could have predated UUCP.
We would need someone like Doug, Steve or Ken to tell us how email worked
host to host, pre-UUCP.
I believe it was Bruce Borden and team developed the original Rand Message
Handler or MH. I do not know who was the primary author, we need to ask
Bruce or one of the old Rand folks. MH ran on 6th edition when it was
first released to rest of the USENIX community (at least I never saw it on
V5, but it's possible it went back further). I just remember talking to
Bruce about it at any early USENIX.
MH used a new Mailbox (on-disk) scheme and formatted all messages in RFC733
form with addresses being flat an in the form: user at host. The new format,
used a line a control-As followed by a nl, before and after the message.
The headers of course where RFC733 (type: value with a trailing nl) and
were separated from the body of the message by a single nl. MH assumed a
traditional UNIX command line for the user interface and had a number of
programs that ran behind the scene for delivery. This is important
because the original ARPAnet NCP used FTP to do mail transfer. At least
one version could call the early ARPAnet subsystem to perform host to host
communications. The key point is that MH separated the MTA and MUI.
A number of us ran MH at different places. I don't remember if it was on a
USENIX tape or I had sent Bruce a tape @ Rand when I got a copy in the late
1970's (77-79 timeframe, I've forgotten). I'm pretty sure Goble, as did
the Purdue crew ran it, as did Holmgrem, Greg Chesson at al, @ UofI and I
would not surprised if it was the mailer at Harvard, given the Harvard/Rand
connection in those days.
By the time of Seventh Edition of UNIX, the Mail Transport Agent (MTA) that
was part of the MH subsystem, could recognize ArpaNET address postfix and
had a hack in it, that allowed the 'user' part of the address to include
UUCP addresses and /bin/mail replacement knew to work like the AT&T mailer
and pass it off to UUCP. So, at that point, life was good for those of us
in strickly ARPA and/or UUCP land.
BTW: At some point, the BBN TCP code was releases and a separate SMTPD was
included in the release. I don't remember if it was the Rand folks or
someone else, but at some point, the MH delivery agent was updated to call
it or be called by it. Similarly, by the late 1970s, when Bruce, Greg
Shaw, and Bob Metcalfe formed 3Com; Bruce and Greg brought MH with them and
added an SMTPD that they wrote for their commercial product, UNET. This
was the smtpd, I ran on the Teklabs machine before I went off to UCB.
Meanwhile, as Mary Ann and I noted in earlier messages, Kurt Shoen's wrote
a different MTA called Mail(1ucb). Unlike MH, Kurt continues to support
the original UNIX mailbox format (later named 'mbox' format). The header
lines were in a specific UNIX style prose starting with the ACSII 'From'
and there are no special characters to demark the messages in the format,
so recovery can be fraught with error, there are the famous From-line
munging issues etc. (lots of details in other places start with
At some point in time, UCB built the 'Berk-net' (whose original code was
written by ABC/Google's Eric Schmidt). BTW: Eric would have seen the
Spider Network in his summers at BTL. The key thing with Berknet was
cheap. It ran over 3 wire RS-232C between hosts at 9600 baud. Like UUCP
was used to transfer files and email. Like UUCP it used a
pre-fix addressing form: host:user ; but like RFC733 and unlike UUCP was
Where Mary Ann and I differ in our memories is who wrote the original
version of UCB's delivermail (8ucb) program. We both agree that it is
possible it was Eric Schmidt, as the switch to using delivermail(8ucb) was
were Berknet was spliced into the email namespace. I had thought Kurt
wrote it, Mary Ann thought it was Eric Allman. We agree Eric Allman was
hacking on it for the Ing70. For this response, it doesn't really matter
other than to try to get the history right, because it does not matter for
the Rand Mail subsystem.
Around, now I arrive at UCB. I was not the only person that had used MH,
but I had the advantage of having 3 Vaxen 780 in the CAD lab. The key
change we made at that point was to stop using the Rand MTA and make it use
delivermail. There was hackery to allow the shared mbox to say, but in
each user directory it stored the messages separately, MH style so the MH
'ui' suite of tools 'just worked.' [There were a number of arguments at
the time. I remember having one with Sam. He hated MH because 'of all the
small files and it chewed up inodes].
Anyway around this time, the curses library was created by Ken Arnold
(originally to support Rogue) by pulling the screen code out of vi and
using Mary Ann's termcap stuff. A couple of us in the USENIX community
started playing with screen-based front ends to MH, including the folks at
Rand. Numerous messages were exchanged, and a collaboration started (Rand
team should get 99% percent of the work, I knew how to make curses go).
The comment in the main code was, 'Well it sure isn't MH' -- so it was
called HM. I later brought it Masscomp, and it was the start of their
The key with HM, is that it uses the MH backend for all the real work. It
would fork scan, but save the output in a text file that could be
manipulated with the arrow keys. The user interface is not unlike Gmail.
I only stopped running HM when I finally switched to Gmail a few years ago.
In fact, when I was a DEC, the precursor to Gmail, was called
Pachyderm which used the Altavista search. I glued MH to Pachyderm for a
short period. I even ported them both to FreeBSD to run at home in the
mid-1990s. Then I left DEC, the authors of Pachyderm headed for Google,
*etc*... I got a chance to be an early Gmail/Google Apps tester for ccc.com
and I have not switched back since.
FWIW: It's been long enough, that the sources are no longer easy to find.
It's all very incestuous. We all have seen other ideas and good ideas
seem to have a way of reappearing in different places.
Note the part of the story I left out was when Rand MH spun out to one of
the other Universities, UCI I think. I was never much involved with that
team, so I can not tell you much about it and their code base.
-------------- next part --------------
An HTML attachment was scrubbed...
More information about the TUHS