Hi folks! Our ref guide section on Java versions[1] is starting to look dated, because the Oracle version of Java 9 hits end of public updates this month and we don't mention it at all.
I'd like to discuss how we want to approach keeping HBase up-to-date on new Java versions. As background, the Java community is moving to a time-based release schedule where there is a new long term support (LTS) version every ~three years[2]. Between those, there are a series of feature releases that only have a short window of receiving updates. -- "Recommended" for running I think we should suggest folks rely on LTS releases of Java, wether from the OpenJDK project (which looks like it will be equivalent to the Oracle version) or a vender. That would mean updating our support matrix to call out Java 9 and Java 10 as "Not Supported" for current releases. -- Development changes The next LTS version of Java is slated to be Java 11, which won't be out until September 2018. I think we should aim for a minor release on whatever major branches are still active within a month of the GA date where we feel comfortable calling out Java 11 as supported. To that end, I think we would should do 2 things: 1) Work to make sure we can run through our test suite with either the release prior to the next LTS or an early access version of the upcoming LTS release before the GA date, ideally ~3 months before. That'd be a target of June 2018 for the planned GA date of Java 11. I expect that means abandoning our Java 9 specific efforts and starting in April/May to work on updates related to Java 10 (or 11 depending on when bits start shipping). 2) In the process of getting the above to work if we find we can't get a major release branch ready to go without violating our compatibility guidelines (especially wrt the existing supported java versions), we should cease making new minor releases for that major release branch. This could mean either just going to bugfix releases or it could mean declaring the branch EOM entirely. Note that the above doesn't necessarily require that we be able to build with a newer JDK version. That would certainly be simpler though; I don't think our current tooling makes it easy to run tests with a different JDK than is used to compile. -- Dropping of older versions I don't think we've codified anywhere when we drop Java version supports? (our guide merely says when we _could_.) I'm also not sure if we should write it down somewhere? If we can stick to the above and proactively add new versions as supported in minor releases, I think we'll be in a good position to drop everything but the latest LTS Java release with each HBase major release. Since this notion of LTS and non-LTS releases for Java is still relatively new, maybe that's a discussion we're better off having once HBase 3 is closer. [1]: http://hbase.apache.org/book.html#java [2]: http://mail.openjdk.java.net/pipermail/discuss/2017-September/004281.html