Forgotten Internet: UUCP

What’s Forgotten Internet? It is the story of parts of the Internet — or Internet precursors — that you might have forgotten about or maybe you missed out on them. This time, we’re looking at Unix-to-Unix Copy, more commonly called UUCP. Developed in the late 1970s, UUCP was a solution for sending messages between systems that were not always connected together. It could also allow remote users to execute commands. By 1979, it was part of the 7th Edition of Unix.

Ken Thompson and Dennis Ritchie may have used UUCP on a PDP-11 like this one. (Photo via Computer History Museum/Gwen Bell)

Operation was simple. Each computer in a UUCP network had a list of neighbor systems. Don’t forget, they weren’t connected, so instead of an IP address, each system had the other’s phone number to connect to a dial up modem. You also needed a login name and password. Almost certainly, by the way, those modems operated at 300 baud or less.

If a computer could dial out, when someone wanted to send something or do a remote execution, the UUCP system would call a neighboring computer. However, some systems couldn’t dial out, so it was also possible for a neighbor to call in and poll to see if there was anything you needed to do. Files would go from one system to another using a variety of protocols.

Under the Hood

UUCP was popular enough to have books written about it.

While UUCP was the name of the system (and UUCPNET the network of all computers reachable by UUCP), there were actually a few programs only one of which was named uucp. That program was the user’s interface to the system.

Other programs included uux for remote command execution, uucico which was the backend, and uustat which provided status information. Every hear of uuencode and uudecode? Those started here and were meant to convert binary to text and vice-versa, since you couldn’t be sure all the modems and computers could handle 8-bit data.

When uucico answers a call, it sends a Control+P along with a string indicating its host name. The caller responds with its own Control+P and host name, along with some options. If the caller isn’t recognized, the computer will hang up.

File Transfer

If the call continues, the caller can either send a file, request a file, send commands to execute, or ask for a hangup. Sending and receiving files or commands use g-protocol. Each packet was a Control+P, a number indicating packet size or type, a 16-bit checksum, the datatype, and a check digit for the header (the checksum didn’t cover the header).

The packet size was 1 to 8, corresponding to 32-4096 bytes. In practice, many small systems would only allow a value of 2, indicating 64 bytes. The size could also be 9 to indicate a control packet. There’s a lot of detail, but that’s the gist of it.

The g-protocol uses a sliding window system, which was innovative for its time and helpful, considering that systems often had long latencies between each other. In theory, a sender could have up to seven packets outstanding while sending data. In practice, many systems were fixed at a window size of three, which was not optimal for performance.

This led to the G-protocol (uppercase), which always used 4K packets with a window of three, and some implementations could do even better.

From the user’s perspective, you simply used the uucp command like the cp command but with a host name and exclamation point:

uucp enterprise!/usr/share/alist.txt alist.txt   # copy alist.txt here from enterprise
uucp request.txt starbase12!/usr/incoming/requests   # copy request.txt to remote system starbase12.

You might also use uux to run a remote command and send it back to you. You could run local commands on remote files or vice versa using a similar syntax where ! is the local machine and kelvin! is a computer named kelvin that UUCP knows about.

Reading the Mail

An important use of UUCP was early e-mail. Mail programs would cooperate with UUCP. UUCP E-mail addresses contain exclamation points (bangs) to identify the whole path to your machine. So, if you lived in New York and wanted to send an e-mail to Hackaday in California, it might require this address: NY4!east.node!center!west.node!CA8!Hackaday!alwilliams.

A USENET post from 2004 (GPL via Wikipedia)

It was common, then, to provide your e-mail address relative to some “well-known” node like “…!west.node!CA8!Hackaday!alwilliams.” It was up to the sender to fill in the first part. Your mail would travel through each computer. There could easily be more than one path to …!Hackaday!alwilliams even from the same starting point and there would almost certainly be different paths from different starting hosts.

Usenet was also distributed this same way. Usenet deserves its own Forgotten Internet installment, but it was an early form of what we think of today as discussion groups.

Keep in mind that in both cases, UUCP didn’t know anything about machines more than one hop away. It was up to the mail program to understand that it was running on west.node and that it should then dial up the CA8 computer and transmit the message to it.

Versions

[Mike Lesk] at Bell Labs originally developed the code, and by 1978, there was a UUCP network of 82 Unix machines internal to Bell Labs. Around 1983, there was an AT&T rewrite known as HoneyDanBer UUCP, referencing the authors’ names, that fixed some bugs.

Then [Ian Lance Taylor] wrote a GPL version in 1991, often known as Taylor UUCP. It was flexible and could communicate with other versions of UUCP. It could also go faster when talking to another Taylor UUCP instance.

There were UUCP programs for MSDOS, CP/M, Mac OS, and VMS. Probably even more than that. It was a very popular program.

All Good Things

Of course, full-time connections to the Internet would be the beginning of the end for UUCP. Sure, you could use UUCP over a network connection instead of a dial-up modem, but why? Of course, your phone bill would definitely go down, but why use UUCP at all if you can just connect to the remote host?

In 2012, a Dutch Internet provider stopped offering UUCP to the 13 users it had left on the service. They claimed that they were likely the last surviving part of the UUCP world at that time.

Of course, you can grab your modem and set up your own UUCP setup like [Chartreuse Kitsune] did recently in the video below.

Times were different before the Internet. It is amazing that over a single lifetime, we’ve gone from 300 baud modems to over 1 petabit per second.

15 thoughts on “Forgotten Internet: UUCP

  1. 300 Baud! The luxury! We used 45 baud on our Model 15s and liked it!
    And running through the TWX network it would often get down to 1 character per second, but it was intercontinental text messaging in real time. Horrifically expensive though: roughly a hour’s pay to transmit a single page of a few dozen words.
    And tell that to the young people of today and they won’t believe you.

    1. Missed the era above by a few years.

      When I was a early teen, dad brought home a ‘modem’ . The phone rubber cups type. Got into the Prime computer where he worked. Pretty cool for a this kid. Later in college is 300 Baud Hayes modem at first. I ‘think’ by the time I graduated I had a 2400 Hayes modem to call into the VAX from my DEC Rainbow. I’ve said it before, what was neat is Turbo Pascal came out around that time and ran on the Rainbow. So I could my CS homework at home disconnected and from VAX (keep phone available for calls) then just upload to VAX and compile up there. No fighting for a ‘terminal’ in the CS lab. Cool beans. Those were the days. Now you hear complaints about Internet Access is to slow… Need fiber, more bandwidth, etc. zzzzz . Kids.

      1. 2nd year of college, I acquired a KSR-33 and an Omnitec 701B modem. It lived in my dorm room. Rubber cups and a dorm phone (on campus calls were free) kept me connected to the mainframe, and a job as a TTY repair person got me unlimited mainframe time. The TTY cost me $150 and the modem was $350. Big bucks for a college kid, but it sure paid off, as I didn’t need to fight for terminal time or make the frozen trek down to the terminal room.
        Things got even better in grad school, when I repaired and rebuilt a scrap DEC VT-05 and the same Omnitec modem ran at 300 baud!

      2. Need fiber

        You need to consume fiber to produce a well-formed stool. Try eating carbohydrates only and you won’t be able to fully wipe despite using 2 rolls of paper for every poop.

      3. Well, just as soon as you make it so their homework only requires a few k of plaintext, maybe things will change. In the mean time, the internet is being asked to do the job of your tv, radio, shopping mall, movie theater / video rental store, arcade, library, etc. And on top of that, it’s being used for new things like video calls for meetings and classes and such, now that they’re practical. It’s going to need some more performance to handle all that.

    1. Isn’t that kind of like saying land lines still support pulse dialling? I mean, I don’t think the kids are using Perl itself much.
      That said, lots of things still use uuencode’s slightly younger sibling Base64.

  2. Thanks for the article! It is refreshing to read about old technologies and think about how they could find niches in the new times. Started with a 1200 baud modem and a DOS XT clone. It was slow for the time as I think 2400 was the norm and 9600 was fast. Maybe 14.4 just came out shortly after. The really slow thing though was having to use pulse dialing. It couldn’t compete with those that paid extra for tone dialing. Fun times. Lots of adventures just sitting in front of the monitor and keyboard calling local BBS’s because long distance (something else kids today probably haven’t heard of) cost a lot of money even to the city next to you. Thanks again.

  3. Can we please cut out the “kids these days” nonsense in the comments please. For most of my childhood I was accessing the internet at 0 baud, so all you fat cats with earlier access can please cut down on the ageist comments.

    All that said, thanks to HaD for the article, interesting to read more about UUCP.

  4. good article! 1200 baud and faster began appearing early on—i think we had them in 1984. bits were encoded as di-bits. instead of pure tone signaling, the bits were encoded as phase changes.

    many sites, ours included, used smart host software to automatically route through the network. for each site there was a corresponding usenet map entry giving details like contact, phone numbers, speeds, polling or on-demand (or both), availability times, who you connected to and at what speeds, and so on. you can search for “uucp maps” and look at some. once a month the maps would come down the feed and you had local software that crunched this to generate unique routes to anywhere in the maps from your system. you could still use your own bang paths, but domain addressing became available (“@“ sign) which let the smart host do the work. there were several addressing variations.

    early social media was carried on either “news” or “notes”. the difference was how the info was formatted and propagated. there was a lot of activity. archie and veronica and gopher allowed remote site searches and delivery to your system automatically by ftp. we could do most what can be done now.

    you could use the maps and hand route loop mail around the globe and back to your email/site. i could loop mail this way and get replies in 15-20 minutes. later map software would optimize routes dynamically to cut time.

    !ihnp4, !decvax, and similar large vax systems were major hubs….

    this is old tech—but not inept tech. old tech got us to the moon.

  5. I know many places where UUCP is still in use. Often, but not exclusively, those are related to Pubnixens ans Usenet servers. You’ll find some hobbyists if you look for UUCP releated newsgroups in Usenet.

Leave a Reply

Please be kind and respectful to help make the comments section excellent. (Comment Policy)

This site uses Akismet to reduce spam. Learn how your comment data is processed.