JDK 21 is in Rampdown / The Importance of Testing With Early-Access Builds

David Delabassee david.delabassee at oracle.com
Wed Jun 14 12:10:48 UTC 2023

Welcome to the OpenJDK Quality Outreach June update.

JDK 21 has entered Rampdown Phase One (RDP1) [1], which means that the main-line has been forked into a dedicated JDK 21 stabilization repository. At this point, the overall JDK 21 feature set is frozen. Any changes pushed to the main line are now bound for JDK 22. The stabilization repository is open for select bug fixes and, with approval, late low-risk enhancements per the JDK Release Process [2]. And in contrast to past practice, most stabilization changes will be integrated via backports from the main-line repository [1].

The coming weeks are critical to identify and resolve as many issues as possible, i.e. before JDK 21 enters the Release Candidates phase in August. We need to make sure those few weeks are leveraged to test both existing code running on top of JDK 21 and new JDK 21 features. The heads-up below illustrates the importance and the benefits of doing such tests.

[1] https://mail.openjdk.org/pipermail/jdk-dev/2023-June/007911.html
[2] https://openjdk.org/jeps/3#Integrating-fixes-and-enhancements

## Heads-up: On the Importance of Doing Tests With OpenJDK Early-Access Builds

The following is a recent example that demonstrates the benefits of testing an existing codebase using the OpenJDK early-access builds.

Last month, we published a heads-up focused on Sequenced Collections [3] as they could potentially introduce some incompatibilities.
The Eclipse Collections (EC) team did their homework and sure enough, EC was impacted as it was now throwing compilation errors with JDK 21 early-access builds. The EC team was able to quickly fix those compilation errors, i.e., it was mainly about adding overriding default methods. But once those compilation errors were fixed, and this is where it gets interesting, another issue surfaced. This time, the problem was related to LinkedHashMap serialization. After some investigation, the EC team identified that second issue as JDK one and a JBS ticket was opened. That issue was then confirmed as a JDK regression and was promptly fixed in OpenJDK main-line, i.e., JDK 22. The fix was then backported into the JDK 21 stabilization repository. This EC pull request [4] provides additional details.
In this case, the JDK fix was easy but it is nevertheless the kind of issues that could have easily fallen through the crack if the EC team wasn’t pro-actively testing with OpenJDK early-access builds. The EC issue would have then surfaced after the JDK 21 General Availability... and who knows when the JDK LinkedHashMap serialization regression would have been fixed?
TL; DR; Testing an existing codebase with OpenJDK early-access builds is a win-win situation. It helps the project itself, Eclipse Collections in this case, as it enables developers to identify issues in their own codebase before that new JDK version is Generally Available. It helps the JDK too as any JDK issue detected early enough in the development cycle gives the OpenJDK engineers a chance to address it before the General Availability of that new JDK version. And last but not least, having a robust JDK is also a win for the Java community at large.

And thanks to the Eclipse Collections team and especially to Donald Raab for helping to make the Java platform more robust!

[3] https://inside.java/2023/05/12/quality-heads-up/
[4] https://github.com/eclipse/eclipse-collections/pull/1461

## JDK 21 Early-Access Builds

JDK 21 Early-Access builds 26 are now available [5], and are provided under the GNU General Public License v2, with the Classpath Exception. The Release Notes are available here [6] and the javadocs here [7].

### JEPs integrated into JDK 21:
- 430: String Templates (Preview)
- 431: Sequenced Collections
- 439: Generational ZGC
- 440: Record Patterns
- 441: Pattern Matching for switch
- 442: Foreign Function & Memory API (3rd Preview)
- 443: Unnamed Patterns and Variables (Preview)
- 444: Virtual Threads
- 445: Unnamed Classes and Instance Main Methods (Preview)
- 446: Scoped Values (Preview)
- 448: Vector API (6th Incubator)
- 449: Deprecate the Windows 32-bit x86 Port for Removal
- 451: Prepare to Disallow the Dynamic Loading of Agents
- 452: Key Encapsulation Mechanism API
- 453: Structured Concurrency (Preview)

It is worth mentioning that JEP 404 (Generational Shenandoah - Experimental) has been proposed to drop from JDK 21 [8].

### Changes in recent JDK 21 builds (b23-b26) that may be of interest:

Note that this is only a curated list of changes, make sure to check [9] for additional changes.

- JDK-8298127: HSS/LMS Signature Verification
- JDK-8305972: Update XML Security for Java to 3.0.2
- JDK-8308244: Installation of jdk rpm corrupts alternatives
- JDK-8307990: jspawnhelper must close its writing side of a pipe before reading from it
- JDK-8303465: KeyStore of type KeychainStore, provider Apple does not show all trusted certificates
- JDK-8303530: Redefine JAXP Configuration File
- JDK-8307478: Implementation of Prepare to Restrict The Dynamic Loading of Agents
- JDK-8301553: Support Password-Based Cryptography in SunPKCS11
- JDK-8308341: JNI_GetCreatedJavaVMs returns a partially initialized JVM
- JDK-8308108: Support Unicode extension for collation settings
- JDK-8305972: Update XML Security for Java to 3.0.2
- JDK-8305091: Change ChaCha20 cipher init behavior to match AES-GCM
- JDK-8179502: Enhance OCSP, CRL and Certificate Fetch Timeouts
- JDK-8307547: Support variant collations
- JDK-8308876: JFR: Deserialization of EventTypeInfo uses incorrect attribute names
- JDK-8297878: KEM: Implementation
- JDK-8308819: add JDWP and JDI virtual thread support for ThreadReference.ForceEarlyReturn
- JDK-8307779: Relax the java.awt.Robot specification
- JDK-8306703: JFR: Summary views
- JDK-8309146: extend JDI StackFrame.setValue() and JDWP StackFrame.setValues minimal support for virtual threads
- JDK-8307840: SequencedMap view method specification and implementation adjustments
- JDK-8304438: jcmd JVMTI.agent_load should obey EnableDynamicAgentLoading
- JDK-8306431: File.listRoots method description should be re-examined

[5] https://jdk.java.net/21/
[6] https://jdk.java.net/21/release-notes
[7] https://download.java.net/java/early_access/jdk21/docs/api/
[8] https://mail.openjdk.org/pipermail/jdk-dev/2023-June/007910.html
[9] https://github.com/openjdk/jdk/compare/jdk-21+23...jdk-21+26

## JDK 22 Early-Access Builds

Given that JDK 21 is now in Rampdown Phase, the initial JDK 22 Early-Access builds are now also available [10]. Those EA builds are provided under the GNU General Public License v2, with the Classpath Exception.
[10] https://jdk.java.net/22/

## JavaFX 21 Early-Access Builds

These are early access builds of the JavaFX 21 Runtime, built from openjdk/jfx [11]. They are intended to allow JavaFX application developers to build and test their applications with JavaFX 21 on JDK 21. The latest builds 21 (2023/6/8) are now available [12]. These early-access builds are provided under the GNU General Public License, version 2, with the Classpath Exception. Feedback should be reported to the openjfx-dev mailing list [13].
[11] https://github.com/openjdk/jfx
[12] https://jdk.java.net/javafx21/
[13] http://mail.openjdk.org/mailman/listinfo/openjfx-dev

## Topics of Interest

All That is in Java 21?!

Script Java Easily in 21 and Beyond

New JFR `view` Command

Patterns: Exhaustiveness, Unconditionality, and Remainder

Design Document on Nullability and Value Types

JFR: Java's Observability & Monitoring Framework - Stack Walker #2

## JDK Crypto Roadmap Update

Oracle updated the JDK Cryptographic Roadmap to announce a change, with the Oct CPU (2023-10-17), of the priority order used by JDK 8 and JDK 11 when negotiating cipher suites to use on TLS connections. Please check the JDK Cryptographic Roadmap page [14] for more details.
[14] https://www.java.com/en/jre-jdk-cryptoroadmap.html


Please, make sure to test your projects using the JDK 21 EA builds as we still have time to fix potential issues. And thanks for participating in the OpenJDK Quality Outreach program!

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://mail.openjdk.org/pipermail/quality-discuss/attachments/20230614/9ced7282/attachment-0001.htm>

More information about the quality-discuss mailing list