Project Jigsaw: Java Plan B^2
When Java Chief Architect Mark Reinhold proposed the infamous "Plan B" for new Java 7 features in 2010, it was an acceptable compromise in order to get Java 7 out the door. Java 7 had, up to that point, been delayed for years leaving developers and enterprises with only point updates to the aging Java 6 platform.
In summary, Plan B meant deferring the implementation of Lambda expressions, Project Jigsaw, and the remaining portions of Project Coin until JDK 8, then slated for late 2012. As mentioned above, most of the Java community accepted Plan B as the right thing to do in order to get Java 7 on track again. In the end, this proved to be a good move, as JavaOne 2011 was a success in most developers' opinions regarding the release of Java 7, JavaFX, and other related software. Oracle had set a direction, and for the most part delivered on the first big step in its plan.
Plan B Redux
Last week, however, Reinhold once again proposed a Plan B, but this time it was for the previous Plan B. Plan B^2 if you will. According to Reinhold, JDK 8 is itself late, and won't make the original Plan B release date of late 2012. Instead, the revised release date is May 2013, and even that's not enough time to see Jigsaw completed.
What Is Project Jigsaw?
Sun and now Oracle have had a vision to break the JDK down into smaller, more manageable, and easier to download components to control the size of the platform, aka Jigsaw. While this seems like a straightforward goal (just break down large JAR files into many smaller ones), this entails the monumental task of uniting the Java SE platform with the Java ME (embedded) platform. The goal is provide a basic JVM building block upon which other modular pieces can be layered, tailored to the environment/server/device that host the Java application. This grand unification of the Java platform, with the right modularization, is a fantastic plan and will help Java developers more easily adapt their applications to a wider range of computing devices. This is the 21st century vision of write-once-run-anywhere, where anywhere means in a data center, your desktop, or in your pocket, all without changing your code.
If you're interested, a prototype implementation of Jigsaw is available now on multiple platforms. Feel free to download the latest and give it a try (within a virtual OS or secondary development environment to be safe). Or, read up on the requirements and design, or the "Big Picture" overview at minimum, to get a basic understanding.
Bus Stop (Train Station) Release
However, as the goal above is a deep and far-reaching change to the fundamentals of the Java SDK and runtime platform itself, it's not something that can be rushed. As such, the JDK 8 train is in danger of leaving the station without Jigsaw on board. Moreover, Reinhold proposes that this mirrors the need for a new release pattern for Java itself: every two years no matter what's ready to be included. In groups I've worked in, this was called the "bus stop" release cycle; releases were planned on certain dates, and only the new features and bug fixes that were ready to ship would make the bus (the current release). Others would have to wait for the next bus (release). Reinhold proposes this for Java, with a two-year release cycle, likening it to a train schedule instead of a bus schedule. I think I agree with this, as well as the release time frame of two years.
With the revised plan (Plan B for Plan B), which I like to think of as Plan B^2, JDK 8 will be released in September of 2013 with Lambda, the new Date/Time API, new Type Annotations, and the rest of Project Coin, while Project Jigsaw and other features will be part of JDK 9 in 2015. Some view this as necessary considering the scope of Jigsaw, whiles others view it as the death of Jigsaw (as it appears to have an ever-slipping ship date). How do you feel about it? If you're passionate about any of this (i.e. the bus-stop release cycle for Java, the slipping Jigsaw release date), make your feelings known to the Java 8 Expert Group.
Happy Coding!
-EJB

