It may comes as a bit of a surprise given all of the publicity around Java 7, but the final version of Java 7 still hasn’t been approved yet.

Java 7 actually comprises 4 separate JSRs – 1 master JSR and 3 specific ones. They are all up for their Final Approval Ballot, which is due by the 18th July.

JSR 203 NIO.2 – New I/O v2
JSR 292 Supporting Dynamically Typed Languages on the Java Platform
JSR 334 Small Enhancements to the Java Programming Language

and the big one:

JSR 336 Java SE 7 Release Contents

The reason behind the strange-seeming delay in final ratification is that Java is a bit different to other popular programming communities. For example, the .NET community is run by just 1 company – Microsoft – and the development community and other corporate partners have no formal say in how the community is run. If MSFT decides to change the entire development landscape with their next release, then they can. There was all sorts of gnashing of teeth in the developer community when Silverlight was effectively demoted as part of MSFT’s new roadmap.

On the other hand, in some of the open source communities, such as Python or Perl or Ruby, things can be a bit more badly defined. Some communities are more formal than others, but in many cases there is a small group of community members who contribute “most” (in some loosely defined sense) who are responsible for driving change forward in releases. If corporations are contributing a lot to a particular community, then their representatives in the community will generally be well regarded and listened to.

In good open-source communities, this tends to lead to releases which reflect the overall consensus view of the community. However, large communities are not monolithic, and it’s important to remember that you can’t please all of the people all of the time.

The Java world is a little different. Java was always intended to represent a concert of interests – originally very corporate focused, but bringing in prominent individuals and communities as the Java ecosystem has grown. At the heart of this is the Java Community Process (JCP), which is presided over by the Executive Committees (there’s one for SE/EE and one for ME). It is this Executive Committee that the LJC was recently elected to.

The ECs are responsible for approving every official Java standard (which are all expressed as JSRs). This happens by a vote. This a simple process – Yes, Yes with comments, Abstain, No and Fail To Vote are the options, and the results are binding – if 50% or more vote Yes, the JSR passes and becomes an official standard.

This process means that the final votes have to be scheduled against a moving target. The final version of the language specification, and the reference implementation (which for Java SE is OpenJDK) are formal documents. So it isn’t really possible to have a final vote on them until the release is basically ready – because otherwise EC members can’t be certain what they’re voting on.

The final vote being so close to the release date is an artifact of the JCP being a mostly open standards process.

The reason that it can be described as “mostly open” is because it has been, at times, a little bureaucratic. It was born in an era when corporate interests were the only type that were really considered. Open source hadn’t taken off yet. The strong, vibrant technical communities we see didn’t really exist. Even the Internet wasn’t anything like today’s version.

Part of the work that the LJC are currently engaged in on the Executive Committee is a reform of the JCP, to make it faster, more streamlined, and fundamentally more transparent and easier for the ordinary developer to participate in. There’s a new JSR – JSR 348 – which is a first step to reforming the JCP. There will be at least 2 or 3 more needed to get the process fully reformed, but we feel that taking some small, (hopefully) easy steps first is the right way to get some momentum going.

Finally, if you’re interested in the JCP, or in standards work, or in the future direction of the platform – please get in touch. The JCP group within the LJC is always looking for people who are interested, in the views of our members and in the overall thoughts and direction of our community. We try to spend as much time as we can canvassing your opinions, but if you have strong feelings about anything – then let us know. Start a thread on the mailing list, or come and talk to us if you’d rather talk privately. We’re always happy to hear from you, and by doing so, we can ensure that we’re representing you as well as we can.