Last december Matt brought up xmodem and recently I needed it for an almost identical use
case. Studied it a bit and in the context of Unix, it is an interesting piece of software
history.
Although xmodem originated on CP/M in 1977, it seems to have arrived on Unix soon
thereafter. The first Unix implementation seems to have gone by the name of “rbsb” and
must have originated when V7 was prevalent: it uses alarm() to simulate non-blocking I/O.
Over the course of the 80’s ymodem and zmodem were added and the package became lrzsz; the
source continued to have a very V7-ish feel to it at least to the early 90’s. In the
mid-90’s it was converted to ansi-C and had some other modernization, but it looks like it
would still have run on SysIII (apart from the ansi).The last update to the upstream
source package appears to be from 1998, i.e. 25 years ago.
It is still packaged today for FreeBSD and major Linux distros. On Unix it must be one the
oldest code bases still in regular use, with the 1980 source still recognizable in its
current incarnation. Any other contenders come to mind?
I had always associated x/y/zmodem with CP/M and MSDOS, not so much with Unix. Last
December Clem already pointed out that it was popular for file exchange in the Unix scene
as well, along with several other similar tools. Also, the ymodem approach to file
metadata is very unix oriented, suggesting it originated on Unix or at least that Unix
users were an important user demographic. Yet, I could find little trace of x/y/zmodem in
the TUHS Unix Tree. The search tool finds it in 2.11BSD, in Minix 1.5 and 2.0 and in V10.
Kermit is in those as well, and in 4.3BSD and 4.4BSD on top.
Maybe these programs were commonly pulled from a bulletin board and hence not on
distribution media. Not sure how that would be bootstrapped, although the 2.11BSD files
for x/y/zmodem include “minirb.c”, a 175 line implementation to receive files using the
ymodem protocol. It is possible that this was transferred as plain text as a first step,
or even retyped.
Any recollections?