Table of Contents
-----------------
1. Introduction to the OpenJDK/CRaC project
2. Upstream repositories
3. Debian packaging
4. Maintenance

1. Introduction to the OpenJDK/CRaC project
-------------------------------------------
The CRaC (Coordinated Restore at Checkpoint) Project researches coordination of Java programs with mechanisms to checkpoint (make an image of, snapshot) a Java instance while it is executing. Restoring from the image could be a solution to some of the problems with the start-up and warm-up times. The primary aim of the Project is to develop a new standard mechanism-agnostic API to notify Java programs about the checkpoint and restore events. Other research activities will include, but will not be limited to, integration with existing checkpoint/restore mechanisms and development of new ones, changes to JVM and JDK to make images smaller and ensure they are correct. [1]

The openjdk-{17,21,25}-crac packages intends to provide the Java application developer on Ubuntu,  with the CRaC functionality on the latest JDK 17 security updates from openjdk. The package uses CRIU as the default (and opinionated) checkpoint/restore utility.

Currently, JDK vendors like Azul [2] and Liberica[3] have CRaC-based JDK offerings. Java-frameworks like SpringBoot [4] and Micronaut[5] have released support for CRaC

[1] https://openjdk.org/projects/crac
[2] https://www.azul.com/products/components/crac/
[3] https://bell-sw.com/libericajdk-with-crac/
[4] https://spring.io/blog/2023/11/23/spring-boot-3-2-0-available-now
[5] https://micronaut-projects.github.io/micronaut-crac/2.3.0/guide/


2. Upstream repositories
------------------------
The primary upstream repository where all the CRaC patches are hosted is https://github.com/openjdk/crac. 

However, this repository is a development-line repository and does not maintain branches for OpenJDK LTS releases. For this reason, Canonical will maintain backport repositories which have the CRaC patches backported to openjdk-17 [6], openjdk-21 [7], and openjdk-25 [8].

[6] https://github.com/canonical/openjdk-17-crac
[7] https://github.com/canonical/openjdk-21-crac
[8] https://github.com/canonical/openjdk-25-crac

Repositories [6],[7] and [8] will act as "upstream" for the openjdk-{17,21,25}-crac packages.


3. Debian packaging
-------------------
Because the build process for openjdk/crac is almost similar to that of vanilla openjdk, the Debian packaging code is inherited from the openjdk-{17,21,25} package in Debian and Ubuntu. A small delta to symlink the criu executable and also build some crac specific binaries has been added.


4. Maintenance
--------------
A maintenance cadence similar to that of openjdk i.e quarterly, is hereby proposed. Every quarter, openjdk release security updates for LTS versions of the openjdk including openjdk-17, openjdk-21 and openjdk-25.
After the openjdk-{17,21,25} updates are published on the Ubuntu development release, the security updates will be merged into the openjdk-{17, 21, 25}-crac upstream repositories. On the Debian packaging side, any packaging changes done to openjdk-{17,21,25} will be merged into the Debian packaging code for the openjdk-{17,21,25}-crac packages.



-- Pushkar Kulkarni <pushkar.kulkarni@canonical.com>  Mon, 27 Aug 2024 00:59:00 +0530
