Sunday, February 27, 2011

The Future of Java Programming Language


The Future of Java: forking, death, or stasis

       It’s popular nowadays to complain about the state of Java. What is the right approach for the future of Java? I’d like to outline a few possibilities, along with starting a discussion of the benefits and problems associated with each.
The first option is to stick with the status quo: Oracle controls the Java language specification, strong-arms the JCP, and rigorously defends Java and its revenue streams through legal action and licensing of compatibility testing kits (in addition to selling products based on Java, of course.)
This isn’t a horrible option; after all, it’s likely to give us a new edition of Java in 2011, with another planned release in late 2012. It’s also fairly close to what the Java community is already used to from Sun, although Oracle is far more aggressive about defending its territory than Sun is.
None of these are bad: Oracle’s willingness to pursue revenues means that the parent company of Java is likely to remain strong (a quality Sun lacked), and Oracle’s continued consolidation of Java technologies means that it has a large umbrella of Java expertise at hand.
However… some of those same features work against Java. Oracle’s swallowing of Java-using companies consolidates technology, but also means that competition is lowered; Oracle’s corporate culture implies a high cost for dissent, and what’s good for Java is … defined as what’s good for Oracle, whether the wider community agrees or not. (Oracle’s acquisitions consolidate technology but not necessarily expertise – because their retention rate for acquired employees is horrible.)
Others have suggested forking Java, thus potentially creating another VM spec (or perhaps just another language that leverages existing JVMs). Changes that went into Java would be mirrored in the new language, as community demand required, while the community could make changes that might eventually find their way into Java through mere market pressure.
This would remove Java (or, if you like, “Fava,” or “Lava,” depending on your appreciation of Hannibal Lecter or Indonesia) from a single vendor’s control, and the community would have more freedom to innovate.
However, there remain problems of patent; Oracle’s pursuit of Google indicates that any external source using Oracle IP might be endangered. It’s the same problem Mono has with .NET; it becomes survival with the approval of someone else, which isn’t a comfortable feeling (unless your name is Miguel, perhaps.) There are also problems with external viewpoints: people who’ve been whining about Java’s strength in the political arena will finally be truly enabled by such a schism between Java and Mava. (It’s “mavalous, dahling.”)
Another possibility – one suggested by Oracle itself before it acquired Sun – is the formation of a truly independent consortium, made up of independent yet interested parties – much like one could have imagined the JCP being, if Sun had no veto power. (In fact, this is the vision Oracle had for the JCP before it bought Sun; odd how its perspective has changed with the acquisition.)
This option has a lot of support: Oracle used to support it, IBM would support it, so would most developers. This option has the best long-term future, as it protects Java from an overlord, and allows the most innovation through competition as long as a logical arbitration facility existed (to prevent deadlocks in committee.)
However… it requires that Oracle allow Java to be freed from its control, an unlikely event indeed. Plus, arbitration is going to cause friction, especially if larger parties’ wishes are not respected. (Imagine a feature that Oracle and IBM support, but no other committee members desire; Oracle and IBM would resent such defiance, and neither are known for accepting defeat.)
The last possibility is one that more developers support than we care to acknowledge: defeat and abandonment. With a single vendor controlling so much of Java, perhaps it’s time to move on to a different viable alternative: perhaps Google Go, or Python, or Ruby are strong enough (or can be strengthened enough) to replace Java outright.
This possibility gives a lot of freedom; it’s not like Ruby and Python have few supporters, and the influx of new blood (especially when the new converts are more used to scalability than the normal Python or Ruby developers) would probably help Ruby or Python immensely.
Plus, this isn’t a new concept: many prominent Java developers have advocated abandonment of Java, viewing it as a legacy environment only (“I use Python when I can, and Java when I have to – often, just to run Python.”) Perhaps this approach is more viable than was thought.
However, it does mean abandoning what Java does well – and Java really does quite a bit well. Further, part of Java’s problems come from being as successful as it is – and it’s not known if the convergence of a Java community and another language’s community wouldn’t replicate Java’s problems.
In addition, we Java developers have gotten used to a certain level of performance – not in one-off command-line programs, but in environments where Java excels at heavy lifting. Shifting to other languages means giving up some of that performance edge, which might not be so comfortable.
So there are four alternatives: the status quo, forking Java, creation of an independent consortium, and total abandonment. The problem with considering what the alternatives might be to the status quo is, quite simply, that Oracle most likely does not care, nor do they have any reason to care. We can protest all we like that we desire an independent controlling body, but there’s no reason for Oracle to do anything but nod at us… and ignore anything they don’t like

Saturday, February 26, 2011

Java 7 support slated for JetBrains IDE


JetBrains this spring will offer full support for Java 7 in an upgrade to the company's IntelliJ Idea IDE, according to the JetBrains IntelliJ Idea blog. IntelliJ IDEA 10.5 will support language features of Java 7 across the IDE with capabilities such as code completion, code inspections, and quickfixes.
Java Platform, Standard Edition 7 or Java 7, was submitted along with Java SE 8 to the Java Community Process in November, with both later given initial approvals. The final Java 7 specification is due this year. Java 7 has been set to add improvements for multicore processors, dynamic scripting languages, and I/O-intensive operations. (There also has been some early deliberations on an enterprise version of Java 7 to complement the standard edition.)
[ Since acquiring Sun Microsystems, Oracle has upset some people but also continued developing technologies such as Java. | InfoWorld's Neil McAllister charts the conflicts in thecoming war over the future of Java. | Keep up to date on the latest in Java with the JavaWorld Enterprise Java newsletter. ]
"Besides [Java 7 capabilities], we're working on a number of new features and incremental improvements in all areas of the product," offering capabilities such as bundled integration with the Jetty HTTP server and support for XSLT (Extensible Stylesheet Language Transformations) 2, the blog says.
In other improvements, the Google Chrome browser will be supported in the JavaScript debugger, and new refactorings will be offered for the Groovy programming language. The IDE will also feature a Spring Roo rapid application development tool console.
An early-access program for IntelliJ Idea 10.5 will start in a few weeks. Also featured in the IDE are bug fixes and enhancements for usability and performance. "In particular, in this release we've focused on improving startup performance, so you can expect the new version of IntelliJ Idea to open and load your projects faster," according to the blog.
Version 10.5 will be offered as a free upgrade to users of IntelliJ Idea 10, which was released in December