Newsletter sign-up
View all newsletters

Enterprise Java Newsletter
Stay up to date on the latest tutorials and Java community news posted on JavaWorld

JavaWorld Daily Brew

Thoughts on an Apple/Java divorce

 

A small degree of panic set in amongst the Java development community over the weekend,
as Apple announced that they were “de-emphasizing” Java on the Mac OS. Being the Big
Java Geek that I am, I thought I’d weigh in on this.

Let the pundits speak

But first, let’s see what the actual news reports said:

As of the release of Java for Mac OS X 10.6 Update 3, the Java runtime ported by Apple
and that ships with Mac OS X is deprecated. Developers should not rely on the Apple-supplied
Java runtime being present in future versions of Mac OS X.

The Java runtime shipping in Mac OS X 10.6 Snow Leopard, and Mac OS X 10.5 Leopard,
will continue to be supported and maintained through the standard support cycles of
those products.

--Apple
Developer Documentation

MacRumors reported that
Scott Fraser, the CEO of Portico Systems, a developer of Enterprise software written
in Java, wrote Steve Jobs an e-mail asking if Apple was killing off Java on the Max.
Mr. Fraser posted
a screenshot
of his e-mail and what he said was a reply from Mr. Jobs.

In that reply. Mr. Jobs wrote, “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.” …

There’s only one problem with that, however, and that’s the small fact that Oracle
(used to be Sun) doesn’t actually supply Java for all other platforms, at least not
according to Java creator James Gosling, who said in a blog post Friday, “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).”

Mr. Gosling also pointed out that it’s true that Sun (now Oracle) does supply Java
for Windows, but only because Sun took it away from Microsoft after Big Redmond tried
its “embrace and extend” strategy of crippling Java’s cross-platform capabilities
by adding Windows-only features in the port it had been developing.

--The
Mac Observer

Seeing that they're not hurting for money at all (see Apple
makes more than $1.6M revenue per employee
), there are two possible answers here:

  1. Oracle, the new owner of Java, is forcing Apple's hand, just like they're going after
    Google for their Java implementation.
  2. This is Apple's back-handed way of keeping Java apps out of the newly announced Mac
    App Store.

I don't have any contacts inside Apple, my guess
is #2, this is Apple's way of keeping Java applications out of the Mac App Store,
which was also announced yesterday. I don't believe there's any coincidence at all
that (a) the "Java Deprecation" announcement was made in the Java update release notes
at the same time (b) a similar statement was placed in the Mac Developer Program License
Agreement.

--devdaily.com

Pundit responses (including the typically childish response from James Gosling, and
something I’ve never found very appealing about his commentary, to be honest), check.
Hype machine working overtime on this, check. Twitter-stream filled with people posting
“I just signed the Apple-Java petition!” and overreacting to the current state of
affairs overall, check.

My turn

Ted’s take?

About frickin’ time.

You heard me: it’s about frickin’ time that Apple finally owned up to a state
of affairs that has been pretty obvious for more than a few years now.

Look, I understand that a lot of the Java developers out there bought Macs because
they could (it ran a pretty decent version of Java) and because there was a certain je
ne sais quois
about doing so—after all, they were watching the “cool kids” (for
a certain definition thereof) switching over to a Mac, and they seemed to be getting
away with it, the thought “Why not me too?” was bound to go off in somebody’s head
before long. And hey, let’s admit it, “going Mac” was a pretty nifty “geek” thing
to do for a while there, particularly because the iPhone was just ramping up and we
could all see that this was a platform we all of us wanted a part of.

But truth is, this divorce was a long time coming, and heavily overdue. C’mon, kids,
you knew it was coming—when Mom and Dad rarely even talk to each other anymore, when
one’s almost never around when the other is in front of you, when one tells you that
the other isn’t really relevant anymore, or when one of them really just stops participating
in anything going on in the other’s world, you can tell that something’s “up”. This
shouldn’t have come as a surprise to anybody who was paying attention.

Apple and Sun barely ever spoke to each other, particularly after Apple chose to deprecate
the Java APIs for accessing the nifty-cool Mac OS X Aqua user interface. Even back
then, Apple never really wanted to see much Java on the desktop—the Aqua Look-And-Feel
for Swing was only available from the Mac JDK, for example, and it was some kind of
licensing infraction to try and move it to another platform (or so the rumors said—I
never bothered to look it up).

Apple never participated in any of the JSRs that were being moved through the JCP,
or if they did, they were never JSRs that had any sort of “weight” in the Java world.
(At least, not to my knowledge; I’ve done no Google search through the JCP to see
if Apple ever had a representative on any of the JSRs, but in all the years I’ve read
through JSRs in-process, Apple’s name never seemed to appear in the Expert Committee
list.)

Apple never showed up at JavaOne to talk about Java-on-Mac, or about Java-on-anything-else,
for that matter. For crying out loud, people, Microsoft has been at JavaOne.
I know—they paid me to be at the booth last year, and they covered my T&E to speak
on their behalf (about .NET/Java compatibility/interoperability) at other .NET and/or
Java conferences. Microsoft cared more about Java than Apple did, plain and simple.

And Mr. Jobs has clearly no love for interpreted/virtual machine languages, if his
commentary and vendetta against Flash is anything to go by. (Some will point out that
LLVM is a virtual machine, but I think this is a red herring for a few reasons, not
least of which is that as near as I can tell, LLVM isn’t allowed on the iOS machines
any more than a JVM or CLR is. On top of that, the various LLVM personalities involved
routinely draw a line of differentiation between LLVM and its “virtual machine” cousins,
the JVM and CLR.)

The fact is, folks, this is a long time coming. Does this mean your shiny new Mac
Book Air is no longer a viable Java development platform? Maybe—you could always drop
Ubuntu on it, or run a VMWare Virtual Machine to run your favorite Java development
OS on it (which is something I’ve been doing for years, by the way, and I gotta tell
you, Windows 7 on VMWare Fusion on an old non-unibody MacBookPro is a pretty good
experience), or just not upgrade to Lion at all. Which may not be a bad idea anyway,
seeing as how Mac OS X seems to be creeping towards the same state of “unusable on
the first release” that Windows is at. (Mac fanboi’s, please don’t argue with this
one—ask anyone who wanted to play StarCraft 2 how wonderful the Mac experience was.)

The Mac is a wonderful machine, and a wonderful OS. I won’t argue with that. Nor will
I argue with the assertion that Java is a wonderful language and platform. I’ll even
argue with people who say that Java “can’t” do desktop apps—that’s pure bullshit,
particularly if you talk to people who’ve got more than five minutes’ worth of experience
doing nifty things on the Java desktop (like Chet Haase and Romain Guy do in Filthy
Rich Clients
or Andrew Davison in Killer Game Programming in Java).
Lord knows, the desktop experience could be better in Java…. but much of Java’s weakness
in the desktop space was due to a lack of resources being thrown at it.

Going forward

For the short term, as quoted above, Java on Snow Leopard is a fait accompli.
Don’t panic. It’s only with the release of Lion, sometime mid-2011, that Java will
quietly disappear from the Mac horizon. (And even then, I expect that there will probably
be some kind of hack that the Mac community comes up with to put the Snow Leopard-based
JVM on a Lion box. Assuming Apple doesn’t somehow put in a hack to prevent it.)

The bigger question, of course, is the one facing all those “super-hip” developers
who bought Macs thinking that they would use that to develop their enterprise Java
apps and deploy the resulting compiled artifacts to a “real” production server system,
like Linux, Windows, or Google App Engine—what to do, what to do?

There’s a couple of ways this plays out, depending on Apple’s intent:

  1. Apple turns to Oracle, says “OpenJDK is the path forward for Java on the Mac—enjoy!”
    and bails out completely.
  2. Apple turns to Oracle, says “OpenJDK is the path forward for Java on the Mac, and
    here’s all the extensions that we wrote for Java on the Mac OS over all these years,
    and let us know if there’s anything else you need” and bails out more or less completely.
  3. Apple turns to Oracle, says “You’re a douche” and bails out completely.

Given the personalities of Jobs and Ellison, which do you see as the most
likely scenario?

Looking at the limited resources (Mike Swingler, you are a champion, let that be said
now!) that Apple threw at Java over the past decade, I can’t see them continuing to
support a platform that they’ve already made very clear has a limited shelf life.
They’re not going to stop you from installing a JRE on your machine, I don’t think,
but they’re not going to help you in any way, either.

The real surprise hiding in all of this? This is exactly what happens on the Windows
platform.
Thousands upon thousands of Java developers have been building—and
even sometimes deploying!—to Mr. Gates’ and Mr. Ballmer’s platform for years, and
the lack of a pre-existing JRE has never stood in the way of that happening. In fact,
it might actually be something of a boon—now we can get past the rather Byzantine
Java Virtual Machine installation directory circus that Apple always inflicted on
us. (Ever tried to figure out where the JVM lives on a Mac? Insanity! Particularly
when compared to a *nix-based or even Windows-based JVM installation. Those at least
make some sense.)

Yes, we’ll lose some of the nifty extensions that Apple developed to make it easier
to interact with the desktop. Exactly like what happens on a Windows platform. Or
any other platform, for that matter. Need to get at the dock? Dude—do what Windows
and Linux guys have been doing for years—either build a shell script to do that platform-specific
stuff first, or get to it through JNI (or, now, its much nicer cousin, JNA).
Not a big deal.

Building an enterprise app? Dude…. you already know what I’m going to say.

Looking to Sun/Oracle

The bigger question will be what Oracle does vis-à-vis the Mac OS. If they decide
to support the Mac by providing build infrastructure for building the OpenJDK on the
Mac, wahoo! We win.

But don’t hold your breath.

Why? A poll, please, of the entire Internet:

  • Would all of those who use Java for desktop Mac applications, please raise your hands?
  • Now would all of those who use Mac OS X Server as an enterprise Java production server,
    please raise your hands?

Count the hands, people. That’s how many reasons Sun/Oracle can see, too. And those
reasons have to come in high enough in order to be justifying the cost to go through
the costs of adding the Mac OS to the OpenJDK build toolchain, figure out the right
command-line switches to throw in the Mac gnu C/C++ compilers, figure out how best
to JIT for the Intel platform while running underneath a Mac, accommodate all the
C/C++ headers on the Mac platform that aren’t in the same place as their cousins on
Windows or Linux, and so on.

I don’t see it happening. Donated source code or no, results of the Rick Ross-endorsed
“Apple/OpenJDK petition” notwithstanding, I just don’t see Oracle finding it cost-effective
to support the Mac in the OpenJDK.

Oh, and Mr. Gosling? Come out of your childish funk and smell the dollars here. The
reason why HP and IBM all provide their own JDKs is pretty easy to spot—no one would
use their platform if there weren’t a JVM for that platform. (Have you ever heard
a Java guy go, “Ooh! Ooh! I get to run my code on an AS/400!"? Me neither. Hell, half
the time, being asked to deploy to a Solaris box made the Java folks groan.) Apple
clearly believes that the “shoe has moved to the other foot”—that they have a critical
mass of users, and they don’t need to care about the Java community any more (if they
ever did in the first place).

Only time will tell if Mr. Jobs was right.

Update Well, folks, it would be churlish of me to say "I told you so", but....

What I will say, though, is that the main message out of this is that apparently James
Gosling has so little class that he insists on referring to the current owner of his
platform as "Snorcle", a pretty clearly derogatory reference in the same vein as calling
the .NET platform owner "Microsloth" or "M$". Mr. Gosling, the Java community deserves
better than that. Try to put your childish peevishness aside and take the higher road.
Seriously.

Enterprise consulting, mentoring or instruction. Java, C++, .NET or XML services.
1-day or multi-day workshops available. Contact
me for details
.