Home > Ramblings > How I introduced a 27-year-old computer to the web

How I introduced a 27-year-old computer to the web

December 12th, 2013

Reviving an old computer is like restoring a classic car: there’s a thrill from bringing the ancient into the modern world. So it was with my first “real” computer, my Mac Plus, when I decided to bring it forward three decades and introduce it to the modern web.

My Macintosh Plus. Spoiler alert: here it is surfing Wikipedia.

It’s a lowly machine, my Mac. The specs pale in comparison to even my Kindle: 8 MHz CPU, 4 MB RAM, 50 MB hard drive, and 512 x 384 512 x 342 pixel black-and-white screen. My current desktop PC is on the order of 200,000 times faster — not even including the GPU. Still, that Mac Plus was where I cut my computing teeth as a child. It introduced me to C, hard drives, modems, and the internet.

Yes, in a certain sense, my Mac has already been on the internet, first via BBSes and later via Lynx through a dial-up shell sessions. (There’s nothing quite like erotic literature at 2400 bps when you’re 13 years old.) What it never did was run a TCP/IP stack of its own. It was always just a dumb terminal on the ‘net, never a full-fledged member.

How hard could it be to right that wrong?

Everything went smoothly at first. I had my mom ship the computer to me. It arrived in good condition, having been stored undisturbed in her basement since the mid-1990s. I plugged it and its external hard drive in, flipped the power switches, and watched the happy Mac glow to life on the tiny CRT. Sure, the hard drive gave a groan of protest when it first spun up, but that quieted down, and everything seemed stable with the data intact. At least for the first few minutes.

I was far down nostalgia lane playing a game of Glider when all of a sudden there was a loud *POP* and the smell of smoke. Panicked, I slammed the power switches off and pulled the plugs. It didn’t take much sniffing to find the source of the acrid odor: the external hard drive.  The stress of current after years of disuse had proved too much for one of the filter caps in the external drive’s power supply.

A cracked XY cap from the external hard drive’s power supply.

Fortunately, Digikey still sold those exact caps(!), and I’m handy with a soldering iron, so a few days later I was back in business. On to the networking!

To accomplish my goal, I needed a web browser, a TCP/IP stack, and some way to connect the Mac to my home network.

The web browser was relatively easy to find thanks to guys running long-forgotten FTP sites in the dusty corners of the internet. MacWeb 2.0 was both old enough to run on my Plus and new enough to render HTML and speak HTTP. Sort of. But we’ll get to that in a minute.

A whole 4 MB of RAM to play with! Good thing, because MacWeb required 2 MB.

Likewise, MacTCP existed in a version just barely able to run on System 7.0.  It didn’t support niceties like DHCP, but MacWeb was happy to use it, and it installed without problems, so there was the TCP/IP stack.

Getting the Mac physically hooked to the network was a bigger challenge. The Mac Plus didn’t have an Ethernet port, and things like WiFi were years from being invented when it was manufactured. A couple of companies made SCSI-to-Ethernet adapters about 15 years ago, but those were rare and expensive. I thought about the problem for a while, and it occurred to me that I could channel the early days again: I could use the serial port and PPP or SLIP to bridge to the outside world. Like dialup without the modem.

I set up my Raspberry Pi and ran some Cat-5 to it from the router.  Using a level shifter and a variety of old adapters, I managed to get a serial cable working between the Pi and the Mac. That took care of the hardware.

On the software side, I scrounged around and after several failed attempts found a PPP client that would run on the Plus and a super-simple PPP server called SLiRP for the Pi. Documentation for the combination of MacTCP, MacPPP, and SLiRP was, surprisingly, still available.  After a bit of tinkering with the configuration, I was able to get MacTCP to talk to MacPPP, MacPPP to talk to SLiRP, SLiRP to use the Ethernet connection, and so on through my router and out to the internet.  Since serial I/O on the Mac Plus was processor-intensive, throughput was limited to about 19 kbits/s, but 19 was a lot higher than 0.

A Raspberry Pi doing the heavy lifting for the computer that’s tens of thousands of times slower. The mess in the upper right is a level shifter, a null modem, a DB-9 to DB-25 adapter, and a serial cable.

Now, you might be wondering, “Wait, how did you get all of that abandonware on there in the first place?”  Good question! The Mac’s floppy drive was old enough to be fundamentally incompatible with PC drives, and I didn’t have any floppy drives in my modern computers anyway.

I tried going down the avenue of 100 MB ZIP disks, since ZIP drives were made in both USB and SCSI-1 versions. While I did manage to get the Mac to use the ZIP disks (and in fact switched to one for the primary boot drive), and even got my Windows PC reading the HFS formatted disks using some nifty tools, every attempt to move data from the PC to the Plus resulted in nothing but corrupted files on the Zip disk.

That left the serial port. I happened to have an old terminal emulator called Microphone already installed on the Mac. Microphone supported ZMODEM for file transfers, which you’re probably nodding your head about if you remember BBSes. Thus, to transfer files to the Mac, I SFTPed the questionably legal  files I needed from my PC onto the Raspberry Pi, plugged the Pi into the serial port, fired up Microphone on the Mac as a terminal, and launched Minicom on the Pi from the Mac. I nervously struck the keys to initiate a ZMODEM transfer from Minicom, selected the files, and hit enter. Minicom obliged, there was a BEEP! and a “Save incoming file?” dialog popped up on the Mac. Some un-binhexing later, I found myself running new software on my old Plus. Huzzah!

So, with the Raspberry Pi, MacTCP, and MacWeb all in place, it was time to surf the web! Right? Right?!

No. No surfing yet.

The MacWeb developers apparently took a look at the HTTP 1.0 spec, decided, “Who would ever need name-based virtual hosting?” and left out the feature that 99% of the sites on the modern web relied on. No support for virtual hostnames meant you got whatever you saw when you used the server’s IP address alone in the HTTP request, and for most sites, that was jack squat. Oh, and HTTPS, cookies, and CSS hadn’t been invented yet.


I vented about the problems to Tyler, mentioned that I was in for a long stretch of coding to solve it, and was surprised when he whipped up a filtering proxy solution in about 20 minutes using Python, Requests, Flask, and Beautiful Soup.  (Update 12/16: here’s the code from Tyler.) The key to it all was that MacWeb would include the full URL, with the hostname, when making a proxy request.  Requests fetched the URL, stripped SSL and managed any cookies. BeautifulSoup stripped out things that MacWeb couldn’t understand, like CSS, Javascript, images, and DIVs. Flask pulled proxy duties, reading the request and sending the filtered result back to the Mac.

And that, friends, was sufficient to surf the web. It even looked surprisingly decent, almost like a mobile browser:

The Mac Plus Wikipedia page, as viewed on my Mac Plus


Hacker News as viewed by the Mac. Surprisingly readable given that MacWeb doesn’t support CSS

Sure, it was slow as hell, but it worked! Data loaded, pages rendered, and links were clickable. Even forms sort of worked.

Did I mention it was slow? It was slow. Soooo sloooow. Slow slow slow.  Like, minutes to read and render a page slow. Here’s a video showing how slow:

Whatever. The goal was simply to introduce the Mac to the web.

The meet-and-greet was successful.

  1. December 17th, 2013 at 11:24 | #1

    Arduino! They used an Arduino! How could I get that wrong!?
    Well, Arduinos are lovely, too. 😉

  2. macinfo
    December 17th, 2013 at 14:33 | #2

    The logo on this Mac looks like the one used on the 128k and 512k Macs. Has this one maybe had a motherboard swap, just curious?

  3. macinfo
    December 17th, 2013 at 14:57 | #3

    … or as the other commenter assumed a MacPlus Upgrade?

  4. keacher
    December 17th, 2013 at 15:21 | #4

    @Tomsci My understanding is that iCab requires a machine with Color QuickDraw, which the Plus lacks. (Later 68k compact Macs, notably the SE/30, included Color QuickDraw despite having black-and-white screens.) However, I must admit that I have not tried it, so I can’t comment definitively on its compatibility.

    @edgework Nope, FreePPP installed but crashed whenever I tried to use it. Not sure why. Fortunately, MacPPP seems to work pretty well in this configuration.

    @Scott Baret You’re correct, it’s a 512k Mac with the Plus logic board upgrade. The blog post has been updated with a link to the filtering and proxying scripts.

    @Tom I have updated the blog post to include a link to the Python script that does the filtering and proxying.

    @Scott Cool! Might have to try turning the Plus into a server, too.

    @Jochen Viehoff I am definitely interesting in helping. Just sent an email to you.

    @macinfo You are correct: it’s a 512k Mac with the Plus upgrade, which consists of a Plus logic board.

  5. Norman
    December 17th, 2013 at 19:48 | #5

    Can support flash and html5?
    Sorry ….just kid ^_^

  6. December 18th, 2013 at 07:02 | #6

    Man! You Rock!

  7. Christian Kreuzer
    December 18th, 2013 at 07:16 | #7

    I started with the first Apple-Computers and being still in love with this system. Jobs like that you did: my fully respect.
    greez from Munich

  8. rodieki
    December 18th, 2013 at 09:05 | #8

    Man you rock, I have one with a AUI port on and in my mind it would work with a transiever. I have not tested it yet though.

  9. December 18th, 2013 at 09:07 | #9

    I still have my 1985 MacPlus and it works fine. I use it as a digital clock running the After Dark clock option. But it also handles old games like MacYahtzee. I’ve thought about using it for the net, and now that I’ve seen it happen here, my curiosity is satisfied. No thanks, just reminds me of the days when I used to go on America Online and often had to wait. Nostalgia is great, but it only emphasizes the wonders of new technologies today.

  10. December 18th, 2013 at 12:02 | #10

    Well done, man!
    I have taken the liberty of passing a link to this blog article to the HNF,
    the world’s largest computer museum, just down the road from here.
    Their website is http://www.hnf.de , and there are some pages in English too.

    Keep up the good work!

  11. December 19th, 2013 at 13:37 | #11

    Great Work!

  12. December 20th, 2013 at 05:01 | #12

    But will it run Crysis?!

  13. December 20th, 2013 at 15:36 | #13


    What a creative cool idea and implementation. The entire interwebbies is buzzing. Hope your server is holding up!


  14. oerlam
    December 21st, 2013 at 14:42 | #14

    Good job!!

  15. December 23rd, 2013 at 17:19 | #15

    Next. Commodore 64 with Geos!!

    LOAD “*”,8,1 anyone??

    …oops. Never mind. The boot disk is bad. (Anyone who has used Geos will get this!)

Comment pages
1 2 3 4 1216
Comments are closed.