NeXTstep on the HP 712 Part 2: Getting Software
In the last post of this series, I set up NeXTstep on an HP PA-RISC workstation. Today, I’m going to get down to business: configure networking, install system patches, outfit it with developer tools, and install some useful software!
As with the previous post, I’ve also made a YouTube video that covers roughly the same topics! If video is your speed, I’d love for you to check it out!
My goal is to end up with a capable machine that I can use like it might have been when new, and learn from the experience.
Foreshadowing networking woes
While it is possible to transfer files from SCSI drives (or even floppies!), getting a pizzabox on my home network makes loading software much easier. I first tried out NeXTstep on this workstation a couple years ago. The OS installed OK, but I ran in to trouble with networking. I was initially optimistic that I would figure it out:
I think I'm done for the day but soon if I can fight with NFS and NetInfo (lolololol) I can get screenshots off it and software on
— cron mom (@sophaskins) February 10, 2018
NARRATOR: she did not soon win the fight with NFS and NetInfo
Hang on a second: NeXTstep is a workstation-focused Unix operating system from the 80s-90s - how could it be difficult to get it on a network? The answer is a thing called NetInfo.
In a surprise to exactly no one, NeXTstep, being from a company founded by Steve Jobs, had it’s own NeXT-only ecosystem of tools that fit together amazingly well. The cornerstone of NeXTstep networking was NetInfo. If you had a collection of NeXT computers on a network, NetInfo gave you a system to:
- manage user accounts that would work across all machines
- configure file sharing
- control permissions around access to network resources
- assign IP addresses and hostnames
- quickly bring new machines in to the network
- serve this information in a highly-available manner
which is to say: NetInfo is a “directory services” system. That’s all well and good - in the early 1990s that space had many competitors and a “right path” hadn’t yet been established, but…I don’t want my machine to be part of a directory, **I just want it to be on my existing TCP/IP network.
Starting a “simple” network
With that in mind, I (naively) attempted to use the “SimpleNetworkStarter” application.
The SimpleNetworkStarter window has three “steps”:
- Select how we’ll integrate with an existing NetInfo network (since I don’t intend to interact with one at all, I have to choose “Provide the services specified below”, a sort of catch-all)
- Specify my hostname and IP address - if I were connecting to an existing NetInfo network, I might not have to do this. “Network Options” lets me set more granular IP settings like netmask and gateway; “NetInfo Options” lets me choose how to integrate with existing domains (if relevant).
- Setup network services: for my setup I don’t really want any of these things, but as a standalone NeXTstep system, I do have to “Maintain the master copy of network administrative data” (aka, the NetInfo database).
So far, this feels like a really good start, but will it let me fetch files from an NFS share?
Networking woes
I immediately tried connecting to my NAS over NFS - after all, the main point of setting up networking was making it easier to transfer files. Unfortunately, it didn’t work - I could set up the NFS mount with NFSMananger (more on how to do that later), but the mountpoint would always be empty. Here you can see me attempting to reach it by IP address:
So I had some sort of problem. To narrow down potential issues, I ran a few tests:
- attempting to ping my NAS from the workstation - this turned out to not work because NeXTstep doesn’t seem to have any
ping
command. There are probably ways to accomplish something equivalent with the tools it does have, but I just moved on - attempting to ping the workstation from elsewhere on my network. This worked - I was able to ping it from my laptop!
- attempting to connect to my NAS with FTP - one of the few network tools NeXTstep does seem to have is FTP, so I gave it a shot. To my surprise, this works!
It did not work via hostname, though, which points to at least some trouble with DNS. Taking a deeper look at the “NeXTstep 3.3 Network and
System Administration Manual” section on “NEXTSTEP Computers in a Mixed Network” (which I probably should have done earlier) shows that I need to manually configure DNS. There’s no GUI options for it, you just have to write out an /etc/resolv.conf
:
After rebooting, I was able to access the NAS via FTP by hostname:
But still couldn’t use NFS. What gives? I have network connectivity in both directions, and DNS is also now working! I believe this is as far as I got a few years ago, and man I was FRUSTRATED.
Eventually I thought to look in the system log (/usr/adm/messages
) for hints:
and there it was:
autonfsmount: Can't get my address
Can’t get…my address? Doesn’t the computer know its own address? While I don’t know why it has to do this (googling has provided me a couple of quick asides mentioning it, but not much detail), mounting an NFS server requires working reverse DNS for your IP.
I do have a real-ish DNS server for my home network, and it populates based on DHCP leases and IP reservations. This workstation, though, was just using an IP that I habitually hardcode for pizzaboxes (192.168.1.200). I double-checked the DHCP server config, and it was indeed set up with a different host for that IP, and not set up at all for this hostname. I replaced that entry with one for hp712
at 192.168.1.200
for the MAC address of my workstation, and crossed my fingers.
It worked! I could browse my NAS from the file-browser.
Setting up an NFS mount
After all that rigamarole, the right way to configure a remote NFS mount goes through the NFSManager.app. While NFSManager lets you configure both “exports” (local directories I share with others) and “imports” (remote directories I want to mount locally).
All I have to is click “Add” and fill in the details for my NAS:
That’s it? A lot of struggle got me to this point, but finally I can transfer files.
Patch Tuesday
The first order of business is to run system updates. NeXTstep 3.3 was released in mid-1995, and it had three patch updates: the first at the end of 1995, and the second and third in late 1999. Since NeXT were acquired by Apple in 1997, this patch was made by Apple to address Y2k bugs and other longstanding issues. Thanks, Apple! Thapple.
The third patch is a cumulative update, so that should be all I need. Nextcomputers.org generously hosts the patch for download. Because I’m using an HP PA-RISC machine, I need NS33RISCUserPatch3.tar
. System updates need to be installed as the root
user, and if you run them as me
(the default user) NeXTstep doesn’t prompt to escalate privilges, it just gives an error. Thus, I need to log in as root
directly. In order to do that, I need to give the me
user a password so the system will stop automatically logging in at boot (giving me a chance to log in as root
). To set a password, you go to Preferences.app and navigate to the lock icon.
After the next reboot, I then get the login screen (instead of automatically going to the desktop):
By default, the root
password is blank (you can of course fix this after login in the same way as setting a password for the me
account). I navigated to where I had put the patch tarball on my NAS, copied it to the HP 712, and unarchived it.
Double-clicking the package brings up a familiar-feeling Installer.app
Clicking “Install” prompts me to make sure I’m choosing the right architecture (in my case, PA-RISC), runs a program to determine compatibility, and runs the update.
After a reboot, I’m on the most recent version of NeXTstep for PA-RISC, and ready for the year 2000!
Getting access to dev tools
What’s next for making a usable system? Developer tools! NeXTstep came on two sets of discs - “User” for the main operating system, and the optional “Developer” disc with compilers, GUI building tools, libraries, and documentation. While there were separate versions of NeXTstep User for CISC (m68k and i386) and RISC (PA-RISC and SPARC) platforms, the Developer disc is “quad-fat” - it contains binaries for all four platforms. I grabbed the Developer disc image from the Internet Archive.
Were this been an actual ISO image, I might have mounted it on my laptop and copied the files to my NAS to make the installer available to the workstation; unfortunately, it’s not. What format is it? The first few bytes of a disk image usually can help figure that out:
head -c 16 nextstepdeveloper3.3.iso | hexdump
0000000 64 6c 56 33 00 00 00 00 00 00 00 00 4e 45 58 54
0000010
When trying to find “magic numbers” like this, I usually check out the NetBSD sources. Since NetBSD focuses on compatibility with the widest possible set of hardware, they often have compatibility for far-out things. As luck would have it, those bytes do show up in sys/sys/bootblock.h
: 0x646c5633
is NEXT68K_LABEL_CD_V3
. So, this is a non-standard format specific to NeXT. There’s some code that shows how to interact with this kind of disc label - maybe in the future I could put together some code to read the CD like I did for SGI EFS? For now, though, I’m going to try loading the disc image in to my SCSI2SD “fake” CD-ROM drive.
You might wonder why I didn’t start at that point - isn’t copying installers to a network store a bit overcomplicated? In this case, no. Copying a new disc image to the SCSI2SD requires:
- opening up the workstation case to get at the SCSI2SD’s SD card
- writing a
dd
command with the correct offset for where the CD portion of my configuration is (hope I wrote it down!) - waiting ~5 minutes for the image to write
- putting it back
This time, I have no other option! So it’s time for the whole rigamarole:
So it’s time to install dev tools, right? I had thought so! While NeXT didn’t see fit to including any sort of “Readme” or “Installation” document in the root of the CD, there are some .pkg
files in the /NextCD/Packages
subdirectory that look promising:
- DeveloperDoc.pkg
- DeveloperLibs.pkg
- DeveloperTools.pkg
- GNUSource.pkg
Signed in as root
, I started with DeveloperTools.pkg, got mid-way through, and…got an error:
If using computers has taught me anything, it’s that “sometimes if you try it again things work”, so I tried this install process several times, all ending in similar errors. At first I thought that it was making it further in the install process each time, but eventually I realized that wasn’t the case. Files that had succeeded in a previous run would be the source of cat: write error: Bad address
on the next. I tried to eliminate potential causes of the error:
- swapping around RAM sticks (on the assumption “Bad address” means it is a RAM problem)
- trying a different SD card (on the assumption it means an error writing or something)
- trying a different SCSI2SD unit (on the assumption that was bad)
but none seemed to make a difference. What to do? I decided to try copying the contents of the CD to my NAS, and then running the install from there.
This also had failures during the copying of a handful of files, but I was able to note down which ones and try each again - with success!
Installing the dev tools
and I also can’t seem to find any such overall thing in the NextLibrary directory (where the developer docs live) or online! “User friendliness” is something that wasn’t necessarily first on NeXTs mind when making tools for professionals. I do believe that it was packaged with such a document (on paper), but we can make do with our critical thinking skills - there are installable packages in the /NextCD/Packages
subdirectory. Things are split across four packages:
- DeveloperDoc.pkg
- DeveloperLibs.pkg
- DeveloperTools.pkg
- GNUSource.pkg
Signed in as root, I started with DeveloperTools.pkg and proceeded to do all of the others. The process of installing each package was identical to the installation process of OS update I did earlier - seems reasonable, since they both use the standard Installer.app process.
Speaking of patches, there is also a patch for the developer tools available. The most recent is the NeXTstep 3.3 Developer Patch 2 (vs patch 3 for the NeXTstep User software), and once again was made by Apple in 1999 after they acquired NeXT. The nextcomputers.org website hosts a copy of the patch.
What’s in the dev tools?
After going through the effort to install NeXTstep Developer, what do we get? A new directory in the filesystem root,
NextDeveloper
containing some apps, demos, examples, various bits of GPL-required source code, headers for system libraries, and documentation. The structure is (unsurprisingly) rather similar to older versions of the OSX developer tools’ /Developer
directory. The similarities don’t end there, though - several of the tools, like Interface Builder, will be rather familiar to modern Apple-ecosystem devs, like Interface Builder:
Other notable programs include:
- ProjectBuilder, a tool for managing source files and dependencies. that later grew in to an IDE and was eventually renamed XCode
- HeaderViewer, for exploring what libraries were available and their documentation
- ProcessMonitor, which seems to be a spiritual predecessor to the modern Activity Monitor.
I particularly love the demo apps - they’re pre-built and ready for running in the Demos
directory, but their source is also available as examples of how to develop for NeXTstep. The Chess game has survived in to modern OSX:
- Sound, a sound editor program (I just love a good waveform visualization)
- BoinkOut, a version of Breakout, the classic Atari arcade game that Steve Jobs had dubiously meaningful involvement with
- FileMerge, a visual “diff” tool that survives today as part of Apple’s dev tools.
As a developer I really appreciate the depth of documentation and tooling included here - in 1995 there wasn’t nearly the depth of reference and tutorial information available on the internet, so bundling it with the tooling was crucial. Then again, for the cost premium ($4999 for NeXTstep Developer, vs $799 for NeXTstep User, according to Computerworld) it had better have been as deep as possible! I’m excited to dive in and try to make some applications in the future to get a sense of what it was like to use at the time.
Lighthouse apps
What else do I need to make a usable machine? How about some office productivity tools? One software house who focused on that sector for NeXTstep was Lighthouse Design. Their wide range of software seems to have been popular at the time, and (mercifully) when they were acquired by Sun Microsystems in 1996, they released installers and product keys for all their NeXT software for free online. Yet again, the nextcomputers.org site maintains a mirror of all the software, so I’ve downloaded it to install on the HP 712!
Somewhat importantly, they seem to have published their software as “quad-fat” - containing code for all four platforms that NeXTstep might run on. Since the PA-RISC platform was only supported by NeXTstep version 3.3, I suspect that much software for NeXTstep was never released for it. Not Lightstep’s, though!
This collection includes classic productivity suite apps like:
- OpenWrite, a word-processing program
- ParaSheet, for spreadsheets (Lighthouse calls it a “traditional” spreadsheet in comparison to their more powerful Quantrix software)
- Concurrence, a presentation program (according to its docs, designed for producing both on-screen presentations and printing to 35mm slides))
As well as more “media-focused” apps:
- WetPaint, an image editor
- OmniWeb, a web browser written by the Omni Group, published at the time by Lighthouse. Newer OSX versions are still available.
- EquationBuilder, for typesetting more complex mathematical expressions. NeXTstep includes TeX with the OS, but EquationBuilder is certainly more user-friendly.
Finally, there are some apps more appropriate for “serious business” use:
- Diagram!, for making visually pleasing figures
- TaskMaster, project planning (including Gant charts) for complex endeavors
- VarioData / VarioBuilder, networked database-building tools (in the vein of FileMaker)
As you can see, it’s a quite wide range - Lighthouse’s apps fill out my NeXTstep HP 712 nicely.
What’s next?
It’s taken me a long time to get this post (and video) done, and I don’t want to make any promises that the next one in this series will be any faster. My next goal with this setup is to write an application with the developer tools. In the mean time, though, I’ll probably do some projects with other machines to inject a little variety.
As ever, I’d love to hear your stories about using these tools! Did you build apps using NeXT’s developer tools? Or maybe run a business with Lighthouse’s productivity apps? I’d love to hear about it! Feel free to email me at sophie@pizzabox.computer!