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. Mike Abott
    December 12th, 2013 at 02:18 | #1

    The irony is that the Raspberry Pi leveraged in the process is many times faster than the Mac itself.

  2. Cool
    December 12th, 2013 at 02:38 | #2

    I used one of those in middle school, brings back a lot of memorys.
    found you on hn tnx for a great read..

  3. December 12th, 2013 at 03:08 | #3

    Nice work – a classic is revived! Bet it would be fast enough for playing some MUDs that are still around… you have a good telnet client for it yet?

  4. December 12th, 2013 at 05:10 | #4

    Amazing. I would am tempted to try this at home on mine!

  5. December 12th, 2013 at 06:22 | #5

    Woww! That looks cute..!

    I can imagine the slowness, my 1st machine was an P3, with 128 MB of ram and a 20GB HDD. It was slow as hell.

  6. Alex
    December 12th, 2013 at 06:38 | #6

    Nice work, Good to see that the RPi works with this setup (I had the idea to bootstrap my old C64 in a similar way). Makes me wish my Mac Plus still worked.

  7. John Wolf
    December 12th, 2013 at 08:51 | #7

    If you have a slightly older Mac that can run OS9, you could use LocalTalk Bridge on it to convert from localtalk to ethernet. The advantage is with MacTCP on the MacPlus, you might have seen 200Kbit instead of 19kbit. MacTCP runs over localtalk instead of serial.

    Mind you, this is all theoretical 😉

  8. December 12th, 2013 at 09:03 | #8

    Since you’re proxying the connection, why not use pamditherbw on the Raspberry Pi to pre-render images to Hypercard-style B&W gifs, and use the DAPiggyback trick to render them inline? Dig the slowness, as that Donovan track has it.

    You’ll have to build NetPBM from source, as the Raspbian/Debian upstream is more than a decade out of date.

  9. Chris Green
    December 12th, 2013 at 09:20 | #9

    I believe that HTTP/1.0 didn’t have VirtualHosts and that was a key feature of HTTP/1.1 and the Host: header.

  10. Lmg
    December 12th, 2013 at 09:26 | #10

    Nice. MacWeb and WinWeb supported forms before mosaic and it was much leaner and faster. The forms stuff was rudimentary by today’s standards or compared to things like HyperCard, but it was still an incredibly exciting development.
    Next step is to host a website? MacHttpd anybody? AppleScript cgi…

  11. Ken
    December 12th, 2013 at 09:31 | #11

    How does it do getting Obamacare?

  12. crisco
    December 12th, 2013 at 10:05 | #12

    my Dad had an old one, too. after being in storage for awhile, i decided to check it out… turned it on… smelled like burning dust… and the lil’ mac, in a squeaky voice, literally told me “No! No! No! No! No!…” and wouldn’t boot into the HD. i had never heard of that happening before… was so funny.

  13. VaughnSC
    December 12th, 2013 at 10:11 | #13

    How about a Farallon EtherWave adapter for serial ports? (A little digging shows PN801A, still available out on the web)
    I know I used EtherWave a LOT in the mid-90s for networks with serial Macs (and printers). I had another LAN that used a Sonic Systems Microbridge/TCP (harder to find) to bridge a LocalTalk network.

  14. Anonymous
    December 12th, 2013 at 10:40 | #14

    Did that with an old Amiga ten years ago.

  15. December 12th, 2013 at 10:50 | #15

    God, I love the sounds those keyboards made.

  16. Edward
    December 12th, 2013 at 11:10 | #16

    @Virendra Rajput

    Haha, no you can’t! My first computer was 64KB, but we opted to have it installed with 128KB. That was around the same era as the this Mac.

  17. December 12th, 2013 at 11:11 | #17

    In 1986-7 I was using a MacPlus as my terminal to the Cray supercomputers. We eventually ran MacTCP over LocalTalk through a GatorBox and/or Kinetics router. At LLNL we had one of the larger AppleTalk networks around, bridged to ARPAnet which was the fledgling Internet. I couldn’t connect that way from home, though by 1990 we were able to do SLIP and/or PPP over the modem.

    Now my phone is beefier than the Crays of those days.

  18. Ron Avitzur
    December 12th, 2013 at 11:16 | #18

    Epic! That brings back such fond memories!

  19. December 12th, 2013 at 11:32 | #19

    I am impressed that you got it to work on a modern internet. It only goes to show what an achievement the MacPlus was.

    As a graphic designer, my first Mac was a MacPlus at the ad agency I worked at in 1986. I used it to design ads and brochures for some top clients and it eventually changed the face of typesetting, mechanical and technical art when I was able to modem my files to a service bureau that would output my files compete with technical illustrations and crop marks to a high quality Linotron imager back in the mid 80’s. The fact that QuarkExpress, as a page layout program, linked high res files using low res display output, instead of high res embedded display output, enabled the MacPlus to handle the file sizes.

    Before I retired in 2007, I created artwork files bigger than the MacPlus could possibly hold.

  20. December 12th, 2013 at 12:02 | #20

    Did you just happen to have a Mac Plus on hand or how did you get a hold of one?

  21. December 12th, 2013 at 12:32 | #21

    @Chris Green
    HTTP 1.0 also had virtual hosting, but the header was optional. HTTP 1.1 made it mandatory.

  22. Marc Seldin
    December 12th, 2013 at 12:57 | #22

    I actually did something very similar a few years ago. One major difference is that I found an old serial to ethernet adapter, which simplified things. I also used Netscape 1.0 and I believe the MacTCP (I think it was called) extension for the stack.

  23. Tomsci
    December 12th, 2013 at 13:01 | #23

    If you could upgrade it to System 7.5 (which appears to be possible) you’d be able to use iCab which handled a surprising amount of modern-ish HTML. I ran that on some early nineties Macs about 10 years ago – possibly LC’s but I cannot recall how they were connected to the network. I think ethernet and maybe some kind of adapter, so not quite such an epic task!

  24. kizmiaz
    December 12th, 2013 at 13:14 | #24

    Repairing an old computer is nothing like restoring an old car. Speaking from expereince, it takes numerous skills to restore an old car. Any 12 year old could easily have done this, besides, what is the point, just so you can write an internet article to pat yourself on the back?

  25. mrplug
    December 12th, 2013 at 13:28 | #25

    at least repairing an old computer doesn’t cost alot of money compared to restoring an old car. I pat him on the back because I would do the same if I had that computer.

  26. Darwin
    December 12th, 2013 at 14:24 | #26

    I love the Mac Plus! The first Mac I ever worked on and happy to see (with a little—or perhaps a LOT) of work you got in on the ‘net. Nicely done! Now I’m going to play some Prince of Persia.

  27. Dervrak
    December 12th, 2013 at 16:13 | #27

    (There’s nothing quite like erotic literature at 2400 bps when you’re 13 years old.)

    Lol! I remember those days, trying to view some low-res, poorly scanned prOn image off a BBS at 2400bps and waiting impatiently while it slowly rendered….wait…is that a bOObie…no it’s a only a knee… (ahh to be young again)

  28. December 12th, 2013 at 16:34 | #28

    Great job! What was the first website you successfully viewed on it?

  29. keacher
    December 12th, 2013 at 16:37 | #29

    @Michael Walmsley Google was the first web site, because I could see it before the filtering part of the proxy was implemented. Google.com is one of the few sites that doesn’t rely on the hosts header to display the correct page.

  30. December 12th, 2013 at 16:42 | #30

    I remember how excited I was when I got the fax modem that came with my Newton Message Pad working with the my Mac Plus! What memories!

  31. December 12th, 2013 at 16:51 | #31

    Working at Universities we supported these ole Mac Plus’s for years past the useable life and they kept’d on ticking right along. The last of the calls came when we shut down the modem pool. Too bad I didn’t keep my TRS-80 to give this a shot! Great work Jeff – I will share with my 16 year old son and get him started on a project so I can fire up a good game of Zork! to share.

  32. exixx
    December 12th, 2013 at 16:53 | #32

    Wow, beautiful hack. Thanks for sharing this.

  33. Christian
    December 12th, 2013 at 17:13 | #33

    My dad had his original mac+ up and running as a webserver back in 1998. It used a SE/30 as the gateway (through localtalk) and could serve up to 10 clients at a time. Unfortunately it was retired when the company he was working for went under ~2001.

  34. Decade
    December 12th, 2013 at 17:20 | #34

    You don’t need to run 7.5. That would make the computer a lot slower. You just need to install the Thread Manager and Drag and Drop Manager.

    However, I don’t remember if iCab can run on a non-color Mac. I distinctly remember running something faster than MacWeb on my Macintosh SE, but I don’t remember what it was.

  35. Dave
    December 12th, 2013 at 18:09 | #35

    You could have always used a LocalTalk connection and dug up an old Shiva Fastpath. 😀

  36. Anon
    December 12th, 2013 at 18:13 | #36

    > 1st machine was an P3, with 128 MB of ram and a 20GB HDD.

    Wow, that’s very new for a first machine. Mine technically was a Sinclair ZX81 http://en.wikipedia.org/wiki/ZX80 with a whopping 1k and no storage (the cassette interface was unreliable on its best days).

    In reality, my first was an Atari 800 with 16k and no disk (for a short time). Then with a 90kbyte 5.25 floppy disk drive. Yes, 90 kilo byte.

  37. steve
    December 12th, 2013 at 18:58 | #37

    so 12 year olds can write python scripts in 20 minutes and program raspberry pis?

  38. Eli the Bearded
    December 12th, 2013 at 19:16 | #38

    The problem of putting HTTP/1.0 browsers (which do not send Host: headers) on a HTTP/1.1 web is an old one and has been solved before. Consider for example:


    By a guy who knows a thing or two about the HTTP/1.0 web.

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

    Funny that the page finished rendering when you moved the mouse. I used to click my Mac Plus mouse furiously while I was waiting for some task to complete. I could swear it sometimes helped.

  40. David
    December 12th, 2013 at 20:26 | #40

    @J B

    That’s not funny at all. Moving the mouse is a time honoured way of reminding a classic Mac that you’re waiting for it to do something. I never got a technical explanation of why it worked, but it did.

    I have an old Macintosh SE I rescued from a previous workplace close to 15 years ago. I’ve booted it a couple of times for nostalgia purposes, but never seriously thought about putting it on the internet. I’ve got an Asanté LocalTalk to Ethernet converter and if IP packets could be embedded in LocalTalk ones….. no, I really don’t have the time or patience for such an exercise anymore. Even my G4 is doing nothing more useful than capture some of the dust in the family room.

    Congrats Jeff on accomplishing something most of us wouldn’t dream of trying.

  41. John Nobody
    December 12th, 2013 at 21:06 | #41

    You had ZMODEM? Lucky bastard! We had to use XMODEM and YMODEM. Lucky bastard. ZMODEM.

  42. December 12th, 2013 at 21:29 | #42

    Why didn’t you just use a modem and a dialup account. Der… that’s how I would of done it. And if you couldn’t find an ISP to provide a dialup, setup your own dialup server connected to the net. Pretty sure Linux has a PPP daemon. Nyx has been running a free dialup forever.

    Or done something to bridge a LocalTalk port to Ethernet with old existing hardware.

  43. December 12th, 2013 at 22:19 | #43

    Got to say, congratulate on that 27years of wonder come alive
    I just wish my DX4 were still alive now .. 🙁

  44. ron finch
    December 12th, 2013 at 22:28 | #44

    i remember being online with my mac plus and reading the new york times in 1997 or so without any thing but a modem-details lost now!

  45. Michael
    December 12th, 2013 at 22:56 | #45

    I would really be interested in how well it could run nethack by (telnetting to nethack.alt.org).

  46. December 13th, 2013 at 00:11 | #46

    You couldn’t get FreePPP to work? MacPPP had tons of bugs. FreePPP fixed them all…

  47. Anonymous Coward
    December 13th, 2013 at 00:43 | #47

    How odd that there’s no mention of Contiki, which you could use
    for browsing the web on a Apple II , C64 , or Atari 800 –
    without having to resort to anything like Raspberry.

  48. Anonymous
    December 13th, 2013 at 00:58 | #48

    It brings back exactly 4 million bytes of memorys.@Cool

  49. Anonymous
    December 13th, 2013 at 01:43 | #49

    Nice work 🙂

  50. Stux
    December 13th, 2013 at 02:59 | #50

    Back in the day (90s) I used to keep a Mac plus on the internet running ircle as an irc client

    The trick is to use a LocalTalk to Ethernet gateway and then you can basically have the Mac on your LAN, and thus the internet. No need for SLIP

    Ethernet gateway was e a Mac IIx 😉

Comment pages
1 2 3 4 1216
Comments are closed.