Release notes - P3/COBOL Compiler - Version 25.0
General information
P3/COBOL 25.0 requires Java 25, designated LTS by the OpenJDK project, and supports later Java releases. Testing used the latest versions from the following binary providers:
on Windows, Linux, and macOS. Other OpenJDK distributions from providers such as Oracle® and IBM® should also work with P3/COBOL 25.0, but verify behavior on one of the tested platforms above before reporting a potential problem.
Java 17 and Java 21 are no longer supported runtimes for P3/COBOL 25.0. Compiled class files target Java 25 bytecode and will not load on earlier JVMs.
Migration from 17.1.x to 25.0
Programs written for the most recent P3/COBOL 17.1 release do not generally require source changes to run on 25.0. Update the runtime and build environment as follows.
Java Runtime and Bytecode
Install a Java 25 (or later) JDK and point JAVA_HOME / P3_JAVA_HOME at that installation. Rebuild COBOL and Java
artifacts with the 25.0 toolchain so generated classes match the Java 25 class-file format.
Java Options
P3/COBOL 25.0 continues to require the Java Foreign Function and Memory API (FFM). The JVM launch options for earlier Java releases documented under P3/COBOL 17.x no longer apply. Use the Java 25 and later options.
Eclipse P3/COBOL launch configurations add the required JVM options automatically by default. Java Application launch configurations can opt in to the same behavior through the P3/COBOL launch support. Applications launched outside Eclipse must supply those options explicitly.
Native Access
The <native-access-enabled> runtime option continues to direct the runtime to use restricted methods for access to
native, non-Java resources when the JVM is launched with --enable-native-access=ALL-UNNAMED.
<native-access-enabled>false</native-access-enabled>See runtime options for details.
This option is required to be set to true, to enable P3/COBOL CALLs to native libraries!
Indexed File Volumes
P3/COBOL 25.0 stores MVCC indexed-file volumes using a newer H2 MVStore on-disk format. Volumes created by P3/COBOL
17.1 or by earlier 25.0 builds that used the legacy format are rewritten to the current format the first time they are
opened, unless automatic rewrite is disabled. Offline conversion is also available through the volume utility. See
Upgrading Existing MVCC Volumes and
rewrite-volume.
Highlights of this Release
✨ Platform
This release establishes Java 25 as the minimum supported platform:
- Runtime and compiler require Java 25 (LTS) or later.
- Generated bytecode targets Java 25.
- Required JVM access options are those for Java 25 and later; incubating FFM module flags and
--enable-previewpaths used on earlier JVMs are no longer part of the supported configuration.
🛠️ Improvements
Notable improvements relative to the 17.1 line include replacing finalization-based resource safety nets with
java.lang.ref.Cleaner, aligning with Java 25's deprecation of finalization for removal.
Native interop that previously used JNA (external CALL to shared libraries, process environment mutation, and the
optional native file-access path) now uses the Java 25 Foreign Function and Memory API exclusively. Runtime
configuration (native-access-enabled, external-call-strategy, external-library-directories) is unchanged; the
required JVM options remain those documented under Java 25 and later.
The MVCC indexed file system now uses the H2 2.4 MVStore stack. Existing 17.1-era .mvc volumes are converted
automatically on open (with a verified .bak_<fletcher> golden backup retained beside the volume). Operators can also run
rewrite-volume offline, or disable automatic rewrite via
advanced configuration.
📘 Compatibility Notes
Language and runtime features introduced in P3/COBOL 17.1, including INCITS/ISO/IEC 1989:2014 NATIONAL support and
Oracle Pro*SQL-style updatable cursors, remain available. See National Data in
P3/COBOL and the prior 17.1 release
notes for feature detail that is unchanged in this platform release.
Applications that retain .mvc volumes from P3/COBOL 17.1 should plan for a one-time volume rewrite (automatic on open
by default). Keep disk space available for the golden .bak_<fletcher> copy, a temporary rewritten copy, and verification. After a successful
upgrade, the rewritten volume is not readable by the 17.1 runtime.