(Don't Fear) The Reaper

May 22 2019

With the rapidly-upcoming introduction of UIKit apps to the Mac, I've been reminiscing on Twitter quite a bit about Apple's transition to Mac OS X, and just how NEXTSTEP and Mac OS found common ground despite being two very different OSes both architecturally and from a design standpoint. There are a couple of different vectors I will follow here, if you permit me, that will converge at the same place:

One of the artifacts of the final days of NeXT was a prerelease version 4.0 of NEXTSTEP. Despite appearing before OPENSTEP (the 4.0 operating system that succeeded NEXTSTEP), this NEXTSTEP 4.0 build, which I will abbreviate to NS4 herein, has a vastly different UI and set of apps. It had new colored window chrome, background images, and a tabbed shelf at the bottom of the screen — quite the departure from the grayscale NEXTSTEP we knew.

However, it was the built-in apps that piqued my interest. NS4 has redesigned and rebuilt variants of many of the apps that shipped with NEXTSTEP, but none of these changes later made it to OPENSTEP. In fact, they don't resurface until years later, after Apple acquires NeXT and revamps OPENSTEP with the Mac look and feel, in a project, named Rhapsody, that later became Mac OS X Server 1.0.

It's fun to track the progression of the apps through this period. Let's take a look at the NS4 version of Mail, from 1995, and follow it through all the way to OS X.

Mail on NS4 Mail on prerelease NEXTSTEP 4.0 (1995)

NeXT had recently, with Sun, finalized 'OpenStep' (not to be confused with OPENSTEP the OS), a cross-platform refactor and sweeping revamp of all the old NEXTSTEP frameworks. NS4, then, seemed to be the across-the-board revamp of the system apps to take advantage of OpenStep. These apps, thanks to OpenStep's portability, would run on Solaris and Windows, as well as NeXT's own OS. However, when NeXT actually shipped the next version of the OS, now renamed OPENSTEP (from NEXTSTEP), it didn't include them. Instead, OPENSTEP had an older, ironically pre-OpenStep set of apps, despite shipping a year after this NS4 beta. You can tell immediately by looking at Mail that this is a step backward.

Mail on OPENSTEP Mail on OPENSTEP (1996)

It seems obvious with hindsight that all of the fancy upgrades NeXT was working on were put on the shelf in 1995 when they realized the company had no future without an acquisition. Perhaps this NS4 build was intended to woo potential buyers like Apple? Sure enough, Rhapsody includes these revamped apps from the get-go.

Mail on Rhapsody Mail on Rhapsody (1997)

Rhapsody was Apple's first attempt of merging the worlds of Macintosh and NeXT, and architecturally it's very much a NEXTSTEP 5.0. The first build of Rhapsody was released to developers in August of 1997, about seven months after the acquisition closed. The design goals for this developer beta were relatively simple: port OPENSTEP to PowerPC, adopt the Mac HIG, design language and iconography, and provide a 'Finder' and desktop. Here, you can see the progression from left (OPENSTEP), to Rhapsody Developer Release 1, to right (Mac OS X Server/Rhapsody 1.0).

NeXT's UI wasn't Mac-like at all; its machines were designed as UNIX workstations for the professional and academic markets, and you can almost feel that from its UI design language. Just because OPENSTEP and Mac OS were both mouse & keyboard OSes didn't mean transitioning was straightforward. Multitasking was very different. Menuing was very different. Famously, NeXT's OS never had a desktop nor menu bar across the top of the screen. Even something simple like scrollbars, controls we take for granted today, were on the left on NEXTSTEP. Apple had to teach NeXT's AppKit what being 'Mac-like' meant, and it required a lot of work over many years.

Mac OS X Server Mac OS X Server (1999)

All of the Mac-like-ness of Mac OS X Server was still controlled by a preferences key in AppKit, and in fact you can switch it off completely and revert the system back to looking like OPENSTEP, which is a wild experience by itself.

Mac OS X Server in 1999 looked and acted very much like a 'Mac OS Pro'; it had the same look and feel as the Mac, but retained the power of UNIX and all of NeXT's frameworks. It even built upon some NeXT features like menus you could tear off and float onscreen. However, Mac OS X Server had a fatal flaw that had become apparent to Apple in the years since the NeXT acquisition: Mac OS X Server didn't run legacy Mac apps, and Mac developers were not on board with rewriting everything completely in Objective-C and AppKit.

For Mac OS X to actually work as a successor to Mac OS for Apple's customers, they were going to have to gut it and start over. The solution? Apple was going to port the legacy Mac OS toolbox into a new compatibility library, called Carbon, and make it the linchpin of the consumer Mac OS X experience.

Even in 1997, Apple knew they wanted consumer Rhapsody to be something special.

However, once it became clear that Apple needed to rethink its strategy completely, Mac OS X became a completely different thing to the Mac OS X Server that preceded it. It had a few tentpole changes: they would replace the kernel and driver model, replace Display PostScript rendering with the PDF-based Quartz, deeply integrate Carbon and make legacy Mac apps first-class citizens, and adopt a brand new UI called Aqua.

To do this, a lot of NeXT's pure foundation and frameworks were rearchitected atop a common foundation with Carbon, and the classic Mac OS' Appearance Manager became the basis for Aqua's UI. All of AppKit's own menus and widget/control rendering were replaced with this Mac OS foundation, which of course meant that Carbon apps and Cocoa (AppKit) apps would look the same despite their vastly different architectures.

Apple needed to show developers that Carbon was going to be a real and valid way forward, not just a temporary stopgap, so they committed to using Carbon for the Mac OS X Finder. The Carbon version of Finder was introduced in Mac OS X Developer Preview 2, before Aqua was revealed; it acted a bit more like NeXT's, in that it had a single root window (File Viewer) that had a toolbar and the column view, but secondary windows did not. At this stage, Apple didn't quite know what to do with the systemwide toolbars it had inherited from NEXTSTEP.

Mac OS X Developer Preview 3 was the first time we saw Aqua in a build, and with it came transformational change to the Mac OS X UI. We were into year three of Apple's transition to NeXT technology, but Apple was now on a path to finding what 'Mac-like' should be, rather than trying to match what it was in classic Mac OS. Apple had a better understanding of what it wanted to do with navigation in Finder, but elements of the UI were still comically oversized.

Finder in DP3

While Finder evidences the transition from the Carbon side, we can revisit Mail to see how AppKit/Cocoa was faring in this same OS release.

Mail on DP3

Mail preferences window

Mail, the same Mail as we saw earlier in this piece, now looks very different indeed, but still betrays its NeXT roots with the iconography in its preferences window. But clearly, it looks very similar to the Carbon-based Finder; as you can see, both environments were starting to come together into something new, with a shared design language.

Mac OS X shipped to consumers in 2001, and was refined massively from this first implementation of Aqua.

Mail on Mac OS X Mail on Mac OS X (AppKit, 2001)

Finder on Mac OS X Finder on Mac OS X (Carbon, 2001)

It had taken Apple four years to find the new 'Mac-like', and this is the template Mac OS X has followed ever since. Here we are, eighteen years later, and all of the elements of the Mac OS X UI are still recognizable today. So much of what we think of the Mac experience today came from NEXTSTEP, not Mac OS at all. AppKit, toolbars, Services, tooltips, multi-column table views, font & color pickers, the idea of the Dock, application bundles, installer packages, a Home folder, multiple users; you might even be hard-pressed to find a Carbon app in your Applications folder today (and Apple has announced that they won't even run in the next version of macOS).

In 2007, Apple got the chance for a complete do-over of Mac OS X with a modern architecture optimized for touchscreen devices with powerful GPUs, but with thermal, resource, and battery constraints. That do-over was, of course, iPhone OS. Instead of AppKit, which had come all the way from NEXTSTEP, was refactored and rebuilt into OpenStep, and powered the first decade of Mac OS X at Apple, Apple decided to build something fresh with everything they had learned: UIKit. As technology has progressed, UIKit and the devices it powers have become more and more complex, and powerful.

With macOS 10.15, UIKit is finally coming back to the Mac to serve as a top-tier native application development framework alongside AppKit. This is the start of Apple's next transition, and just like last time, it's almost unfathomably difficult to see how these two completely different architectures will cooperate and find common ground.

Just like last time, we'll start with baby steps: UIKit adopting the metrics and styles of macOS, AppKit adopting some of the interactions of iOS, and the two sides growing closer over time by sharing more and more DNA.

But just like last time, the road ahead is much longer than we can see from this perspective; we're building towards what comes next, even if we don't yet know what that is.

A really interesting question we probably won't have an answer to for years to come is whether UIKit is the 'Carbon' or the 'Cocoa' of this transition. I think the only appropriate answer is 'yes'. UIKit is the present, and the developer ecosystem it will bring with it is incredibly important. AppKit is also the present, and it provides and powers the Mac as we know it.

I'm sure we will have great, genre-defining apps from both UIKit and AppKit on the Mac. With Carbon, we had iTunes, Photoshop, Microsoft Office and Final Cut Pro. Eighteen years on, Carbon is finally reaching its end date, and the transition of all these apps to Cocoa/AppKit is complete. If AppKit still has eighteen years left ahead of it, I think the Mac will be just fine.

Both classic Mac OS and NEXTSTEP came to an end; the Mac did not. I think everybody can agree the unified whole was much greater than the sum of its parts, but this was not clear at all in 1997. The future is still being written, and we each, 'Mac developers' and 'iOS developers' alike, will get to be there to help shape it.

Needs more cowbell.