Version-string schemes for the Java SE Platform and the JDK

mark.reinhold at oracle.com mark.reinhold at oracle.com
Thu Nov 2 15:10:48 UTC 2017


Thanks to those who read what I wrote [1] and took the time to reply.
First, some general points:
 - Version numbers affect everyone. They're relevant not just to
 developers who work on the JDK, but to all who use it. The Java
 platform is not simply a library whose users can adjust to new
 releases by updating a few dependency constraints. It is, rather,
 the foundation of an enormous ecosystem of libraries, frameworks,
 and tools, some of which may require or benefit from upgrades when
 a JDK release ships. We all need sensible version numbers in order
 to plan ahead for upgrades and migrations.
 - Encoding the compatibility or significance of a JDK release in its
 version number is a recipe for confusion. The compatibility level of
 a release, or the significance of the changes within it, is not known
 until near the end of the release's six-month development cycle.
 Everyone who works on the JDK, or builds or uses components on top of
 it, would have to speak initially of the release date and then switch
 to speaking of the assigned version number. Those who maintain
 libraries, frameworks, and tools would have to be prepared to change
 code that inspects version numbers late in the JDK release cycle.
 - Encoding the support lifetime of a release in the release's version
 number is also a recipe for confusion. The version number of a
 release is meant to be the same across all implementations of that
 release. The support lifetime of a release can, however, vary from
 implementor to implementor, and the support lifetime of a release
 from a single implementor can change over time. (It could make sense
 to encode support lifetimes elsewhere in the overall version string,
 but not in the version number itself.)
 - I didn't suggest a time-based version scheme in order to work around
 some internal Oracle process problem. Oracle's management is fully
 committed to the six-month, time-based release model.
Now, to summarize new information.
Additional disadvantages of some of the alternatives that I listed:
 (-) A two-digit absolute time-based scheme would make it difficult
 to switch back to a more-traditional scheme, should we ever wish
 to do that [2].
 (-) In the absolute time-based schemes, the gaps between successive
 version numbers make it awkward to specify versions to tools and
 APIs [2].
Additional alternatives to consider:
 (D) A dual scheme, in which there's both a "marketing" version and a
 "technical" version [3].
On this suggestion I agree with another respondent -- we've been here
before, and it would add more confusion than it's worth [4].
 (E) A sequence of incrementing numerals, much like JEP 223, plus the
 release date [5].
Encoding these two types of information in version strings seems like
overkill, when one can be derived from the other. It may, however, be
useful to convey the release date separately to indicate not just the age
of the release but also as an indicator of its security level relative to
some baseline.
Up next: A specific proposal ...
- Mark
[1] http://mail.openjdk.java.net/pipermail/jdk-dev/2017-October/000007.html
[2] http://mail.openjdk.java.net/pipermail/jdk-dev/2017-October/000030.html
[3] http://mail.openjdk.java.net/pipermail/jdk-dev/2017-October/000031.html
[4] http://mail.openjdk.java.net/pipermail/jdk-dev/2017-October/000033.html
[5] http://mail.openjdk.java.net/pipermail/jdk-dev/2017-October/000028.html


More information about the jdk-dev mailing list

AltStyle によって変換されたページ (->オリジナル) /