A Bridge too Far

Download PDF


This short article will not have a happy ending. I’m sorry to start the series on such a depressing note, but such is life: not all beginnings are happy and joyful.

The story starts with me getting my hands on a huge collection of SW for old Crays. Someof the tapes I suddenly had access to contain UNCIOS 4.0 for the X-MP.


Yes, UNICOS. That’s a UNIX variant, developed by Cray to support their line of supercomputer when they’ve realized that their proprietary batch operating system, COS nears the end of its life and the world around them is quickly moving towards the – then – new operating system from Ken Thompson and Dennis Ritchie. Cray ported the AT&T System V Release 2 version to their architecture. They’ve added several features from BSD, developed a new file-system and released it originally with the Cray-2 in 1985. Later, the OS got released on the X-MP line as well.

Pretty soon, COS was completely phased out and UNICOS was the workhorse operating system shipped with all X-MP derivatives, eventually getting replaced by other OS-es, that used similar marketing names but traced their origins back to different roots, like UNICOS-MAX or UNICOS/mk. Nowdays UNICOS is all but dead as Cray jumped on the Linux bandwagon, selling their own version under the name ‘Cray Linux Environment’.

The tapes

So, what’s on the tapes? I have several, containing:

  1. the IOS and mainframe kernels
  2. the content of the /usr partition

What is missing unfortunately is the root file-system.

With help from Al Kassow from the Computer History Museum (and maintainer of the bitsavers archive) I’ve gotten a digital copy of these tapes. USB sticks are so much nicer then 9-tracks…

It was fairly easy to get the system going on my simulator. One surprise was that the main system console came up on the IOS: apparently it had support for TTY as well. I didn’t know that!

However, here’s the problem: UNICOS, like all UNIX variants I’m aware of have a kernel that’s little more than a collection of syscall implementations. Most of the actual work, including the setting up of terminal and user I/O is delegated to user processes. The boot almost immediately attempts to mount the root file-system, and creates a process, called ‘init’.

Now, the problem: I don’t have a root fs. I don’t have ‘init’. In fact I don’t even have the means of creating any file-system as I don’t have ‘mkfs’ either. So, not surprisingly soon after boot, the kernel crashes. It says ‘invalid super block magic number’ – which is UNICOS talk for ‘I don’t recognize the file-system on the root drive so I can’t mount it’.

In desperation I’ve reverse-engineered the file-system (called C1FS) and made a tool that can create virtual hard-drives using this FS and even copy files over to it. This allows me to copy another executable into the location where ‘init’ should be, but of course still no cheese: all processes expect for example STDIO to be functional, which is set up by ‘init’. So they just terminate almost immediately. Even if they didn’t, it wouldn’t be much of a help, just allow me to debug the startup process a little further.

In closing

All in all, without a root FS this project is doomed.

So, please, please, please! Anyone who has something UNICOS-related for X-MP, contact me! This is really-really close to work, yet so far away.