Alex headshot

AlBlue’s Blog

Macs, Modularity and More

Ruminations on Apple

2010, java, mac

I've been an Apple user since the switch to OSX back in 2001. I previously had a NeXT box back in university called koyaanisquatsi.cam.chu.ac.uk – and yes, it had the accidental u in there – referred to as “a very expensive and very black way of checking e-mail”. Even then, the megapixel display was higher than the SVGA and XVGA common on Linux boxen at the time, and it had voice memo support which you could embed in a mail and send (aka Lip Service – see Jobs giving a demo at 3:14 at the release of NeXTSTEP 3.0:

OK, it looks dated now; but remember this was back in 1992 (check the copyrights at the end of the video if you don't believe it). At the time, Windows 3.1 had just been released and and Linux 1.0 was two years in the making from its initial 1991 release. To say it was ahead for its time seriously undermines its power at the time; the Objective-C language and NSObject hierarchy (which ultimately became Cocoa on OSX) gave it its drag-and-drop behaviour between applications. My first introduction to OO languages was in Objective-C; both Java (and Windows 95) didn't come onto the scene until 1995. And let's not forget that a NeXT box was used to create the world wide web in 1990.

Skip forward through Jobs' return and OSX, and I've been an avid Mac user since. It's not just about the build quality (though arguably the hardware is second to none) but the operating system and foundation is really a key part of the OSX experience. And as a developer platform it is great; it comes bundled with Python, Ruby, AppleScript, and has integration with document parsers, quick indexing and hardware support for a number of USB and other external devices out of the box.

In fact, when Jobs rolled out onto WWDC 2001, he said that he wanted to make OSX the best platform for Java development. And until a few years ago, that was arguably the case. There was concern during the transition of PPC to Intel with Java 6 being only available on 64-bit Intel systems but the feeling was that it was a transitional issue and a way of encouraging developers to move forwards. Unfortunately, it meant that Java developers couldn't develop against Java 6 APIs and then sell them to customers on OSX 10.5 platforms; but in reality, the Java marketplace for end-user applications has always been pretty small.

For developers, though, OSX has historically been far more popular than its market share would suggest. Go to any tech conference and the number of Macs in use are likely to be above average. Whatever language you use, Mac had it all. Many Mac developers use laptops or desktops for doing development work, even if that's on a platform-neutral runtime like Python, Ruby or Java. And although the Java language might be jaded, the JVM is used by many more languages, like Scala, Groovy and JRuby/JPython.

So Apple's departure from providing a Java runtime was a significant concern for me. OSX's server marketshare isn't likely to be significantly affected – Jobs' focus on consumers means that OSX server is never likely to get a foothold – but what it's really going to hit is developer platforms. Whatever your favourite IDE (Eclipse, NetBeans, IntelliJ), they all require a Java runtime to operate. Without an Apple-provided runtime in the future, it means that upgrading to future OSX platforms may not be worth the investment. My aging G5 needs replacement in the near future; I had been eyeing up the new Mac Pro; but the G5 will continue to work as a Java development platform whereas the next version of OSX on a Mac Pro may not.

Apple's push for continued Objective-C on the iPhone makes sense; and OSX-based GUI applications in Objective-C is also total sense as well. There's a lot of strength in the frameworks and the language, which isn't immediately obvious to those who have lived in the Java world for many years.

But the key problem is that many developers on the Mac *don't* use those languages, because their customers have no interest in OSX-only solutions. For better or worse, OSX is the only system that hosts Objective-C applications; and whilst GNUStep and and The Cocotron exist to assist in porting applications to other platforms, ironically it is Apple's own iTunes and QuickTime products that are the widely used Cocoa ported applications.

Apple has always been at the forefront of ditching technology that is past its sell-by date. It ditched floppy discs with the introduction of the iMac range; it ditched the PS/2 (and ADB) connectors for USB before it was widely used; it's started to evict hard drives and optical drives from its lightest laptops. Has Java fallen foul of this as well? Will there never again by a well-ported JVM on OSX?

It's too early to say whether Oracle can save Java; and whilst Jobs wants others to ship JVMs, it's not clear whether anyone else wants to do it, either. Apple has a great track record for integrating technology – for example, DTrace, and before it ditched it, ZFS – but when Apple abandons something, it does it in style. All of the hooks for the OSX specific behaviours (including the recently released support for fast shutdown) were things that Apple made possible. Even Swing didn't look too bad on a Mac thanks to the effort put in by Apple's Java team.

Although SoyLatte has been cited as a possible successor for OSX, the Harmony project shows that few people are interested in maintaining a Java platform. Even if Oracle does take over producing a Java version (and it's not clear why it should; it supports development tools but doesn't run Oracle on any OSX platforms), the integration with the UI is likely to be worse than it currently stands. As Scott Kovatch, former Apple engineer on the JVM platform said, All the talk about how well OpenJDK and X11 work together on the Mac is extremely depressing.

There's a small possibility that Oracle will manage an OSX port going forwards. But even if it does in the short run, I can't see it being supported in the long run. And ultimately that means that Mac OSX is transitioning from a development platform to a user-driven content platform. Perhaps it's time to dust off my Linux skills and see if it has made any significant progress in the UI space in the last couple of decades.