TCK certification of OpenJDK on Ubuntu
We first announced TCK-certified OpenJDK on Ubuntu, during the Noble Numbat release. Subsequently, the certification was extended to other architectures during the Oracular Oriole and Plucky Puffin releases. I am writing this post to share some details of Canonical’s TCK effort and future plans.
Canonical’s open-source commitment
Canonical has an open-source commitment - to make open source software secure, reliable and easy to use. Innovation platforms should enable everyone to participate, by bringing open-source in a reliable and cost-effective way. Clearly, reliability is a critical underpinning value of this commitment. And reliable software has two uncompromising aspects - correctness and good performance.
Let’s talk about the correctness of OpenJDK.
Technology Compatibility Kit
How can we instill confidence about the correctness of Ubuntu’s OpenJDK packages in our users? Can we make formal claims of correctness? Correctness could mean full compliance with a well-defined specification. Java* ™ lets us do exactly this, through the Technology Compatibility Kit, more dearly known as the TCK.
The TCK is a formal self-certification of JVM technology, defined by the Java Community Process and endorsed by the Oracle Corporation. It confirms conformance with the Java SE specification. New technologies on the Java ™ platform are proposed through formal Java Specification Requests (JSRs). Every accepted JSR has an implementation and a set of correctness assertions, which are encoded as tests in the TCK. In this way, the TCK asserts the correctness of an implementation.
The TCK source code is licensed by the Oracle Corporation, under the Open Community TCK License Agreement (OCTLA). Canonical is an OCTLA signatory.
TCK certified packages on Ubuntu
As of this writing, the OpenJDK 17 and OpenJDK 21 packages on Ubuntu are TCK-certified. They are certified on every supported Ubuntu release, and on five of the supported architectures - amd64, arm64, s390x, ppc64el and riscv64. The tests are run on a quarterly basis, on every OpenJDK security release. We do not run TCK for the i386 and armhf, because the adoption of OpenJDK (version 17 and above) on these architectures is low. We plan to begin certifying OpenJDK 25 - the next Java LTS release - in the Ubuntu 25.10 cycle.
Running the TCK using Eclipse AQAvit
The TCK test-material received under the OCTLA includes a test harness, test cases and configuration files. Bootstrapping the TCK testing activity is far from trivial. Defining test targets, compiling the tests, configuring and running the test harness - all of these steps involve a learning-curve.
To make things easy, we use the Eclipse AQAvit framework to run the TCK. AQAvit, which offers abstractions to run all kinds of JDK tests, helped us bootstrap our TCK efforts with less than a day’s effort! Evidently, the framework encapsulates years of TCK testing expertise. AQAvit is developed and maintained by Eclipse Adoptium - an open-source Java community. Canonical is an enterprise member of the Adoptium Working Group.
TCK Automation: Work-in-progress
Eclipse AQAvit enabled us to start thinking of higher layers of automation right away. Tests in the TCK may be put into three categories in the automation context:
- Non-GUI tests that can be fully automated
- GUI tests that can be automated
- Manual GUI tests that currently need manual testing
We currently have one layer of automation above what AQAvit provides, for categories 1 and 2. Automation efforts in this cycle include creating test pipelines for these categories using an OpenStack instance and working towards a “single-click TCK execution” experience, with centralized storage of artifacts. We are also embarking on an effort to automate the manual tests (category 3) and are evaluating a couple of GUI automation frameworks right now. This effort is likely to stretch into the next two cycles.
If you have any questions about OpenJDK and TCK, feel free to reach out through a comment on this post. I may also be contacted by email on pushkar.kulkarni@canonical.com.
Java ™ is a registered trademark of the Oracle Corporation.