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