The heritage of different operating systems has been discussed many times. Mac OS X includes code from Mach and BSD, AmigaOS is based on TRIPOS, MS-DOS is a CP/M-86 clone and Windows NT is modeled after VMS. But what machines and operating systems were used for cross-compilation and bringup of these systems? In order to find this out about Mac OS X, I talked to a few people working at NEXT and Apple, and people that worked on Mach and BSD.

Currently, Apple only ships Intel-based machines. Mac OS X for Intel was released in 2006. The Intel version had been “leading a secret double life” since 2000, i.e. Mac OS X existed for Intel all the time, but was not released. In that time, Mac OS X was never self-hosting; instead, it was cross-compiled on PowerPC Macs. The first released version of Intel Mac OS X was a version of 10.4 for the Pentium 4 based “Developer Transition Kit” in 2005.

The first version of what would later be Mac OS X was “Rhapsody DR1” released in 1997. It ran on PowerPC 604 Macintoshes (the 603 was not supported because it lacked a hardware pagetable walker) and was cross-compiled from OpenStep 4.2 running on Intel Pentium II CPUs. Rhapsody, which was basically OpenStep 5.0, also continued to run on Intel, but as mentioned before, Intel became a second-class architecture. Actually, somewhere between Rhapsody and OS X 10.0, there was a time when the GUI was not built for Intel.

Nextstep 3.1 from 1993 was the first version of Nextstep/OpenStep to support Intel CPUs (and also PA-RISC and SPARC) next to the existing Motorola 68K support. Bringup was done on a 25 MHz 68040 NeXTstation running NextStep 2.1, and the target CPU was a 486DX50.

At NEXT, the systems used for bringup of the original 68030 NeXT Computer were Sun machines running SunOS 3.0, a BSD-derivative. The NEXT engineers ported the Mach 2.0 kernel from VAX to M68K. So this port was not only cross-architecture, but cross-OS.

Mach 1.0 was first written for VAX and was brought up on VAX-based 4.2BSD machines at Carnegie-Mellon University. Coincidently, 4.2BSD evolved into SunOS 1.0 (and 4.2BSD/VAX machines were used for its bringup), and the BSD codebase also ended up in Nextstep.

Now that we arrived at BSD, we could go back the history of UNIX, which I am not going to do at this point.

So, to summarize, BSD/VAX was used to develop Mach/VAX, and SunOS/M68K was used to port Mach to 68K, Nextstep/68K was used to port itself to i386, and the i386 version to port itself to PowerPC, and then the PowerPC version to maintain the i386 version. Today, Mac OS X for Intel is self-hosting again.

Now I would love to see is the same kind of bringup history for Linux (Minix, …), AmigaOS (SunOS 1.x, …), BeOS, Copland (Mac OS?), Windows NT (VMS? DOS?), OS/2 (DOS? AIX?), MS-DOS (CP/M?), and of course the common bringup ancestors of so many systems, BSD and UNIX. It would also be interesting to extend this information with the respective compilers used. So if you can contribute something in the comments here or on your blogs, that would be great.