Ten years ago, on March 24th, 2001, Mac OS X came out. A first, publicly available, one point oh unpolished version of Apple’s ‘next’ (pun intended) operating system. An operating system that Apple had been trying, in one way or another, to create for more than ten years. Remember Pink? Taligent? Copland? Gershwin? Mythical codenames to those that heard of them in the 1990s of either projects that promised amazing experiences compared to Mac OS Classic and that were never finished or released as planned, or spun-off products that died after a few short years. Mac OS X, what finally became a cornerstone of Apple’s platform well beyond the Mac and a catalyst of its success in the 2000s was a reincarnation of NeXTSTEP in Apple’s colours. Fusing NeXTSTEP’s core and frameworks with the Mac OS of old as one product that didn’t exactly know itself. A new skin, the same — amazingly advanced for their time — underpinnings.
In this short article I will describe, in summary, some experiences with Mac OS X from the point of view of a software engineer as opposed to a user, over the past ten years: The initial chaos of integration, Apple’s flirtation and dilemma with Java, the modernisation of Objective-C, the eventual coherence of the APIs and the extension of the system to support Touch in a way that was never achieved before.
NeXTSTEP frameworks used Objective-C. It was a language unknown to 99% of programmers out there in 2001. I had only heard of it while fiddling with GNUStep a few years earlier. In the early 2000s you could still find C++/Corba programmers in major service companies (as opposed to large software houses or systems development divisions) and Java was only starting, slowly but increasingly, to become the preferred platform for enterprise software. I remember meeting amazing and suitably eccentric software engineers — not merely the subpar ‘developers’ that are increasingly common nowadays in service/enterprise environments — that proudly proclaimed ‘Java is for girls!’ and other elitist, sexist jokes like that. Anything less than Alexandrescu and Sutter-class C++ was unacceptable to them. Knowledge of x86 assembly was standard among their friends. How could a person like that appreciate Objective-C? I felt comfortable hanging out with those people because I had gone through the rings of fire of learning, liking and using assembly, ‘high-level’ [insert CPU here] programming (irony!) and C/C++, but I also enjoyed the elegance and simplicity of Objective-C and Cocoa for rapid application development.
For a developer, the elegance of OS X, the power stemming from commercial support, amazing attention to detail, the BSD/Mach underpinnings, POSIX compliance and — last but not least — Apple’s amazing machines, meant that the first demographic to embrace the new Apple platform were the geeks. Gosling was a cheerleader for OS X, as were several prominent figures in the industry, including Tim O’Reilly. Mac OS X promised to be the ‘holy grail’ of desktop and workstation computing, and Apple appealed to that demographic of knowledgeable people that were fed up with Microsoft and frustrated with the kitsch, backwards and chaotic culture of linux. Yet, it wasn’t only the developer experience that was vastly different to both Windows and Mac programmers; it was also the user experience.
In 2001 OS X was still a ‘construction yard’ of a platform. Many people called 10.0 a beta. It actually was in many respects. 10.1, a free upgrade that came out about six months later, made things a bit better, but was still incoherent and unfinished in many respects. It was only Jaguar (10.2) in August 2002 that made things ‘great’ and from then on OS X has established itself as the best desktop Operating System on this planet. Applications were starting to support OS X en masse, performance was getting better, the APIs were slowly getting to a mature point that allowed decent apps to be easily developed. In this process an amazing platform slowly came into place: CoreAudio, CoreVideo, CoreImage and then CoreAnimation, Quartz, the updated Cocoa APIs including CoreData and bindings, the updated development toolchain that streamlined development and improved performance. Building blocks that, if used properly, gave immense power to Apple’s developer community.
Apple, faced with the rapid obsolescence of its frameworks and the need to create solid, future-proof foundations for its new Operating System, flirted with the idea of transitioning to Java as the language of choice. This became clear when they ported WebObjects to Java in the early 2000s. It’d be a huge bet for the company, and one that never materialised, probably for licensing reasons if anything. Apple always provided great support for Java (albeit being a bit slow in its release cycles) both for enterprise development and desktop development (viz. the Java Cocoa APIs and the Java bridge). It was the time when Microsoft was describing how the future versions of their OS would making heavy use of ‘managed’ code, be it managed C++, C# or — sigh — VB running over the CLR. ‘Managed code’ was key for Microsoft as it promised a substantial improvement on their — critically important — record on security. Apple, on the other hand, while enjoying the higher stability and security that its — obscure by any measure — platform offered, had a mess in its hands: POSIX APIs, old Carbon APIs and the new Cocoa APIs that mandated Objective-C and that the company was trying to ‘sell’ to developers. There was a period between 2001-2005 when you actually had to use at least two of the three to accomplish certain tasks when developing application software for the Mac and new Cocoa APIs appeared very frequently. Users never really knew the difference, but developers had to make smart tricks and compromises to make things work seamlessly. Fortunately, the Mac software developer community is one of the few communities of software developers that actually cares a lot about the experience offered by their software, irrespectively of how much trouble they had to go through to achieve it.
In 2005 Apple decided to stick with Objective-C and Cocoa and modernise them instead of migrating to Java or any other managed code platform. The first signs of this was the deprecation of the Cocoa-Java APIs in 10.4 and it was followed by the reduced interest of the company in Java. Objective-C 2.0 arrived in 2007 with a garbage collector that made memory management ‘easy’ for those familiar with managed code environments. At the same time, the company was preparing their Touch revolution that was made public in January 2007 with the iPhone and the — then — iPhoneOS. Apple has managed to complete the revamp of NeXTSTEP into a fantastically modern, elegant OS both for developers and users in ten short years. During this time Windows has seen the $4bn disappointment called Vista being shunned by corporations and users alike and a subsequent serious improvement in Windows 7 that took the platform in safe waters once again and linux has, in many ways, remained more or less as bad as it was in 2001, despite the vast changes in the codebase and the numerous under the hood improvements — the current debacle regarding GNOME3/Shell and Unity as well as the sad state of KDE4 are disappointing proofs of why the linux community, despite all the work that’s been done over the yeras is actually running in circles, constantly reinventing the wheel instead of focusing on building the best possible desktop.
In short ten years, Mac OS X, building upon a number of robust open source foundations like OpenGL, KHTML/Webkit, Darwin/BSD, CUPS and the amazingly well-designed frameworks and APIs from NeXT and Apple has been transformed from a schizophrenic platform embodying thirty years of engineering and software paradigms to a modern, powerful, elegant platform that is — without a doubt — the reference for both desktop and mobile computing. A platform that convinced the world to use Objective-C to craft beautiful applications, that seamlessly transitioned from PowerPC to x86, that rapidly extended its support to Touch, not merely by supporting it, but by showing the world how to do it properly.
It may not be without flaws, it may indeed lag behind both Windows and linux desktops in some areas, but overall there’s little that OS X can’t do better than anything else on the market today for the vast majority of people. Given its state ten years ago and the competition it faced during its development, it’s undoubtedly a great feat of engineering and a fantastic user experience from a company left for dead in 1997 with a market share that could’ve been considered a rounding error and little to no mindshare, when OS X first came out. My ten years with Mac OS X were most definitely the best I’ve had with any Operating System to date. Happy Birthday OS X!