Advanced instructions for spinning up OPENSTEP 4.2 in VirtualBox (with creature comforts) If you have an x86 machine, then VirtualBox currently offers the best OPENSTEP experience available, short of running it on bare metal. It can push the display resolution higher than any other hypervisor or emulator (up to 1080p) and has a wealth of options for virtualizing the CPU. The mouse behavior is a little erratic; VMware has superior mouse handling but inferior video drivers. This guide assumes some slight familiarity with Unix system administration, and maybe ideally some previous experience trying to get VBox to run NeXTSTEP. Its purpose is to make a really good virtual machine rather than the basic configuration that other guides outline. Some folks swear by NeXTSTEP 3.3. This is mainly a matter of nostalgia and purism: everything after mid-1997 is actually released by Apple, not NeXT. There is also a port of a slightly newer gcc that only works properly under NS3.3; it generates non-functioning binaries under OS4.2. (We're still working on sorting this out...) However, OPENSTEP added more APIs, so there are a number of applications out there that prefer it. I don't recommend Rhapsody on x86 for general tinkering or development. Rhapsody DR2's Workspace Manager has some bugs in the file manager, and some programs (most notably TextEdit) were reprogrammed in Java as a proof-of-concept. There are relatively few programs that were built against the Rhapsody/OSXServer APIs, and only a handful of programs actually require them. The bundled software is also somewhat deficient; there's no GUI-based Installer.app (though a third-party program called TinyInstaller exists to help with this.) In general the user experience is quite incomplete. If you do want to go forth and build a Rhapsody VM for yourself, spend some time in OS4.2 or NS3.3 first to get the lay of the land. #. Getting VirtualBox The download page is here: https://www.virtualbox.org/wiki/Downloads I use 7.0.14, but there shouldn't be too many differences from the latest release. #. Initial hardware configuration: Choose OS type: Other > Other (32-bit, not 64-bit). Set video to VGA with at least 32 MB video memory. Set audio to SB16 Set networking to PCnet-PCI II, bridged mode Set up an IDE hard drive. Limit its size to 2 GB; the OS can't handle larger partitions during the install process. If you are installing a different version of NeXTSTEP or Rhapsody, switch to BusLogic SCSI instead. Set RAM to 128 MB to start. After the OS is fully patched you can push it up to 512 MB. Edit the machine. Add a floppy drive and a CD drive. (You may need to add controllers for them too.) If you left the hard drive as IDE, set the controller type for the IDE mass storage devices to PIIX3. (It defaults to PIIX4.) If you went with SCSI, make sure the controller type is LsiLogic. If you need more storage later for serious dev work, you can add an additional hard drive (or two) later. You'll need a floppy drive during installation, but if OPENSTEP boots up with an empty floppy drive under VirtualBox, it'll complain about an unreadable disk. So, once you're done installing, you may want to simply remove the device from the VM configuration entirely. (You can always add it back later.) #. Installation Insert the install floppy and the install CD, then boot the VM. Swap to the drivers floppy when requested, following the on-screen instructions. Add the EIDE disk controller and the ATAPI CD-ROM driver. The GUI phase of the boot process occurs in 640x480 in 2-bit grayscale. This is OPENSTEP's fallback graphics mode; you'll be seeing it a lot at first. To keep things simple, don't attempt to add any more drivers during the GUI part of the install process. During the first boot, you'll notice the spinning hard drive icon overlaps the NeXT logo, and also that it disappears, leaving a weird blank square on the boot screen. This is normal. #. Notes for Other Versions When installing NEXTSTEP 3.3 or earlier, make sure you select BusLogic SCSI; the VirtualBox-compatible IDE drivers weren't available yet. The drivers on the NEXTSTEP 4.0 PR1 floppies won't work. Instead, install NEXTSTEP 3.3 and then upgrade using the 4.0 PR1 CD. (You must be logged in as root to do this; follow the 'Setting up users' procedure while under 3.3.) During the upgrade to PR1 you'll have to use Review Plan to deselect all the drivers your system uses, as 4.0 PR1 contains some bad drivers. You can use /NextAdmin/Configure.app to figure out which drivers you're using. I am not sure exactly which files to remove, but someone on the International NeXT Forums succeeded at it some years ago. (At the end of the upgrade you'll probably get a log of unupgradeable files; these are uucp binaries and netinfo defaults that haven't changed in years, and they seem to be missing from the install CD.) Rhapsody DR1 is very picky. I haven't been able to get networking to function on it yet. Make sure you select LsiLogic SCSI again. Rhapsody DR2 is more forgiving and will work with same drivers and storage controllers as OPENSTEP 4.2. #. Opener.app Once you've booted off the hard drive, it's time to load up the VirtualBox Post-Install CD, VBoxOS42.iso. You'll need to re-insert the CD every time you log out or power down the machine. Probably the first thing you should do is install Opener. This lets you double-click on a wide variety of archive files directly in the file browser without having to extract them with command-line utilities first. a) Drag Opener.3.4b.N.b.compressed from VBoxOS42 into your home directory ('me' on the shelf) b) Double-click on Opener.3.4b.N.b.compressed in your home directory to expand it. c) Drag Opener.app into your Apps directory and double-click it to launch it. Opener.app *should* automatically register file associations for .tar, .tgz, .gz, etc., but if things go wrong you can always use 'Unarchive' from Opener's main menu. #. Drivers a) The video driver is from here: https://www.nextcomputers.org/forums/index.php?topic=5841.0. To install the video driver, copy /VBoxOS42/VBoxVideo-1.1.config.tar to your home directory, extract it, and then double-click the .config. This will open /NextAdmin/Configure.app for you automatically. Set up your other drivers properly: b) The audio driver won't auto-detect; choose: Sound Blaster 16 (8 and 16 bit DMA) c) The network driver will auto-detect; it should be: AMD PCnet-32 PCI Ethernet Adapter (v4.00) d) Keyboard and mouse are default. See further down for advice on improving mouse behavior. Press Done, Save, and quit Configure.app. Then use 'Log out' in the Workspace Manager main menu to power off your machine and reboot. After rebooting, you may want to re-open /NextAdmin/Configure.app and choose the correct screen resolution. Then save and reboot again to get everything working as desired. #. Arguing with Drivers and fsck If you have trouble booting due to driver problems, enter 'config=Default' at the 'boot:' prompt during system startup while the machine is still in text mode. If the machine is not shut down correctly, it will attempt to run a filesystem check and then reboot automatically, which will definitely waste your 'config=Default' input. You'll need to watch the computer closely to get this right. In my experience, boot problems are mainly caused by choosing an incompatible video driver or resolution, but you can also wind up with an infinite hang on the boot screen if you selected the wrong network adapter. #. Setting up users Up until now you haven't been asked for a username or password at boot. In fact, you've been automatically logging into the user account 'me' which has no password by default. This was all well and good in the 1990s, when competing desktop GUIs didn't ask for a password to log in, but we'll need to get a little more serious. Open up Preferences.app by double-clicking on the calendar/clock widget on the application dock at the right side of the screen. Switch to the key/lock icon and set a password. To close Preferences.app, select 'Hide' from the main menu rather than Quit, or you'll lose the calendar/clock widget. Log out, to demonstrate your newfound power over accounts. But instead of using 'me' again, log in as 'root' (it doesn't have a password yet.) Run /NextAdmin/UserManager.app. (This is a minimal application with no main window; just use the menus.) Using the menus, open the root user and set a password. You should also create a home directory (/root is traditional on many Unices) since OPENSTEP likes to default to using / as the root user home directory, which is messy as hell (and makes it impossible to save some UI preferences.) After you are done editing the root account, save your changes (again using the main menu.) Also, make sure you actually create the /root directory in Workspace Manager, or things will go badly! While you're in here, you may want to create a new user account for yourself other than 'me'. Do not rename or delete the 'me' account. Traditionally, NeXT user directories go directly in /, unlike on macOS (which uses /Users/) or modern POSIX systems (which use /home/). After you're done, you can log out of root and log back in as either 'me' or your new personal account. Henceforth you will be prompted for root's password whenever you try to do something that requires root privileges (e.g. save Configure.app changes or use Open Sesame.) #. Using Installer.app Most .pkgs need to be installed as root. From the menu, use 'Services > Open Sesame > Run as Root' to open Installer.app with superuser permissions so you can install them correctly. Once Installer.app is open you can just double-click on packages in the File Viewer to install them. Open Sesame won't do anything if Installer.app is already running. #. Development If you want to do any programming under OPENSTEP, then you should install everything from the developer CD now. #. OS Patches Drag /VBoxOS42/Patches/OS42MachUserPatch4.tar into your home directory, and extract it. Reminder: you need to run Installer.app as root to use these packages (see 'Using Installer.app', above) If you installed the development environment, also install OS42MachDevPatch4 and then OS42MachPLibPatch4 from the same directory on the VBoxOS42 CD. #. Tweaking VirtualBox The default VBox configuration is a little underwhelming. OS X and Windows get nice logos, but not OPENSTEP! Let's improve it a little: On your host machine, run these commands: vboxmanage modifyvm "/.vbox" --icon-file="/NeXT.png" vboxmanage modifyvm "/.vbox" --bios-logo-fade-in=on --bios-logo-fade-out=on --bios-logo-display-time=3000 --bios-logo-image-path="/.bmp" (On Windows, you'll want to 'cd' into the VirtualBox directory first.) Also, some versions of VirtualBox will always disable Num Lock when you leave the VM, since we don't have Guest Additions (the special driver that tells VBox what the VM's num lock state is). If this bothers you, run: vboxmanage setextradata "/.vbox" GUI/HidLedsSync "0" OPENSTEP seems to assume Num Lock is always on, so it's a pointless annoyance to ever let it be turned off. (Although I wasn't able to get this fix to work properly under Windows...) #. Setting up the network (manually) OPENSTEP doesn't have an official DHCP client, so most likely you'll want to configure your IP address, gateway, netmask, and DNS server manually. Normally network configuration is done with /NextAdmin/SimpleNetworkStarter.app. However, using the command line steps outlined below will give you insight into how to rescue the machine in single-user mode if something goes wrong. Open /NextApps/Terminal.app and run the 'su' command to get a root shell. Then run the command: pico /etc/hostconfig Edit the file to fill in values for HOSTNAME, INETADDR, ROUTER, and IPNETMASK. For example, my configuration looks like this: # (... a bunch of boilerplate ...) HOSTNAME=proxima INETADDR=192.168.0.200 ROUTER=192.168.0.1 IPNETMASK=255.255.255.0 IPBROADCAST=-AUTOMATIC- NETMASTER=-NO- YPDOMAIN=-NO- TIME=-NO- HOSTNAME should be a unique, short, lower-case word that is the name of your computer. For example, I have VMs named lighthouse, mirage, proxima, and chimera. ROUTER should be the IP address of your network gateway. For most people this will be a modem or router. If you have forwarded ports before, it's probably the same address. On Windows, the command 'ipconfig' can be used to look up this information; on other operating systems, 'ifconfig' will do the same. INETADDR should be a new IP address for your guest VM. If you don't have a scheme, take your host machine's IP address, remove the number after the last dot, and replace it with something in the range 200 to 254; this will avoid most conflicts. IPNETMASK indicates which IP addresses are on the local net vs. which addresses have to be accessed through the gateway (router). It is almost always 255.255.255.0, but it may be 255.0.0.0 or 255.255.0.0 if your host machine's IP only shares the first one or two segments with your gateway. (Other configurations are possible, but very rare on home networks!) Press Ctrl-O to save the file, then quit pico with Ctrl-X. Run 'pico /etc/resolv.conf' (Unlike nano, pico can't open new files.) Make sure your file looks like this: hostresorder local bind nameserver 1.1.1.1 This configures OPENSTEP to use Cloudflare's public DNS server, 1.1.1.1, as your domain name server. You can of course change it to some other DNS server that you prefer, if you know of one. Press Ctrl-O to save the file, then Ctrl-X to quit, and, finally, reboot your guest machine. If you did everything correctly, you'll then be able to run: /etc/ping 1.1.1.1 and get results! If the machine hangs at 'Starting naming services' during boot, you probably forgot to change the network type to PCnet-PCI II when configuring the VM's hardware. Tips for *nix veterans: - ifconfig is also in /etc - The ethernet device is en0 Other tips: - If you make a bad NetInfo configuration after messing around in the GUI, enter '-s' at the boot prompt to enter single-user mode. - As of 2025, there is no combination of drivers and devices that provides working network support in Rhapsody DR1 under VirtualBox. #. Clock Problems First we need to fix VirtualBox's clock offset. It defaults to assuming the OS expects the clock to be in UTC. OPENSTEP assumes it's in local time, causing timezone adjustments to be applied twice. (See previous section for how to run this command.) vboxmanage modifyvm "/.vbox" --rtc-use-utc=off You may occasionally need to force a clock sync if you don't use your VM often enough. Run this command as root: /usr/etc/ntp -s -f time.windows.com Some of the DST rules for North America have changed since OPENSTEP 4.2 was released. If this affects you, you'll want to patch your current timezone. Run this as root: /usr/etc/zic -l /VBoxOS42/northamerica.zic Where is the nearest city from this list: America/Adak America/Anchorage America/Bahia_Banderas America/Barbados America/Belize America/Boise America/Cambridge_Bay America/Cancun America/Chicago America/Chihuahua America/Ciudad_Juarez America/Costa_Rica America/Dawson America/Dawson_Creek America/Denver America/Detroit America/Edmonton America/El_Salvador America/Fort_Nelson America/Glace_Bay America/Goose_Bay America/Grand_Turk America/Guatemala America/Halifax America/Havana America/Hermosillo America/Indiana/Indianapolis America/Indiana/Knox America/Indiana/Marengo America/Indiana/Petersburg America/Indiana/Tell_City America/Indiana/Vevay America/Indiana/Vincennes America/Indiana/Winamac America/Inuvik America/Iqaluit America/Jamaica America/Juneau America/Kentucky/Louisville America/Kentucky/Monticello America/Los_Angeles America/Managua America/Martinique America/Matamoros America/Mazatlan America/Menominee America/Merida America/Metlakatla America/Mexico_City America/Miquelon America/Moncton America/Monterrey America/New_York America/Nome America/North_Dakota/Beulah America/North_Dakota/Center America/North_Dakota/New_Salem America/Ojinaga America/Panama America/Phoenix America/Port-au-Prince America/Puerto_Rico America/Rankin_Inlet America/Regina America/Resolute America/Santo_Domingo America/Sitka America/St_Johns America/Swift_Current America/Tegucigalpa America/Tijuana America/Toronto America/Vancouver America/Whitehorse America/Winnipeg America/Yakutat Atlantic/Bermuda Pacific/Honolulu The northamerica.zic file on the CD is from here: https://www.nextcomputers.org/NeXTfiles/Software/System/Time_Zone_Definitions/ For my machine, I went a couple steps further and added some relevant cron jobs. Open up /NextApps/Terminal.app and use the 'su' command to switch to the root account. Then run: pico /etc/crontab And add these lines of text to the bottom: 0 * * * * root /usr/etc/ntp -sf time.windows.com 30 * * * * root /usr/etc/ntp -sf time.windows.com Then press Ctrl-O to save and Ctrl-X to quit. These ensure that the clock will eventually fix itself if the virtual machine is ever suspended, although it seems daylight savings time confuses them. (If you've never edited a file in /etc on a Unix-like system before, see the next step on how to open files in pico as root.) #. Getting files in and out OPENSTEP will happily run FTP and Telnet servers for you. Open up /NextApps/Terminal.app and use the 'su' command to switch to the root account. Then run: pico /etc/inetd.conf (pico is the ancestor of nano, every noob's favorite command-line text editor. They are nearly interchangeable.) Make sure the 'ftp' and 'telnet' lines aren't commented out. Then save the file with Ctrl-O, quit with Ctrl-X, and reboot. Now you'll be able to use an FTP client on your host machine to access files in your home directory, without having to create CD images constantly. Tips: - If you're on Windows and you need to make a disc that OPENSTEP can read, I recommend making basic ISO9660 images in ImgBurn.) - Although WinSCP is the standard FTP client on Windows these days, you can actually use Windows Explorer to browse your NeXT system, although you won't be able to view or edit files unless you copy them to a local directory first. Similar tricks are possible under Linux file managers like GNOME Nautilus. Simply enter ftp://:@/ in your file manager's address bar. - If you want to make a CD image that OPENSTEP likes (instead of just tolerates), get mkisofs-1.11 for NeXTSTEP and build the image inside your guest OS. Use the command: mkisofs -L -N -r -v -l -m '*.wmd' -V