Even before Oracle’s purchase of Sun Microsystems, Java was at some serious crossroads.
For some brief history, Oracle bought Sun in January of 2010. The move led to questions of why Oracle would buy Sun. The answer has come in the form of lawsuits and the discontinuation of 2 high profile open source projects, OpenOffice and OpenSolaris. The most worrisome lawsuit is Oracle’s suit against Google’s Java based Android operating system. Oracle contends that Google can not use Java as the language for a mobile platform because Java’s license forbids it.
This news was followed up with Apple deprecating Java. The has the effect of prohibiting Apps written for the new App Store from using Java as the programming language. Their developer agreement says:
3.3.1 Applications may only use public APIs and frameworks included in the default installation of Mac OS X or as bundled with Xcode as provided by Apple, deprecated technologies (such as Java) may not be used.
Apple seems to be giving Java the Flash treatment. I am curious what Steve Jobs will give as an excuse for inhibiting developers from using Java. For Flash, it was battery, multi-touch, and user experience. As far as I know, Java doesn’t have these limitations. I think the real reason is cross-platform code is bad for Apple domination. Over the past few years, Apple had committed itself to Java. Apple knew that their market share was not enough to get developers to write code that would only work on Mac OSX. Java came to the rescue by allowing a developer to write once, test everywhere, and deploy on Windows, Linux and MacOSX. Now, they feel their market share is enough to force developers to write directly for their platform.
These are definitely the darkest days for Java since Microsoft tried to kill it. But is Java dead?
Oracle has submitted the feature sets for JDK 7 and JDK 8. JDK 7 will improve the performance of dynamic languages Ruby or Groovy running in a JVM. JDK 8 will have the most anticipated features. It will improve the dreadful Calendar object. IMHO, the biggest feature will be the addition of Lambda Expressions which will give Java more functional programming features like closures.
But there is a big bump in the road to ratifying JDK7 and JDK8. The Java Community Process (JCP) Executive Committee needs to approve the features. The Apache Foundation, a member of the JCP, has already announced their intention to leave it because of Oracle’s recent moves.
While the future of Java is murky, there are rays of hope. Java, as a language, has not changed much over the years. In comparison to its derivative C#, it has changed even less. C#’s syntax has evolved and improved over the years, and Java lacks most of these new features. Groovy allows Java programmers access to many of the language features that C# has. Groovy allows access to functional programming and operator overloading now and it runs along Java code. I’ll save the particulars of Groovy for another post, but Groovy allows Java to have the features that it needs.
I am very concerned about the future of Java. It faces problems from the company who owns it, its community, and its future technology direction. Since Java is an open platform, new things, like Groovy, can be created. There are high quality, open source virtual machines. Java will live on, but it is up to Oracle to give Java an open and bright future.