Native Image Feasibility
LoomCache does not currently ship a GraalVM native executable. The supported production path is the JVM Docker image and Kubernetes manifests in the deployment guide.
Current Verdict
Section titled “Current Verdict”| Area | Status | Notes |
|---|---|---|
| Spring Boot AOT | Feasible | loom-spring-boot completes spring-boot:process-aot when both the AOT JVM and generated-source compiler receive --enable-preview. |
| Native executable | Not shipped | CI does not require native-image, and no native artifact is part of the release contract. |
| Java runtime | High friction | Server classes use Java 25 preview features, so AOT and native builds must pass preview flags consistently. |
| Dynamic features | Needs metadata | ServiceLoader, Class.forName(...), Kryo registrations, JDBC drivers, optional OpenTelemetry, and user serializers need reachability metadata. |
Native-image support is therefore experimental research, not a production feature.
AOT Probe
Section titled “AOT Probe”The REL.8 audit used this successful AOT probe:
mvn clean install -q \ -DskipTests \ -DskipITs \ -DskipIntegrationTests \ -pl loom-spring-boot \ -am
mvn -q \ -DskipTests \ -DskipITs \ -DskipIntegrationTests \ -Dspring-boot.aot.jvmArguments=--enable-preview \ -Dspring-boot.aot.compilerArguments=--enable-preview \ -pl loom-spring-boot \ spring-boot:process-aotThe same audit found no local native-image binary, so it did not produce or certify a native executable.
Remaining Gates
Section titled “Remaining Gates”Before LoomCache can publish a native artifact:
- Add a
loom-spring-bootnative profile using GraalVM Native Build Tools. - Pass Java 25 preview flags to the native-image build and Spring AOT phases.
- Check in reachability metadata for serializer providers, dynamic class loaders, JDBC drivers, optional tracing, TLS, and user-configured comparators.
- Decide which JVM-only operational features are disabled in native mode.
- Build the Linux native executable in CI with GraalVM JDK 25.
- Run native smoke tests for health, binary map operations, WAL restart, metrics, TLS startup, and serializer failures.
Until those gates land, use the JVM image from Kubernetes & Docker Deployment.