Emulating NeXTStep and the First Web Browser

I’ve been rewatching Halt and Catch Fire and just finished season 3 which concluded with an episode titled NeXT and is set during the dawn of the web. In this episode you can see a few of the characters booting up an early web browser on a NeXTcube.

I got inspired to see if I could do this for myself in an emulator.

My first thought was to try Infinite Mac since they have various versions of NeXTStep running. However, I couldn’t find a way to mount external data or active network access, so I changed course and tried to get a local emulator working.

My first attempt was with qemu, but I ran into issues finding a bootable installer CD that worked well with qemu.

Then I found the Previous project and, after a little bit of searching, some disk images with NeXTStep 3 installed.

Now, it was just a matter of installing the developer tools, which you can find ISOs of on the Internet Archive. Interestingly, the install process is very similar to modern MacOS, which makes sense given its lineage.

CERN has a great page on the birth of the web, but I wasn’t sure if the code for Tim Berners-Lee’s original browser, called WorldWideWeb was published there.

Thankfully, some folks at CERN had completed a project to rebuild the WorldWideWeb app so it could run inside modern browsers. Sadly, it doesn’t seem like that actual project is available on the site any more. But, they do link to the original NeXTStep code!

Previous makes it easy to mount a directory on your host system as an NFS share inside NeXT, which is what I did to easily make the source available inside the emulator.

After poking around the codebase for a bit, I found there was a Makefile…could it be as easy as just running the “make” command?

Yes, yes it is!

This build process would be very familiar to anyone who has spent time working with C/C++ projects on Unix/Linux environments.

And, as expected, the “make install” command puts the built application into place!

I also was able to get the source building in ProjectBuilder, which is the NeXT development environment.

And here it is, the world’s first browser, up and running!

CERN hosts a copy of the first website which failed to load with a HTTP error, likely because their server doesn’t accept older versions of HTTP requests (or immediately tries to redirect to HTTPS). But, FrogFind saves the day!

This was a fun tour through the dawn of the web! It’s amazing to see how much the concepts implemented in this early code are still relevant today, so much so that stripped down HTML served over HTTP can still be loaded.

This was also the most time I’ve spent using NeXTStep. There were a few quirks I had to get past at first, but after that it was a familiar environment. I think writing code in this environment would be a challenge where a plain text editor seems to be the state of the art. I suppose there was always vi available, but I’m not sure how commonly used that was for NeXT developers.

One thing that I noted was how most applications, including WorldWideWeb, defaulted to opening every document in a new window which is very different from the modern trend of single window applications, often filled with tabs. I think I kinda miss the era when apps favored windows over tabs.

Previous
Previous

A new era…

Next
Next

End of an era