Independence Day for Java?

I am on sabbatical in Vietnam right now, and today the country celebrates independence day. (On September 2, 1945, Ho Chi Minh gave his declaration of independence speech.)

I read James Gosling's latest blog and wondered whether there ever will be an independence day for Java.

As James reminds us, there was a time when Oracle wanted to set Java free. I had naively thought we were pretty much there, with a JDK under GPL. But the situation is much murkier, and it is not at all clear under what conditions one can rely on a freely available Java platform as the foundation of one's work. I read Neal Gafter's blog, in which he writes: “Even though I am a contributor to openjdk7, I do not have a license to Oracle's patents that are necessarily infringed by the use of the openjdk7 source base.”

Presumably, there is a process by which Neal could get a patent grant, by getting a license for the TCK, and making his implementation pass it. However, a TCK doesn't yet exist for JDK 7, and the license is only good for GPL implementations that are “being substantially derived from OpenJDK Code”, whatever that may mean.

What's all the fuss about? First off, why GPL? That was so Microsoft couldn't “embrace and extend” Java. Fair enough. But why isn't there a straight patent grant that goes with any GPL implementation? As far as I can tell, Sun wanted to have their cake and eat it too: benefit from open source and keep its mobile phone revenue. That's why we have the “field of use” restrictions.

For a while, it worked. Sun milked its Java ME platform for what remained of it in the feature phone business, ignored Google's “embrace and extend” of mobile Java for smartphones, and enjoyed the benefits of broad community involvment in the Java Community process. I know that many people complained about that process, and it had its problems, but it also delivered results. With one exception: the absence of a JSR for JDK 7.

I think it is no longer working. The Google lawsuit has brought the contradictions out in the open. Java is controlled by a single corporate entity, in much the same way that .NET is. Yes, you can make a GPL clone of JDK 6 that runs on desktops and servers. That's nice. But if you want to run Java on tablets, smartphones, or embedded devices, you'll pay. If you want to use a version of Java that is not “substantially derived from OpenJDK Code”, you'll have to negotiate a TCK license, which Oracle may or may not grant.

For a free software developer, what does that mean? We can almost certainly count on access to a free JDK 6 implementation. It's in our interest to get at least one such implementation, maintain it on free operating systems, and innovate on top of it, independent of Oracle and the JCP. However, there is no way of knowing whether language, platform, and VM innovations, if and when they do materialize, will be available freely, so we shouldn't count on it. As Neal points out, there is minimal incentive to be involved in their development. Overall, that is not so different from what one gets with .NET/Mono/C#.

Of course, Oracle may not care, and laugh all the way to the bank. Then again, how much mirth can there be? Java ME is a lost cause and revenue will dry up soon enough. The Google lawsuit may or may not bring in a bundle, but it may well take a while. There is no other substantial Java licensing revenue outside the mobile/embedded space, and the GPL JDK makes it hard to rustle up any.

So, maybe Oracle will see the light and set Java free? In the manner that they supported in 2007, with an independent foundation, with development funded by multiple parties? That will be a day to celebrate—independence day for Java.