The Jakarta EE Platform 10 specification states the following:
The goal of the Jakarta EE 10 release is [...] adding the support for the Java SE 11 and newer runtimes. The TCKs require support for both Java SE 11 and Java SE 17.
What does this mean? Specifially, I'm wondering what this means regarding the Java SE version
I guess my understanding in how all of this relates is lacking - it would be great if you could shed some light on this!
A customer deploying an implementation of any Jakarta EE 10 technology must be able to install it on their computers running either Java 11 or Java 17.
The goal of the Jakarta EE 10 release is [...] adding the support for the Java SE 11 and newer runtimes
Jakarta EE is a collection of dozens of technologies generally of interest to enterprise-oriented developers. Those technologies consist mainly of (1) a specification, and (2) some Java code that defines an API made up mainly of interfaces (and abstract classes, perhaps, with possibly some incidental concrete classes).
Every Jakarta EE technology is expected to be run on a JDK, an implementation of the Java specifications.
Third parties implement those Jakarta EE interfaces with concrete classes while following the Jakarta EE specifications. To comply with the specs for Jakarta EE 10, the authors of an implementation cannot use new Java features introduced after Java 11.
For example, an implementation cannot use Java records, as that feature arrived in Java 16. An implementation using records would fail to run on a customer’s computer equipped with Java 11. Such an implementation would not be Jakarta EE 10 compliant.
And the Jakarta EE 10 specification also requires compliance tests be run on both Java 11 and Java 17. To quote:
The TCKs require support for both Java SE 11 and Java SE 17.
That means an implementation cannot use any features that were removed from Java 17 or from earlier versions of Java.
For example, the java.util.jar.Pack200
class was removed in Java 14. Any implementation calling that class will fail to run on Java 17. Such an implementation would not be Jakarta EE 10 compliant.
in terms of Java SE features used in the Jakarta EE Platform 10 specification (i.e., does it mean that the APIs specified in the specification can only use features which are compatible with both Java SE 11 and Java SE 17)?
A compliant implementation of Jakarta EE 10 must run on both Java 11 and Java 17. A customer deploying an implementation must be able to install on their computers running Java 11 or Java 17.
in terms of Java SE features being available for implementing the Jakarta EE Platform 10 specification (i.e., features of which Java SE version can vendors of application servers use?)
An implementation of a Jakarta EE 10 technology can use any Java feature present in both Java 11 and 17.
required to run an application server which implements the Jakarta EE Platform 10 specification
Any app server product claiming to implement any Jakarta EE 10 technology must be able to run on both Java 11 and Java 17.
in terms of Java SE features being available for implementing applications which are deployed in an application server which implements the Jakarta EE Platform 10
You can write an app using Jakarta EE 10 in any version of Java you want. For example, your app written in the current version Java 24 will likely run well if deployed on Java 24. However, knowing that Jakarta EE 10 implementations are tested specifically on Java 11 and Java 17, the most conservative approach would be to develop and deploy using either Java 11 or Java 17 only.
You may choose to test your app occasionally with the latest version of Java to guard against inadvertently writing code that is not future-ready. Likewise, you may want to occasionally test with a later implementation of Jakarta EE to ensure your app remains future-ready.
Tip: Make a habit of studying the Release Notes for Java and for Jakarta EE upon every release. Stay apprised of changes that may affect your app in future migrations.
Why Java 11 and Java 17 specifically? These are Long-Term Support (LTS) versions of Java, along with versions 8, 21, and likely 25.
Know that the Jakarta EE project has intentions to eventually peg major releases around six months after a Java LTS version release. Currently, Java LTS releases arrive every two years in the autumn.