From 5159cebc597275fa3e9d7f0b618490ca98e72e2e Mon Sep 17 00:00:00 2001 From: Mark Waite Date: Fri, 13 Oct 2023 17:26:33 -0600 Subject: [PATCH 01/17] 2+2+2 Java Support Plan * Java 11, 17, and 21 in Jenkins https://docs.google.com/document/d/1y3RVlniNmz-5Nd3LI-w58LDf760Ai7FqssP4zHuTv8U/edit * Visualizing Java versions for Jenkins https://docs.google.com/spreadsheets/d/1Gc-0yuYOD5u674qnxbPOWhCU5t9viCJukVj_9b-kwAw/edit * Jenkins developer mailing list discussion https://groups.google.com/g/jenkinsci-dev/c/RaAloTTM9CQ/m/kag1KJSVAwAJ * Jenkins user mailing list discussion https://groups.google.com/g/jenkinsci-users/c/NGDRrNsaDYY/m/zj5RpSNSAQAJ Governance board video discussion of the proposal https://youtu.be/KKzfWJtkv04?t=862 --- jep/0000/README.adoc | 228 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 228 insertions(+) create mode 100644 jep/0000/README.adoc diff --git a/jep/0000/README.adoc b/jep/0000/README.adoc new file mode 100644 index 00000000..c578bf9f --- /dev/null +++ b/jep/0000/README.adoc @@ -0,0 +1,228 @@ += JEP-0000: 2+2+2 Java Support Plan +:toc: preamble +:toclevels: 3 +ifdef::env-github[] +:tip-caption: :bulb: +:note-caption: :information_source: +:important-caption: :heavy_exclamation_mark: +:caution-caption: :fire: +:warning-caption: :warning: +endif::[] + +.Metadata +[cols="1h,1"] +|=== +| JEP +| 0000 + +| Title +| :bulb: 2+2+2 Java Support Plan :bulb: + +| Sponsor +| :bulb: link:https://github.com/MarkEWaite[Mark Waite] :bulb: + +// Use the script `set-jep-status ` to update the status. +| Status +| Not Submitted :information_source: + +| Type +| :bulb: Process :bulb: + +| Created +| :bulb: Date (2023-10-13) :bulb: + +// No delegate sought, none expected to be assigned by Kohsuke +// | BDFL-Delegate +// | TBD + +// +// +// S issue. +//| JIRA +//| :bulb: https://issues.jenkins-ci.org/browse/JENKINS-nnnnn[JENKINS-nnnnn] :bulb: +// +// +| Discussions-To +| :bulb: link:https://groups.google.com/g/jenkinsci-dev/c/RaAloTTM9CQ/m/kag1KJSVAwAJ[Developers mailing list] and link:https://groups.google.com/g/jenkinsci-users/c/NGDRrNsaDYY/m/zj5RpSNSAQAJ[users mailing list] +// +// +// Uncomment if this JEP depends on one or more other JEPs. +//| Requires +//| :bulb: JEP-NUMBER, JEP-NUMBER... :bulb: +// +// +// Uncomment and fill if this JEP is rendered obsolete by a later JEP +//| Superseded-By +//| :bulb: JEP-NUMBER :bulb: +// +// +// Uncomment when this JEP status is set to Accepted, Rejected or Withdrawn. +//| Resolution +//| :bulb: Link to relevant post in the jenkinsci-dev@ mailing list archives :bulb: + +|=== + +== Abstract + +Java releases are link:https://blogs.oracle.com/java/post/moving-the-jdk-to-a-two-year-lts-cadence[delivered every 6 months] with a long term support release (LTS) link:https://blogs.oracle.com/javamagazine/post/java-long-term-support-lts[every two years]. +link:https://adoptium.net/support/[Eclipse Temurin] and link:https://access.redhat.com/articles/1299013[OpenJDK from Red Hat] both support their Java long term support releases with security patches for six years. + +This JEP describes a 2+2+2 support plan where Jenkins supports a new Java LTS in the first two years after its release, then requires that Java LTS as its minimum Java version in the next two years of its support, then drops support of that Java LTS in the last two years. +The 2+2+2 support plan reduces maintenance effort on older Java releases and is more likely to attract developers. + +The Jenkins project will be better able to plan releases, welcome new users, and support existing users with the 2+2+2 Java support plan. + +// See the link:https://medium.com/@javachampions/java-is-still-free-3-0-0-ocrt-2021-bca75c88d23b[Java is still free 3.0.0 (Oct 2021) blog post] for details of Java licensing and OpenJDK distributions. + +== Specification + +The two year Java release cadence with a six year support life means that three Java LTS releases are officially supported at any point in time by Eclipse Temurin and OpenJDK. +Jenkins developers want to support two Java LTS releases rather than three in order to improve and simplify Jenkins with the latest Java capabilities and to reduce maintenance overhead associated with older Java releases. + +=== Support cadence + +In order to limit Java support to two LTS releases, the Jenkins project uses a 2+2+2 Java support plan. + +A new Java LTS release is supported by Jenkins for the first two years after its release, while the previous Java LTS release is the minimum version required by Jenkins. +Two years after the Java LTS release, Jenkins requires that Java LTS release as its new minimum Java version. +Four years after the Java LTS release, Jenkins stops supporting that Java LTS release because the next Java LTS release is the new minimum Java version. + +Java support in Jenkins long term support releases changes on the initial (".1") release of an LTS line. +Java support in Jenkins weekly releases changes on or before the weekly release that is the baseline for the ".1" release. +Java support in Jenkins does not change in subsequent minor releases of the same Jenkins LTS baseline. + +For example, Jenkins LTS 2.361.1 upgraded the minimum Java version from Java 8 to Java 11. +Jenkins weekly 2.357 upgraded the minimum Java version from Java 8 to Java 11. + +=== Transition period + +There is a transition period from our current Java support plan to the 2+2+2 Java support plan. +The details of the transition period are described below. +The transition period has three phases: + +* <> +* <> +* <> + +=== Phase 1: Java 11 + +Jenkins support for Java 11 continues until the last minor release of the Jenkins LTS ("2.xxx.3") prior to the **31 Oct 2024** end of Java 11 support. +The Jenkins LTS baseline ("2.xxx.1") that precedes the 31 Oct 2024 end of Java 11 support requires Java 17 as its minimum Java version. +A weekly release prior to that Jenkins LTS baseline requires Java 17 as its minimum Java version. + +.Estimated Java 11 support calendar +[%header,cols="1,1,1"] +|==== +| Date | Release | Minimum Java Version + +| Aug 7, 2024 | 2.462.1 (LTS) | Java 11 +| Sep 4, 2024 | 2.462.2 (LTS) | Java 11 +| Sep 18, 2024 | 2.474 (weekly) | **Java 17** +| Oct 2, 2024 | 2.462.3 (LTS) | Java 11 +| Oct 30, 2024 | 2.474.1 (LTS) | **Java 17** +| Nov 27, 2024 | 2.474.2 (LTS) | **Java 17** +|==== + +=== Phase 2: Java 17 + +Jenkins support for Java 17 continues until the last minor release of the Jenkins LTS ("2.xxx.3") prior to **31 Oct 2025**. +The 31 Oct 2025 date is two years prior to the end of Java 17 support by Eclipse Temurin and OpenJDK. +The Jenkins LTS baseline ("2.xxx.1") that precedes the 31 Oct 2025 end of Jenkins support of Java 17 requires Java 21 as its minimum Java version. +A weekly release prior to that Jenkins LTS baseline requires Java 21 as its minimum Java version. + +.Estimated Java 17 support calendar +[%header,cols="1,1,1"] +|==== +| Date | Release | Minimum Java Version + +| Jul 23, 2025 | 2.510.1 (LTS) | Java 17 +| Aug 20, 2025 | 2.510.2 (LTS) | Java 17 +| Sep 3, 2025 | 2.522 (weekly) | **Java 21** +| Sep 17, 2025 | 2.510.3 (LTS) | Java 17 +| Oct 15, 2025 | 2.522.1 (LTS) | **Java 21** +| Nov 12, 2025 | 2.522.2 (LTS) | **Java 21** +|==== + +=== Phase 3: Java 21 + +Jenkins support for Java 21 continues until the last minor release of the Jenkins LTS ("2.xxx.3") prior to **31 Oct 2027**. +The 31 Oct 2027 date is two years prior to the end of Java 21 support by Eclipse Temurin and OpenJDK. +The Jenkins LTS baseline ("2.xxx.1") that precedes the 31 Oct 2027 end of Jenkins support of Java 21 requires Java 25 as its minimum Java version. +A weekly release prior to that Jenkins LTS baseline requires Java 21 as its minimum Java version. + +.Estimated Java 21 support calendar +[%header,cols="1,1,1"] +|==== +| Date | Release | Minimum Java Version + +| Jun 23, 2027 | 2.606.1 (LTS) | Java 21 +| Jul 21, 2027 | 2.606.2 (LTS) | Java 21 +| Aug 3, 2027 | 2.618 (weekly) | **Java 25** +| Aug 18, 2027 | 2.606.3 (LTS) | Java 21 +| Sep 15, 2027 | 2.618.1 (LTS) | **Java 25** +| Oct 13, 2027 | 2.618.2 (LTS) | **Java 25** +|==== + +=== User experience + +A warning administrative monitor is displayed to the user 18 months prior to the end of support of the current Java version they are running. +A "danger" administrative monitor is displayed to the user 9 months prior to the end of support of the current Java version they are running. + +Container images that do not include a Java version in the container label are upgraded approximately 18 months prior to the end of support of the current Java version they are running + +One or more blog posts are provided to announce the end of support for a Java version and the support of a new Java version + +Changelogs, upgrade guides, and other user documentation are provided to describe the upgrade to the next Java version. + +== Motivation + +The 2+2+2 Java support plan balances the needs of large scale Jenkins users for predictability and stability, the needs of Jenkins developers to improve and simplify Jenkins with the latest Java capabilities, and the needs of Jenkins developers to reduce maintenance overhead associated with older Java releases. + +== Reasoning + +The transition period is defined to allow enough time for enterprise users of Jenkins and commerical users of products based on Jenkins to transtion to Java 17. + +The immediate support of new Java releases motivates Jenkins developers to remain current with Java releases. + +== Backwards Compatibility + +There are no backwards compatibility concerns related to this proposal. + +== Security + +There are no security risks related to this proposal. + +== Infrastructure Requirements + +Jenkins infrastructure provides early access Java versions 2 months before the release of a Java version. +Jenkins infrastructure provides Java versions from the beginning of support until 1 month after the end of Jenkins support of a Java version. + +== Testing + +Testing of new Java releases is performed with automated tests of Jenkins core, libraries, and plugins. +Tests are run with the Jenkins acceptance test harness and the Jenkins plugin bill of materials. + +== Prototype Implementation + +No prototype implemented, though Java 11, Java 17, and Java 21 support are each examples of the type of changes needed to support a new Java release. + +== References + +Refer to the draft documents and project descriptions for the evolution of this Jenkins enhancement proposal. +Those documents include: + +* link:https://docs.google.com/document/d/1y3RVlniNmz-5Nd3LI-w58LDf760Ai7FqssP4zHuTv8U/edit?usp=sharing[Java 11, 17, and 21 in Jenkins] - original document outlining the idea +* link:https://docs.google.com/spreadsheets/d/1Gc-0yuYOD5u674qnxbPOWhCU5t9viCJukVj_9b-kwAw/edit?usp=sharing[Visualizing Java versions for Jenkins] - worksheet diagram of the idea +* link:https://groups.google.com/g/jenkinsci-dev/c/RaAloTTM9CQ/m/kag1KJSVAwAJ[Jenkins developer mailing list discussion] +* link:https://groups.google.com/g/jenkinsci-users/c/NGDRrNsaDYY/m/zj5RpSNSAQAJ[Jenkins user mailing list discussion] + +=== Governance meeting discussion of the plan + +// Video for non GitHub +ifndef::env-github[] +video::KKzfWJtkv04[youtube,start=862] +endif::[] + +ifdef::env-github[] +image:http://i3.ytimg.com/vi/KKzfWJtkv04/hqdefault.jpg[link=https://youtu.be/KKzfWJtkv04?t=862,width="75%"] +endif::[] From 35d78ba29ebb966d512e60af7a9de35ffc5109b8 Mon Sep 17 00:00:00 2001 From: Mark Waite Date: Sat, 14 Oct 2023 03:55:56 -0600 Subject: [PATCH 02/17] Fix spelling errors Co-authored-by: Sam Gleske <875669+samrocketman@users.noreply.github.com> --- jep/0000/README.adoc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/jep/0000/README.adoc b/jep/0000/README.adoc index c578bf9f..813f8617 100644 --- a/jep/0000/README.adoc +++ b/jep/0000/README.adoc @@ -180,7 +180,7 @@ The 2+2+2 Java support plan balances the needs of large scale Jenkins users for == Reasoning -The transition period is defined to allow enough time for enterprise users of Jenkins and commerical users of products based on Jenkins to transtion to Java 17. +The transition period is defined to allow enough time for enterprise users of Jenkins and commercial users of products based on Jenkins to transition to Java 17. The immediate support of new Java releases motivates Jenkins developers to remain current with Java releases. From 0c2f14d1ac15825fed451e552d04c3f27eb14919 Mon Sep 17 00:00:00 2001 From: Mark Waite Date: Sat, 21 Oct 2023 14:54:18 -0600 Subject: [PATCH 03/17] Correct estimated weekly release dates --- jep/0000/README.adoc | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/jep/0000/README.adoc b/jep/0000/README.adoc index 813f8617..72ec2da6 100644 --- a/jep/0000/README.adoc +++ b/jep/0000/README.adoc @@ -117,7 +117,7 @@ A weekly release prior to that Jenkins LTS baseline requires Java 17 as its mini | Aug 7, 2024 | 2.462.1 (LTS) | Java 11 | Sep 4, 2024 | 2.462.2 (LTS) | Java 11 -| Sep 18, 2024 | 2.474 (weekly) | **Java 17** +| Sep 17, 2024 | 2.474 (weekly) | **Java 17** | Oct 2, 2024 | 2.462.3 (LTS) | Java 11 | Oct 30, 2024 | 2.474.1 (LTS) | **Java 17** | Nov 27, 2024 | 2.474.2 (LTS) | **Java 17** @@ -137,7 +137,7 @@ A weekly release prior to that Jenkins LTS baseline requires Java 21 as its mini | Jul 23, 2025 | 2.510.1 (LTS) | Java 17 | Aug 20, 2025 | 2.510.2 (LTS) | Java 17 -| Sep 3, 2025 | 2.522 (weekly) | **Java 21** +| Sep 2, 2025 | 2.522 (weekly) | **Java 21** | Sep 17, 2025 | 2.510.3 (LTS) | Java 17 | Oct 15, 2025 | 2.522.1 (LTS) | **Java 21** | Nov 12, 2025 | 2.522.2 (LTS) | **Java 21** From bad550100da21287102b718f6f0af03a04b304eb Mon Sep 17 00:00:00 2001 From: Mark Waite Date: Sat, 21 Oct 2023 14:56:43 -0600 Subject: [PATCH 04/17] Add disclaimer that calendar dates are estimates Also includes a disclaimer that version numbers are estimates. --- jep/0000/README.adoc | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/jep/0000/README.adoc b/jep/0000/README.adoc index 72ec2da6..c9d1d0d6 100644 --- a/jep/0000/README.adoc +++ b/jep/0000/README.adoc @@ -123,6 +123,8 @@ A weekly release prior to that Jenkins LTS baseline requires Java 17 as its mini | Nov 27, 2024 | 2.474.2 (LTS) | **Java 17** |==== +Note: The calendar is provided as an estimate. Release dates and version numbers are subject to change. + === Phase 2: Java 17 Jenkins support for Java 17 continues until the last minor release of the Jenkins LTS ("2.xxx.3") prior to **31 Oct 2025**. @@ -143,6 +145,8 @@ A weekly release prior to that Jenkins LTS baseline requires Java 21 as its mini | Nov 12, 2025 | 2.522.2 (LTS) | **Java 21** |==== +Note: The calendar is provided as an estimate. Release dates and version numbers are subject to change. + === Phase 3: Java 21 Jenkins support for Java 21 continues until the last minor release of the Jenkins LTS ("2.xxx.3") prior to **31 Oct 2027**. @@ -163,6 +167,8 @@ A weekly release prior to that Jenkins LTS baseline requires Java 21 as its mini | Oct 13, 2027 | 2.618.2 (LTS) | **Java 25** |==== +Note: The calendar is provided as an estimate. Release dates and version numbers are subject to change. + === User experience A warning administrative monitor is displayed to the user 18 months prior to the end of support of the current Java version they are running. From 3c88bf53134bbc9a3e2c2b2c6a3faa46ec320ec1 Mon Sep 17 00:00:00 2001 From: Mark Waite Date: Sat, 21 Oct 2023 15:15:48 -0600 Subject: [PATCH 05/17] Use a NOTE admonition on the disclaimer --- jep/0000/README.adoc | 23 ++++++++++++++++++++--- 1 file changed, 20 insertions(+), 3 deletions(-) diff --git a/jep/0000/README.adoc b/jep/0000/README.adoc index c9d1d0d6..69f18520 100644 --- a/jep/0000/README.adoc +++ b/jep/0000/README.adoc @@ -110,6 +110,9 @@ Jenkins support for Java 11 continues until the last minor release of the Jenkin The Jenkins LTS baseline ("2.xxx.1") that precedes the 31 Oct 2024 end of Java 11 support requires Java 17 as its minimum Java version. A weekly release prior to that Jenkins LTS baseline requires Java 17 as its minimum Java version. +Jenkins uses Java 11 as its minimum Java version for a little over **two years**. +That is much less than the five years that Java 8 was the minimum Java version for Jenkins, but is well aligned with the two years from the 2+2+ Java Support Plan. + .Estimated Java 11 support calendar [%header,cols="1,1,1"] |==== @@ -123,7 +126,10 @@ A weekly release prior to that Jenkins LTS baseline requires Java 17 as its mini | Nov 27, 2024 | 2.474.2 (LTS) | **Java 17** |==== -Note: The calendar is provided as an estimate. Release dates and version numbers are subject to change. +[Note] +==== +The calendar is provided as an estimate. Release dates and version numbers are subject to change. +==== === Phase 2: Java 17 @@ -132,6 +138,9 @@ The 31 Oct 2025 date is two years prior to the end of Java 17 support by Eclipse The Jenkins LTS baseline ("2.xxx.1") that precedes the 31 Oct 2025 end of Jenkins support of Java 17 requires Java 21 as its minimum Java version. A weekly release prior to that Jenkins LTS baseline requires Java 21 as its minimum Java version. +Jenkins uses Java 17 as its minimum Java version for approximately **one year**. +That reduced time is needed as part of the transition to the 2+2+2 Java support plan. + .Estimated Java 17 support calendar [%header,cols="1,1,1"] |==== @@ -145,7 +154,10 @@ A weekly release prior to that Jenkins LTS baseline requires Java 21 as its mini | Nov 12, 2025 | 2.522.2 (LTS) | **Java 21** |==== -Note: The calendar is provided as an estimate. Release dates and version numbers are subject to change. +[Note] +==== +The calendar is provided as an estimate. Release dates and version numbers are subject to change. +==== === Phase 3: Java 21 @@ -154,6 +166,8 @@ The 31 Oct 2027 date is two years prior to the end of Java 21 support by Eclipse The Jenkins LTS baseline ("2.xxx.1") that precedes the 31 Oct 2027 end of Jenkins support of Java 21 requires Java 25 as its minimum Java version. A weekly release prior to that Jenkins LTS baseline requires Java 21 as its minimum Java version. +Jenkins uses Java 21 as its minimum Java version for approximately **two years**. + .Estimated Java 21 support calendar [%header,cols="1,1,1"] |==== @@ -167,7 +181,10 @@ A weekly release prior to that Jenkins LTS baseline requires Java 21 as its mini | Oct 13, 2027 | 2.618.2 (LTS) | **Java 25** |==== -Note: The calendar is provided as an estimate. Release dates and version numbers are subject to change. +[Note] +==== +The calendar is provided as an estimate. Release dates and version numbers are subject to change. +==== === User experience From 1da4fe14f789a41fd6c3172219852d330e85e6d5 Mon Sep 17 00:00:00 2001 From: Mark Waite Date: Sat, 21 Oct 2023 15:18:22 -0600 Subject: [PATCH 06/17] Adminition is not rendered correctly --- jep/0000/README.adoc | 9 --------- 1 file changed, 9 deletions(-) diff --git a/jep/0000/README.adoc b/jep/0000/README.adoc index 69f18520..90409568 100644 --- a/jep/0000/README.adoc +++ b/jep/0000/README.adoc @@ -126,10 +126,7 @@ That is much less than the five years that Java 8 was the minimum Java version f | Nov 27, 2024 | 2.474.2 (LTS) | **Java 17** |==== -[Note] -==== The calendar is provided as an estimate. Release dates and version numbers are subject to change. -==== === Phase 2: Java 17 @@ -154,10 +151,7 @@ That reduced time is needed as part of the transition to the 2+2+2 Java support | Nov 12, 2025 | 2.522.2 (LTS) | **Java 21** |==== -[Note] -==== The calendar is provided as an estimate. Release dates and version numbers are subject to change. -==== === Phase 3: Java 21 @@ -181,10 +175,7 @@ Jenkins uses Java 21 as its minimum Java version for approximately **two years** | Oct 13, 2027 | 2.618.2 (LTS) | **Java 25** |==== -[Note] -==== The calendar is provided as an estimate. Release dates and version numbers are subject to change. -==== === User experience From 405c826a48beaffd52497ad9f4fe2d559b51bfd5 Mon Sep 17 00:00:00 2001 From: Mark Waite Date: Sat, 21 Oct 2023 16:34:18 -0600 Subject: [PATCH 07/17] Adjust transition period for Java 17 as minimum version The original Google Doc and the implementation of the administrative monitor both describe an approximtely 18 month period where Java 17 is the minimum Java version required for Jenkins. The first commits to this JEP described an approximately 12 month period where Java 17 is the minimum Java version required for Jenkins. This change corrects the JEP to use an approximately 18 month period where Java 17 is the minimum Java version required for Jenkins. In order to do that, Java 21 will be the the minimum Java version required for Jenkins for an 18 month period as well. Old durations of minimum Java versions in this document were: * Java 11 - 25 months * Java 17 - 12 months * Java 21 - 24 months * Java 25 - 24 months New durations of minimum Java versions in this document are: * Java 11 - 25 months * Java 17 - 18 months * Java 21 - 18 months * Java 25 - 24 months The new duration provides a more gradual transition to the 2+2+2 Java support plan. This commit also adds a description of the Java 25 (and beyond) steady state. --- jep/0000/README.adoc | 32 +++++++++++++++++++++----------- 1 file changed, 21 insertions(+), 11 deletions(-) diff --git a/jep/0000/README.adoc b/jep/0000/README.adoc index 90409568..d05b8c7d 100644 --- a/jep/0000/README.adoc +++ b/jep/0000/README.adoc @@ -130,12 +130,12 @@ The calendar is provided as an estimate. Release dates and version numbers are === Phase 2: Java 17 -Jenkins support for Java 17 continues until the last minor release of the Jenkins LTS ("2.xxx.3") prior to **31 Oct 2025**. -The 31 Oct 2025 date is two years prior to the end of Java 17 support by Eclipse Temurin and OpenJDK. -The Jenkins LTS baseline ("2.xxx.1") that precedes the 31 Oct 2025 end of Jenkins support of Java 17 requires Java 21 as its minimum Java version. +Jenkins support for Java 17 continues until the last minor release of the Jenkins LTS ("2.xxx.3") prior to **31 Mar 2026**. +The 31 Mar 2026 date is approximately 18 months prior to the end of Java 17 support by Eclipse Temurin and OpenJDK. +The Jenkins LTS baseline ("2.xxx.1") that precedes the 31 Mar 2026 end of Jenkins support of Java 17 requires Java 21 as its minimum Java version. A weekly release prior to that Jenkins LTS baseline requires Java 21 as its minimum Java version. -Jenkins uses Java 17 as its minimum Java version for approximately **one year**. +Jenkins uses Java 17 as its minimum Java version for approximately **18 months**. That reduced time is needed as part of the transition to the 2+2+2 Java support plan. .Estimated Java 17 support calendar @@ -143,12 +143,12 @@ That reduced time is needed as part of the transition to the 2+2+2 Java support |==== | Date | Release | Minimum Java Version -| Jul 23, 2025 | 2.510.1 (LTS) | Java 17 -| Aug 20, 2025 | 2.510.2 (LTS) | Java 17 -| Sep 2, 2025 | 2.522 (weekly) | **Java 21** -| Sep 17, 2025 | 2.510.3 (LTS) | Java 17 -| Oct 15, 2025 | 2.522.1 (LTS) | **Java 21** -| Nov 12, 2025 | 2.522.2 (LTS) | **Java 21** +| Jan 21, 2026 | 2.534.1 (LTS) | Java 17 +| Feb 18, 2026 | 2.534.2 (LTS) | Java 17 +| Mar 3, 2026 | 2.546 (weekly) | **Java 21** +| Mar 18, 2026 | 2.534.3 (LTS) | Java 17 +| Apr 15, 2026 | 2.546.1 (LTS) | **Java 21** +| May 13, 2026 | 2.546.2 (LTS) | **Java 21** |==== The calendar is provided as an estimate. Release dates and version numbers are subject to change. @@ -160,7 +160,8 @@ The 31 Oct 2027 date is two years prior to the end of Java 21 support by Eclipse The Jenkins LTS baseline ("2.xxx.1") that precedes the 31 Oct 2027 end of Jenkins support of Java 21 requires Java 25 as its minimum Java version. A weekly release prior to that Jenkins LTS baseline requires Java 21 as its minimum Java version. -Jenkins uses Java 21 as its minimum Java version for approximately **two years**. +Jenkins uses Java 21 as its minimum Java version for approximately **18 months**. +That reduced time is needed as part of the transition to the 2+2+2 Java support plan. .Estimated Java 21 support calendar [%header,cols="1,1,1"] @@ -177,6 +178,15 @@ Jenkins uses Java 21 as its minimum Java version for approximately **two years** The calendar is provided as an estimate. Release dates and version numbers are subject to change. +=== Phase 4: Java 25 + +Jenkins support for Java 25 continues until the last minor release of the Jenkins LTS ("2.xxx.3") prior to **30 Sep 2029**. +The 30 Sep 2029 date is two years prior to the end of Java 25 support by Eclipse Temurin and OpenJDK. +The Jenkins LTS baseline ("2.xxx.1") that precedes the 30 Sep 2029 end of Jenkins support of Java 25 requires Java 29 as its minimum Java version. +A weekly release prior to that Jenkins LTS baseline requires Java 25 as its minimum Java version. + +Jenkins uses Java 25 as its minimum Java version for approximately **two years**. + === User experience A warning administrative monitor is displayed to the user 18 months prior to the end of support of the current Java version they are running. From 7a6afc5b211c055b3f67087fedbceba37fd4d026 Mon Sep 17 00:00:00 2001 From: Mark Waite Date: Sun, 22 Oct 2023 16:41:17 -0600 Subject: [PATCH 08/17] Fix typo in plan description 2+2+ should have been 2+2+2. Thanks Tim! Co-authored-by: Tim Jacomb <21194782+timja@users.noreply.github.com> --- jep/0000/README.adoc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/jep/0000/README.adoc b/jep/0000/README.adoc index d05b8c7d..a129729a 100644 --- a/jep/0000/README.adoc +++ b/jep/0000/README.adoc @@ -111,7 +111,7 @@ The Jenkins LTS baseline ("2.xxx.1") that precedes the 31 Oct 2024 end of Java 1 A weekly release prior to that Jenkins LTS baseline requires Java 17 as its minimum Java version. Jenkins uses Java 11 as its minimum Java version for a little over **two years**. -That is much less than the five years that Java 8 was the minimum Java version for Jenkins, but is well aligned with the two years from the 2+2+ Java Support Plan. +That is much less than the five years that Java 8 was the minimum Java version for Jenkins, but is well aligned with the two years from the 2+2+2 Java Support Plan. .Estimated Java 11 support calendar [%header,cols="1,1,1"] From 79bb8d3301925fea211f5ec820d0184478c77ae4 Mon Sep 17 00:00:00 2001 From: Mark Waite Date: Mon, 23 Oct 2023 11:37:05 -0600 Subject: [PATCH 09/17] Insert a mermaid diagram showing support cadence --- jep/0000/README.adoc | 32 ++++++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) diff --git a/jep/0000/README.adoc b/jep/0000/README.adoc index a129729a..c66c8851 100644 --- a/jep/0000/README.adoc +++ b/jep/0000/README.adoc @@ -104,6 +104,38 @@ The transition period has three phases: * <> * <> +A diagram that illustrates some aspects of the support cadence is provide below: + +```mermaid +gantt + dateFormat YYYY-MM-DD + title Jenkins 2+2+2 Java Support Plan + + section Java 11 + Java 11 Supported :active, des11-sup, 2019-03-13, 2024-10-31 + Java 11 Required :crit, des11-req, 2022-09-07, 2024-10-31 + Alert 1 :active, des11-one, 2023-10-15, 2024-01-31 + Alert 2 : des11-two, after des11-one, 2024-10-31 + + section Java 17 + Java 17 Supported :active, des17-sup, 2022-06-22, 2026-03-31 + Java 17 Required :crit, des17-req, after des11-req, 2026-03-31 + Alert 1 : des17-one, 2024-10-31, 2025-06-30 + Alert 2 : des17-two, after des17-one, 2026-03-31 + + section Java 21 + Java 21 Supported :active, des21-sup, 2023-10-15, 2027-09-30 + Java 21 Required :crit, des21-req, after des17-req, 2027-09-30 + Alert 1 : des21-one, 2026-03-30, 2026-12-31 + Alert 2 : des21-two, after des21-one, 2027-09-30 + + section Java 25 + Java 25 Supported :active, des25-sup, 2025-10-15, 2029-09-30 + Java 25 Required :crit, des25-req, after des21-req, 2029-09-30 + Alert 1 : des25-one, 2028-03-30, 2028-12-31 + Alert 2 : des25-two, after des25-one, 2029-09-30 +``` + === Phase 1: Java 11 Jenkins support for Java 11 continues until the last minor release of the Jenkins LTS ("2.xxx.3") prior to the **31 Oct 2024** end of Java 11 support. From e958d7a3ceae6cefc643839b5e6dff84a8933e6e Mon Sep 17 00:00:00 2001 From: Mark Waite Date: Mon, 23 Oct 2023 12:00:25 -0600 Subject: [PATCH 10/17] Add idealized diagram for Java 25 support plan --- jep/0000/README.adoc | 23 ++++++++++++++++++++++- 1 file changed, 22 insertions(+), 1 deletion(-) diff --git a/jep/0000/README.adoc b/jep/0000/README.adoc index c66c8851..df8ca6d0 100644 --- a/jep/0000/README.adoc +++ b/jep/0000/README.adoc @@ -94,6 +94,27 @@ Java support in Jenkins does not change in subsequent minor releases of the same For example, Jenkins LTS 2.361.1 upgraded the minimum Java version from Java 8 to Java 11. Jenkins weekly 2.357 upgraded the minimum Java version from Java 8 to Java 11. +An idealized support cadence diagram is provided for Java 25 as an example. +The diagram shows the six year support life of Java 25 from OpenJDK. +Jenkins supports Java 25 during the first two years but does not require it as a minimum Java version. +Jenkins requires Java 25 as a minimum Java version during the next two years. +Jenkins does not run on Java 25 during the last two years of the OpenJDK support life of Java 25. + +```mermaid +gantt + dateFormat YYYY-MM-DD + title Java 25 Support in Jenkins (example) + + section Java 25 + Java 25 Released :milestone, des25-rel, 2025-09-20, 0d + Java 25 end of life (OpenJDK) :milestone, des25-eol, 2031-09-20, 0d + Java 25 Supported :active, des25-sup, 2025-10-15, 2029-09-30 + Java 25 Required :crit, des25-req, 2027-09-30, 2029-09-30 + Alert 1 : des25-one, 2028-03-30, 2028-12-31 + Alert 2 : des25-two, after des25-one, 2029-09-30 +``` + + === Transition period There is a transition period from our current Java support plan to the 2+2+2 Java support plan. @@ -104,7 +125,7 @@ The transition period has three phases: * <> * <> -A diagram that illustrates some aspects of the support cadence is provide below: +A diagram that illustrates the support cadence is provided below, using approximate dates in the diagram rather than attempting to match exact release dates: ```mermaid gantt From cd176912ed8797ddee1066be59b1a68fb9b6bc77 Mon Sep 17 00:00:00 2001 From: Mark Waite Date: Mon, 23 Oct 2023 12:09:55 -0600 Subject: [PATCH 11/17] Add link to Phase 4: Java 25 --- jep/0000/README.adoc | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/jep/0000/README.adoc b/jep/0000/README.adoc index df8ca6d0..1e00292d 100644 --- a/jep/0000/README.adoc +++ b/jep/0000/README.adoc @@ -125,6 +125,10 @@ The transition period has three phases: * <> * <> +The transition period is complete for Java 25 and beyond. + +* <> + A diagram that illustrates the support cadence is provided below, using approximate dates in the diagram rather than attempting to match exact release dates: ```mermaid From 53c82c6119e1a08513496632a794f90583d28c1f Mon Sep 17 00:00:00 2001 From: Mark Waite Date: Tue, 24 Oct 2023 13:24:03 -0600 Subject: [PATCH 12/17] Better describe flexibility in container updates Make it clear that this is describing the common scenario, not a mandated scenario. Co-authored-by: James Nord --- jep/0000/README.adoc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/jep/0000/README.adoc b/jep/0000/README.adoc index 1e00292d..00d60d2b 100644 --- a/jep/0000/README.adoc +++ b/jep/0000/README.adoc @@ -249,7 +249,7 @@ Jenkins uses Java 25 as its minimum Java version for approximately **two years** A warning administrative monitor is displayed to the user 18 months prior to the end of support of the current Java version they are running. A "danger" administrative monitor is displayed to the user 9 months prior to the end of support of the current Java version they are running. -Container images that do not include a Java version in the container label are upgraded approximately 18 months prior to the end of support of the current Java version they are running +Container images without a Java version specified in the label can be updated as soon as the new combination is deemed stable, typically occurring no later than 18 months before the current Java version they are using reaches the end of its support. One or more blog posts are provided to announce the end of support for a Java version and the support of a new Java version From bc6ad48663e6eb522dbe90be1d049fc316341dc8 Mon Sep 17 00:00:00 2001 From: Mark Waite Date: Sun, 29 Oct 2023 21:53:01 -0600 Subject: [PATCH 13/17] Admin monitor 12 months and 3 months before end of support Daniel Beck describes those times as: > The second warning in particular needs to strike a balance between > being shown late enough so it's actually relevant for whoever hasn't > acted yet, while being shown early enough that slightly more > elaborate environments (difficult to schedule maintenance windows) > are informed in time. 3 months aligns rather nicely with the LTS > schedule where we kinda expect folks to do that anyway. > > 18/9, or even 12/6 errs too far on the side of those for whom this > is extreme effort (and who dismissed the first message more > appropriate for their environment!), while showing everyone else > completely irrelevant notices they won't care about for many months > to come. The adoption curve for the Java 8 to Java 11 transition shows a significant increase in Java 11 adoption after the administrative monitor was visible to users. This schedule continues the 12 month first warning that was used for the Java 8 to Java 11 transition. --- jep/0000/README.adoc | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/jep/0000/README.adoc b/jep/0000/README.adoc index 00d60d2b..3d4fb765 100644 --- a/jep/0000/README.adoc +++ b/jep/0000/README.adoc @@ -246,12 +246,12 @@ Jenkins uses Java 25 as its minimum Java version for approximately **two years** === User experience -A warning administrative monitor is displayed to the user 18 months prior to the end of support of the current Java version they are running. -A "danger" administrative monitor is displayed to the user 9 months prior to the end of support of the current Java version they are running. +A warning administrative monitor is displayed to the user 12 months prior to the end of support of the current Java version they are running. +A danger administrative monitor is displayed to the user 3 months prior to the end of support of the current Java version they are running. Container images without a Java version specified in the label can be updated as soon as the new combination is deemed stable, typically occurring no later than 18 months before the current Java version they are using reaches the end of its support. -One or more blog posts are provided to announce the end of support for a Java version and the support of a new Java version +One or more blog posts are provided to announce the end of support for a Java version and the support of a new Java version. Changelogs, upgrade guides, and other user documentation are provided to describe the upgrade to the next Java version. From b7e8057be75d640f7578970eeb8778fc249fcaed Mon Sep 17 00:00:00 2001 From: Mark Waite Date: Fri, 21 Jun 2024 16:57:36 -0600 Subject: [PATCH 14/17] Update the table for Java 17 required in Jenkins weekly Link to the discusions in the Jenkins developer mailing list. --- jep/0000/README.adoc | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/jep/0000/README.adoc b/jep/0000/README.adoc index 3d4fb765..75922b29 100644 --- a/jep/0000/README.adoc +++ b/jep/0000/README.adoc @@ -170,14 +170,17 @@ A weekly release prior to that Jenkins LTS baseline requires Java 17 as its mini Jenkins uses Java 11 as its minimum Java version for a little over **two years**. That is much less than the five years that Java 8 was the minimum Java version for Jenkins, but is well aligned with the two years from the 2+2+2 Java Support Plan. -.Estimated Java 11 support calendar +The weekly release to require Java 17 was link:https://groups.google.com/g/jenkinsci-dev/c/gsXAqOQQEPc/m/4fn4Un1iAwAJ[intentionally accelerated] due to the ammount of work in the Spring Security 6.x upgrade. +The original link:https://groups.google.com/g/jenkinsci-dev/c/gsXAqOQQEPc/m/VT9IBYdmAQAJ[Spring Security 6.x Upgrade timeline] did not provide enough time. + +.Java 11 support calendar [%header,cols="1,1,1"] |==== | Date | Release | Minimum Java Version +| Jun 18, 2024 | 2.463 (weekly) | **Java 17** | Aug 7, 2024 | 2.462.1 (LTS) | Java 11 | Sep 4, 2024 | 2.462.2 (LTS) | Java 11 -| Sep 17, 2024 | 2.474 (weekly) | **Java 17** | Oct 2, 2024 | 2.462.3 (LTS) | Java 11 | Oct 30, 2024 | 2.474.1 (LTS) | **Java 17** | Nov 27, 2024 | 2.474.2 (LTS) | **Java 17** From b8bc9b13342454559ede16cab52d1f76b759e54c Mon Sep 17 00:00:00 2001 From: Mark Waite Date: Fri, 21 Jun 2024 16:58:15 -0600 Subject: [PATCH 15/17] Move "Require Java xx in weekly" 4 weeks earlier in examples Unlikely that we will require a new Java version in weekly at the very last moment. Requiring a newer minimum Java version is a large change and we'll want at least 4 weeks of exeperience in Jenkins weekly before it is the baseline for Jenkins LTS. --- jep/0000/README.adoc | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/jep/0000/README.adoc b/jep/0000/README.adoc index 75922b29..1e64fe62 100644 --- a/jep/0000/README.adoc +++ b/jep/0000/README.adoc @@ -204,8 +204,8 @@ That reduced time is needed as part of the transition to the 2+2+2 Java support | Date | Release | Minimum Java Version | Jan 21, 2026 | 2.534.1 (LTS) | Java 17 +| Feb 3, 2026 | 2.542 (weekly) | **Java 21** | Feb 18, 2026 | 2.534.2 (LTS) | Java 17 -| Mar 3, 2026 | 2.546 (weekly) | **Java 21** | Mar 18, 2026 | 2.534.3 (LTS) | Java 17 | Apr 15, 2026 | 2.546.1 (LTS) | **Java 21** | May 13, 2026 | 2.546.2 (LTS) | **Java 21** @@ -229,8 +229,8 @@ That reduced time is needed as part of the transition to the 2+2+2 Java support | Date | Release | Minimum Java Version | Jun 23, 2027 | 2.606.1 (LTS) | Java 21 +| Jul 6, 2027 | 2.614 (weekly) | **Java 25** | Jul 21, 2027 | 2.606.2 (LTS) | Java 21 -| Aug 3, 2027 | 2.618 (weekly) | **Java 25** | Aug 18, 2027 | 2.606.3 (LTS) | Java 21 | Sep 15, 2027 | 2.618.1 (LTS) | **Java 25** | Oct 13, 2027 | 2.618.2 (LTS) | **Java 25** From adf340f010ba55739352787e538d557056c9ac81 Mon Sep 17 00:00:00 2001 From: Mark Waite Date: Fri, 21 Jun 2024 17:41:05 -0600 Subject: [PATCH 16/17] Add a weekly build transition checklist --- jep/0000/checklist-for-weekly-build.md | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) create mode 100644 jep/0000/checklist-for-weekly-build.md diff --git a/jep/0000/checklist-for-weekly-build.md b/jep/0000/checklist-for-weekly-build.md new file mode 100644 index 00000000..c977af72 --- /dev/null +++ b/jep/0000/checklist-for-weekly-build.md @@ -0,0 +1,20 @@ + + +# Switch Jenkins Weekly Core Release to require Java 17 + +As per the [blog post](https://www.jenkins.io/blog/2024/06/11/require-java-17/), the upcoming Jenkins weekly release will require Java 17 or newer. + +As such, we have to drop Java 11 from the build and release process and use Java 17. + +Note: ci.jenkins.io builds of Jenkins Core are already running with Jav 17 and Java 21 on Linux: https://github.com/jenkinsci/jenkins/blob/master/Jenkinsfile + +- [ ] Update the release pipeline as defined in the [release repository](https://github.com/jenkins-infra/release/blob/master/Jenkinsfile.d/core/release) to use the new minimum Java version +- [ ] Remove outdated Java references from the [native packaging scripts](https://github.com/jenkinsci/packaging) +- [ ] Update the Java version in the agent image, defined by a [PodTemplate](https://github.com/jenkins-infra/release/blob/master/PodTemplates.d/release-linux.yaml) +- [ ] Update the virtual machine definition from the agent template utilizes the `jenkinsciinfra/packaging` image. + This image is defined in a [Dockerfile](https://github.com/jenkins-infra/docker-packaging/blob/main/Dockerfile) +- [ ] After the first weekly release to require a new Java version, Update the [Java support policy](https://www.jenkins.io/doc/book/platform-information/support-policy-java/) From 6aec757996fb9fff291e7906d6f608a35208137e Mon Sep 17 00:00:00 2001 From: Mark Waite Date: Fri, 25 Oct 2024 10:41:48 -0600 Subject: [PATCH 17/17] Jenkins 2.479.x instead of 2.474.x LTS version number is known now. --- jep/0000/README.adoc | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/jep/0000/README.adoc b/jep/0000/README.adoc index 1e64fe62..aca98f8c 100644 --- a/jep/0000/README.adoc +++ b/jep/0000/README.adoc @@ -182,8 +182,8 @@ The original link:https://groups.google.com/g/jenkinsci-dev/c/gsXAqOQQEPc/m/VT9I | Aug 7, 2024 | 2.462.1 (LTS) | Java 11 | Sep 4, 2024 | 2.462.2 (LTS) | Java 11 | Oct 2, 2024 | 2.462.3 (LTS) | Java 11 -| Oct 30, 2024 | 2.474.1 (LTS) | **Java 17** -| Nov 27, 2024 | 2.474.2 (LTS) | **Java 17** +| Oct 30, 2024 | 2.479.1 (LTS) | **Java 17** +| Nov 27, 2024 | 2.479.2 (LTS) | **Java 17** |==== The calendar is provided as an estimate. Release dates and version numbers are subject to change.