Skip to main content

Joe Darcy on JDK Compatibility Regions

Posted by editor on August 18, 2009 at 5:38 AM PDT

Joe Darcy has posted an interesting analysis titled JDK Release Types and Compatibility Regions, in which he uses a three-dimensional graph to represent different "axes" of compatibility between different JDK versions. In fact, this compatibility analysis could realistically be applied to many different software platforms that undergo sequential modification over time, but Joe talks specifically about how the JDK evolves in his post. Here's Joe's introduction to the concept:

There are three primary kinds of compatibility of concern when evolving the JDK, source, binary, and behavioral. These can be visualized as defining a three dimensional space.

The axes of this three-dimensional space are Behavioral, Source, and Binary, in Joe's representation. The farther away a point is from the origin, the more incompatible a change is; the origin itself represents perfect compatibility (no changes).

Joe specifically looks at the three main types of JDK release (platform, maintenance, update) from this point of view:

JDK 7 is a platform release since it is a new version of platform... The JDK 6 update releases are representative of update releases... While maintenance releases have not been formally issued since JDK 1.4.2, the changes in 6u10 were more on par with a maintenance release rather than a regular update release.

For update and maintenance releases, greater compatibility with the current platform release (for example, JDK 6) is required. Here, binary compatibility is required, as defined in the Java Language Specification.

Since binary incompatible changes are not allowed, the acceptable compatibility region for update and maintenance releases is confined to the (Behavioral x Source) plane, with more latitude on the behavioral axis.


The compatibility reference point for a platform release is an implementation of the previous platform specification. Compared to the previous platform specification, a platform release can add APIs and language feature that impact source compatibility (new keywords, etc.) and the implementation can have many changes in behavior (such as changing the iteration order of HashMap). In exceptional circumstances, there is the possibility of a sliver of binary incompatibility, such as to address a security issues in a rarely-used corner of the platform, but the central policy of preserving binary compatibility holds for platform releases as well.

All in all, Joe's post provides an interesting take on analyzing software platform life cycles. It's certainly not something I've ever thought about before, in my decades of working with evolving platforms.

In Java Today, Joseph Darcy presents JDK Release Types and Compatibility Regions: "There are three primary kinds of compatibility of concern when evolving the JDK, source, binary, and behavioral. These can be visualized as defining a three dimensional space..."

Danny Coward talks about Java ME: Smart browsing on dumb phones: "Think you need a $martphone to browse the web ?The intriguing BOLT browser should get you to think again (thanks to arch-blogger Hinkmond for the heads up). With desktop-like features like split-screen browsing, feed support, saving web pages, streaming video and accompanied by excellent reviews of its speed even on the most basic phones, how can it do it when all the client requires is the most basic of Java ME APIs: MIDP 2.0, rather than the fancier MSA 2 shipping on the newer Java ME phones ? ..."

Debasish Ghosh provides Five Reasons Why You Should Learn a New Language Now: "There have been quite a few murmers in the web sphere today regarding the ways Java programming paradigms have changed since its inception in the late 90s. A clear mandate and recommendation towards immutable abstractions, DSL like interfaces, actor based concurrency models indicate a positive movement towards a trend that nicely aligns with all the language research that has been going on in the community since quite some time. Language platforms are also improving by the day..."

In today's Weblogs, Jim Driscoll talks about ui:repeat and Ajax: "Using the f:ajax tag can make doing ajax with a repeating tag like ui:repeat considerably easier."

John Ferguson Smart writes about Web testing BDD-style with JWebUnit and Easyb: "Behaviour-driven development is a great way to design and build the web layers of your application. In this article, I look at how to use JWebUnit, a fast and light-weight web testing framework, with Easyb, a powerful Groovy-based BDD framework...."

And Karl Schaefer writes about Job Search: Technical Questions: "More thoughts on my recent job search. This time focused on technical questions."

In the Forums, contryboy has an issue where Form.refreshTheme() doesn't repaint back ground when styles are gradient: "Using the following code to change from a theme to a new theme, it works fine when one or both of the form style is NOT gradient. However, if both of the old theme and new theme have gradient form background, when this code is called, the form back ground is not repainted (remains in old color) while other components are refreshed to new color. try { ..."

kumandus has JinternalFrame Questions!: "Hi everyone! I am building a interface for a small game that uses a Jframe on fullScreen exclusive mode (where the grafics will be set). Because the JFrame is on fullScreen exclusive mode, i can not use JOptionpane (because it will always appears behind the JFrame), the alternative that i am trying to use is JInternalFrame. I already see some examples and read about it but i`am having a little trouble on the implementation: 1- Can the JInterframe be put directly on a JFrame or allways need a JDesktopPane?..."

And Markus Karg is working a problem with GlassFish v2ur2 with Client and Server in different subnets: "One of our customers is using GlassFish v2ur2 in two different IP subnets. One IP subnet contains only the client containers (ACC), one IP subnet contains only the server containers (EJB SLSB). He has the problem that the client cannot connect to the server. The reason is that the server sends his hostname to the client and the client does NOT use DNS to resolve it, but it seems to ask the GlassFish server to resolve it. As it is located in a different network, it resolve to the wrong IP address..."

The current Spotlight is a video, Java Warehouse - Part 1 of 3 - How to Submit an Application - Registration: "Learn how to submit applications to the Java Warehouse. In this first segment Bernard Traversat, Director of Java Store Engineering, shows how easy it is for developers to register for the Java Warehouse Developer Portal."

The new Poll asks "Do you plan to start using the Java Store and Java Warehouse?". This coming Thursday will be the last full day of voting.

Our Feature Articles include Jeff Friesen's article Introducing Custom Paints to JavaFX, which shows how you can leverage undocumented JavaFX capabilities to support custom paints in JavaFX Version 1.2. We're also featuring Biswajit Sarkar's Using the Payment API for Microcredit and Other Applications, which describes how to apply the Payment API (JSR 229) in JavaME applications.

The latest Java Mobility Podcast is Java Mobility Podcast 84: Valderi Leithardt on using SunSpots for gesture recognition.: "An interview with Ph.D. candidate Valderi Leithardt in Brazil on using SunSpots for gesture recognition."

Current and upcoming Java

Registered users can submit event listings for the href=""> Events Page using our href="">events submission form.
All submissions go through an editorial review before being posted to the

Archives and Subscriptions: This blog is delivered weekdays as
the Java
Today RSS feed
. Also, once this page is no longer featured as the
front page of it will be
archived along with other past issues in the href=""> Archive.

Joe Darcy has posted an interesting analysis titled "JDK Release Types and Compatibility Regions"...