|Steve Jobs Comments on Apple's Java Discontinuation||Friday October 22, 2010
Macrumors has an article on the fuss about Java on the Mac. They quote Jobs as saying:
Sun (now Oracle) supplies Java for all other platforms. They have their own release schedules, which are almost always different than ours, so the Java we ship is always a version behind. This may not be the best way to do it.
It simply isn't true that “Sun (now Oracle) supplies Java for all other platforms”. IBM supplies Java for IBM's platforms, HP for HP's, even Azul systems does the JVM for their systems (admittedly, these all start with code from Snorcle - but then, so does Apple). In the beginning, Microsoft provided Java for Windows - but Sun took over when Microsoft violated their contract and made Java code written on Windows unable to run on other systems. Sun also provided the VM for Linux because there was no one else to do it. In all the other cases, the platform owners wanted to do the ports themselves so that they could put a lot of energy into it, and because they knew the platforms better than anyone else. Apple was the same: in the early days, they were insistent on doing the port themselves. They put terrific energy into it. They did a good job. But then, as OS X took hold and Apple was able to convince developers to target their non-portable/proprietary environment, Apple's fundamental control-freak tendency took over and they put less and less energy into Java. It also didn't help that the early ports that they did were heavily customized - far more than they needed to be. This made upgrading to subsequent releases very hard, and for quite a while Apple's JVM lagged behind all other platforms. But they eventually got their act together and their JVM upgrade pipeline got streamlined and they kept up very well in recent years.
None the less, there were recurring discussions about having Sun or the community shoulder the burden. There were lots of obstacles. One was that a lot of Apple's web sites (MobileMe, iTunes, the app store) were Java apps and they were nervous about not doing the QA themselves. The point became somewhat moot because Apple ended up using a lot of Sun hardware (yes!). But the biggest obstacle was their use of secret APIs. Yes, OS X has piles of secret APIs. Just like the ones that Microsoft had that contributed to their antitrust problems. The big area (that I'm aware of) where these are used is in graphics rendering.
A particularly ironic area was in aliased versus antialiased rendering: Apple's graphics pipeline is well designed: they do antialiasing beautifully throughout. The Java graphics spec has some careful wording to allow Apple-style antialiased-only pipelines to be used. Code that works well with this style of rendering is easy to write. Unfortunately, old Microsoft platforms only supported aliased rendering, and some (this was rare) applications would have rendering artifacts if antialiasing was turned on. These applications were broken according to the spec, and most authors fixed their apps so that they worked in both cases. But one developer took a serious "fuck you" attitude on this issue and forced Apple to implement aliased rendering - which they kept secret because it was such an awful thing to have to do. The "one developer"? Oracle, of course...