It’s finally happened! Sun has released Java under an open source license. Not only that, they did it in the best possible way: using GPL version 2, not some bizarre concoction of their own. Congratulations to Jonathan Schwartz, James Gosling, and everyone else involved with this decision.
What’s surprising, of course, is how long it took. We’ve talked about it for years, written articles and editorials–but after lots of “maybe next year,” some of us never really believed it would happen. And it’s worth noting that a complete JDK hasn’t yet been released; just the compiler (javac) and the Hot Spot VM, with the rest of the JDK coming in the first half of 2007. But what’s available under the GPL today is substantial: as Gosling has said on a number of occasions, the JVM is the crown jewel.
So, now that we have the crown jewels in our hands, and the other bits coming in a few months, we need to ask the hard question. Is it too little, too late? It’s certainly not too little. But too late?
Sun has always been a company that many developers have loved to hate. People have been dancing on Java’s grave ever since Gosling first gave us a look at a USENIX conference back in 1995. I know–I was there. I doubt that this announcement will convince any of the historical Java-bashers. For them, the license is irrelevant.
More to the point: Java has been the birthing ground or proving ground for many important technologies: the first web containers, Jini, JXTA, aspect-oriented programming, Hibernate, and Spring, to name a few. Lucene made it easy for developers to integrate sophisticated search engines into their applications. The JAIN community had a working, web-startable SIP phone long before VoIP became popular. EJB first interested me because I could see a way to write a database application without writing SQL. That idea is still pretty radical. GPL’d Java will do a lot to make the achievements of the Java community more visible: more people will be willing to look at what Java developers are doing, and take advantage of the great wealth of innovation that Java has driven.
But that isn’t the whole story: that street runs in both directions. As you probably know, EJB 2.0 and 2.1 went badly off course. Whatever promise EJB showed early on, EJB 2.0 and 2.1 had massively complex APIs that made them nearly unusable. These APIs weren’t driven by developers and what they wanted, but by corporate partners and what they thought they needed: software platforms that could solve virtually any problem, while generating nice consulting fees. Clarity and simplicity weren’t virtues that counted for anything. On a number of occasions, Gosling said “Simple things should be simple” (or some variant thereof) from the JavaOne podium. That’s a focus Java has lost–and if you hear that slogan in the next year, you’ll probably hear it from David Heinemeier Hansson or someone else working with Ruby on Rails. Rails’ ActiveRecord succeeds where EJB 2.1 fails: ActiveRecord is simple, extremely capable, pleasant to use, and drives you to do better design work.
I don’t know whether greater involvement by the Open Source community could have kept EJB 2 from running off the rails (so to speak). The EJB 3 specification, which had much more input from the Open Source developers, is a huge improvement. Furthermore, EJB is just a start: everything from Swing to generic collection libraries needs to be revisited in this light. So here’s the challenge: now that Java has an open source license, will greater participation by the open source community help Java return to its roots in simplicity? Will more input from the open source community help to define a platform that’s
simpler and more developer-friendly? If so, then Sun’s announcement is not too late.
One final perspective: I develop an open-source application called JL with a userbase that’s small, but larger than I can count on one hand. I’ve gotten lots of emails thanking me, some free CDs (thanks, Normunds!), and very few problem reports. The issues come largely from people trying to run JL on a Linux distro that doesn’t include a JDK, and the story is always the same: the user found some strange out-of-date JVM (an fruity old Blackdown release, Japhar, or something like that) and installed it. And the answer is always the same: download the JDK or JRE from Sun or from IBM. “Write Once, Run Anywhere” is a good thing–and it’s true, it’s really true. I’ve only once had to fix a cross-platform bug, and that was years ago. I don’t understand why anyone would write platform-specific software: I’ve got Macs, Windows, Linux (and even an ancient Solaris box) at home, and I want anything I write to run on all of them. But “Write Once Run Anywhere” only works if Java–and I mean a good Java–is everywhere. Sun’s announcement may be late, but it’s not too late: a truly open Java can be everywhere, in a way that the current JRE is not.
Open Source Java was inevitable, but it took a long time to come about. It’s finally here. Thanks again to all the people at Sun, and elsewhere, who made it happen.