The full version string for this update release is 20.0.2+10. The version number is 20.
Liberica is a certified, Java SE 20-compliant distribution of OpenJDK 20 which works on server (Linux x86_64, Linux ARM64, Windows 64), desktop (Windows 64, Windows 32, Mac, Linux x86_64), and embedded devices (Linux ARM64, Linux ARMv7, including Raspberry Pi 2 & 3 (ARMv6 hardfloat)). It has the following notable additions:
- Linux x86_64 version contains experimental support for ZGC.
- Linux x86_64, ARMv8 and ARMv7 distributions include a choice of Client VM, Server VM and Minimal VM.
- Alpine Linux x86_64 version is build with musl support.
- Windows x86_64, Windows x86, Windows ARMv8, Mac, Linux x86_64, Linux x86 and Linux ARMv7 distributions contain OpenJFX 20.
- Linux ARMv7 distribution contains Device IO API compiled for Raspberry Pi.
Please refer to the Oracle JDK 20.0.2 release notes for further information on JDK 20 features. This document further outlines the peculiarities of Liberica distribution as compared to Oracle JDK 20 distribution.
Liberica is supported on the following OSes:
- Ubuntu Linux 16.04, 18.04, 20.04 (x86, x86_64, ARMv7, ARMv8)
- Debian Linux 8, 9, 10 (x86, x86_64, ARMv7, ARMv8)
- Red Hat, Oracle Linux and CentOS 8x, 6.x, 7.x (x86, x86_64, ARMv7, ARMv8)
- Alpine Linux 3.7+ (x86_64, ARMv8)
- SUSE Linux Enterprise 12, 15 and tumbleweed (x86_64, ARMv8)
- Apple macOS 10.11+ (x86_64, ARMv8)
- Microsoft Windows 2019, Windows 2016, Windows 2012 R2, Windows 10, Windows 8, Windows 7 (x86, x86_64, ARMv8)
It is also known to work on other Linux distributions and Windows versions.
Note: The minimum supported Linux kernel version is 2.6.18 and GLIBC version 2.6. LibericaFX works on all supported Ubuntu versions, Red Hat Linux family starting from 7.x and SUSE versions with GTK3 backend.
Liberica is tested and certified on Raspberry Pi 2, 3 and 4 running the following OSes:
- Raspbian OS (armhf)
- OpenSUSE (armv8)
It is also known to work with Debian (armhf) and Ubuntu (armhf).
Liberica JDK 20 are distributed as .rpm, .zip, .deb and .tar.gz packages. Please select the one which is most appropriate for your purposes.
Liberica JDK 20 introduced all new features supported by OpenJDK 20.
With the introduction of the Jigsaw feature in JDK 9 and Minimal VM it is now possible to create a Runtime that is sufficient to run your application and trim down the size of the Runtime. To generate a Runtime with just the Minimal VM, add --vm=minimal to jlink options.
Liberica JDK continues to provide support for AOT and Graal JIT. Since in OpenJDK 20 builds these features are deemed experimental and deprecated, it is recommended to compile native executables with Liberica Native Image Kit to avoid errors.
By default, the Liberica uses Server VM. Server VM and Client VM can be enabled with -server and -client command line options, respectively. In case the deployment requires to minimize the footprint, it may be beneficial to use Minimal VM, which emphasises on a minimal footprint. It has C1 JIT compiler only, Serial GC and no serviceability features.
Liberica JDK 20 come with a bundled LibericaFX implementation, which is based on OpenJFX. The following tables lists Java FX modules status of Liberica distribution
- Java FX Graphics - works.
- Java FX Controls - works.
- Java FX Media - does not work.
- Java FX Webkit - does not work.
The following pipelines are known to work: EGL, SW (direct framebuffer) and GTK. By default, Liberica tries to use the accelerated EGL pipeline, which requires the presence of EGL libraries. If they are not found, the implementation falls back to software rendering.
Use the following command line options to specify the rendering pipeline:
- -Dprism.order=sw forces the use of software rendering pipeline. *
- -Dprism.order=es2 forces the use of EGL pipeline and hardware acceleration. *
- -Djavafx.platform=gtk if you would like to launch a LibericaFX application using Liberica from X11.
* Not supported on Raspberry Pi 4.
Please refer to the following wiki for more information.
Liberica JDK 20 comes with a bundled OpenJDK Device I/O (DIO) API implementation module. DIO provides a Java API for accessing Raspberry PI GPIO pins and for communicating with peripheral devices:
- General Purpose Input/Output (GPIO).
- Inter-Integrated Circuit Bus (I2C), Serial Peripheral Interface (SPI).
- Universal Asynchronous Receiver/Transmitter (UART).
Please refer to the following wiki for more information.
BellSoft Liberica follows the security baselines for Oracle Java SE. Please refer to the Oracle documentation for a list of issues fixed in a given release.
As of 2017, the default location of Broadcom libEGL.so and libGLESv2.so has changed in Raspbian OS. If you'd like to leverage hardware EGL acceleration available from Broadcom video drivers in LibericaFX while running a recent Raspbian OS, run the following command:
cd /opt/vc/lib sudo ln -s libbrcmEGL.so libEGL.so sudo ln -s libbrcmGLESv2.so libGLESv2.so
This is the list of the security issues fixed in this release. CVSS scores are provided using the CVSS version 3.1 scoring system.
|CVE ID||Score||Component||Module||Attack vector||Complexity||Privileges||User interaction||Scope||Confidentiality||Integrity||Availability|
|JDK-8282359||Intermittent WebKit build failure on Windows: C1090: PDB API call failed, error code 23|
|JDK-8301009||Update libxml2 to 2.10.3|
|JDK-8304751||Improve pipeline layout|
|JDK-8305108||Change JavaFX release version to 20.0.2 in jfx20u|
|JDK-8306115||Update libxml2 to 2.10.4|
|JDK-8306450||Create release notes for JavaFX 20.0.1|
|JDK-8308682||Enhance AES performance|
|JDK-8305312||Enhanced path handling|
|JDK-8304468||Better array usages|
|JDK-8304460||Improve array usages|
|JDK-8303376||Better launching of JDI|
|JDK-8302483||Enhance ZIP performance|
|JDK-8302475||Enhance HTTP client file downloading|
|JDK-8300596||Enhance Jar Signature validation|
|JDK-8300285||Enhance TLS data handling|
|JDK-8298676||Enhanced Look and Feel|
|JDK-8296565||Enhanced archival support|
|JDK-8294323||Improve Shared Class Data|
|JDK-8304878||ConcurrentModificationException in javadoc tool|
|JDK-8305668||PPC: Non-Top Interpreted frames should be independent of ABI_ELFv2|
|JDK-8307346||Add missing gc+phases logging for ObjectCount(AfterGC) JFR event collection code|
|JDK-8307104||[AIX] VM crashes with UseRTMLocking on Power10|
|JDK-8307425||Socket input stream read burns CPU cycles with back-to-back poll(0) calls|
|JDK-8304350||Font.getStringBounds calculates wrong width for TextAttribute.TRACKING other than 0.0|
|JDK-8307378||Allow collectors to provide specific values for GC notifications' actions|
|JDK-8307466||java.time.Instant calculation bug in until and between methods|
|JDK-8307134||Add GTS root CAs|
|JDK-8289735||UTIL_LOOKUP_PROGS fails on pathes with space|
|JDK-8306976||UTIL_REQUIRE_SPECIAL warning on grep|
|JDK-8306825||Monitor deflation might be accidentally disabled by zero intervals|
|JDK-8304295||harfbuzz build fails with GCC 7 after JDK-8301998|
|JDK-8304760||Add 2 Microsoft TLS roots|
|JDK-8305975||Add TWCA Global Root CA|
|JDK-8306774||Make runtime/Monitor/GuaranteedAsyncDeflationIntervalTest.java more reliable|
|JDK-8305994||Guarantee eventual async monitor deflation|
|JDK-8301190||[vectorapi] The typeChar of LaneType is incorrect when default locale is tr|
|JDK-8306883||Thread stacksize is reported with wrong units in os::create_thread logging|
|JDK-8306734||Shenandoah: Missing barriers on deoptimization path|
|JDK-8306658||GHA: MSVC installation could be optional since it might already be pre-installed|
|JDK-8305403||Shenandoah evacuation workers may deadlock|
|JDK-8305352||updateIconImages may lead to deadlock after JDK-8276849|
|JDK-8304291||[AIX] Broken build after JDK-8301998|
|JDK-8306543||GHA: MSVC installation is failing|
|JDK-8297587||Upgrade JLine to 3.22.0|
|JDK-8304498||JShell does not switch to raw mode when there is no /bin/test|
|JDK-8298887||On the latest macOS+XCode the Robot API may report wrong colors|
|JDK-8302491||NoClassDefFoundError omits the original cause of an error|
|JDK-8302191||Performance degradation for float/double modulo on Linux|
|JDK-8296412||Special case infinite loops with unmerged backedges in IdealLoopTree::check_safepts|
|JDK-8305113||(tz) Update Timezone Data to 2023c|
|JDK-8296318||use-def assert: special case undetected loops nested in infinite loops|
|JDK-8298568||Fastdebug build fails after JDK-8296389|
|JDK-8303069||Memory leak in CompilerOracle::parse_from_line|
|JDK-8201516||DebugNonSafepoints generates incorrect information|
|JDK-8303564||C2: "Bad graph detected in build_loop_late" after a CMove is wrongly split thru phi|
|JDK-8301338||Identical branch conditions in CompileBroker::print_heapinfo|
|JDK-8299570||[JVMCI] Insufficient error handling when CodeBuffer is exhausted|
|JDK-8303508||Vector.lane() gets wrong value on x86|
|JDK-8304683||Memory leak in WB_IsMethodCompatible|
|JDK-8303511||C2: assert(get_ctrl(n) == cle_out) during unrolling|
|JDK-8301491||C2: java.lang.StringUTF16::indexOfChar intrinsic called with negative character argument|
|JDK-8290822||C2: assert in PhaseIdealLoop::do_unroll() is subject to undefined behavior|
|JDK-8300590||[JVMCI] BytecodeFrame.equals is broken|
|JDK-8289748||C2 compiled code crashes with SIGFPE with -XX:+StressLCM and -XX:+StressGCM|
|JDK-8299959||C2: CmpU::Value must filter overflow computation against local sub computation|
|JDK-8300079||SIGSEGV in LibraryCallKit::inline_string_copy due to constant NULL src argument|
|JDK-8302595||use-after-free related to GraphKit::clone_map|
|JDK-8302594||use-after-free in Node::destruct|
|JDK-8297730||C2: Arraycopy intrinsic throws incorrect exception|
|JDK-8302172||[JVMCI] HotSpotResolvedJavaMethodImpl.canBeInlined must respect ForceInline|
|JDK-8300823||UB: Compile::_phase_optimize_finished is initialized too late|
|JDK-8296389||C2: PhaseCFG::convert_NeverBranch_to_Goto must handle both orders of successors|
|JDK-8299259||C2: Div/Mod nodes without zero check could be split through iv phi of loop resulting in SIGFPE|
|JDK-8299179||ArrayFill with store on backedge needs to reduce length by 1|
|JDK-8304871||Use default visibility for static library builds|
|JDK-8304671||javac regression: Compilation with --release 8 fails on underscore in enum identifiers|
|JDK-8303102||jcmd: ManagementAgent.status truncates the text longer than O_BUFLEN|
|JDK-8227257||javax/swing/JFileChooser/4847375/bug4847375.java fails with AssertionError|
|JDK-8302976||C2 intrinsification of Float.floatToFloat16 and Float.float16ToFloat yields different result than the interpreter|
|JDK-8301998||Update HarfBuzz to 7.0.1|
|JDK-8300692||GCC 12 reports some compiler warnings in bundled freetype|
|JDK-8303937||Corrupted heap dumps due to missing retries for os::write()|
|JDK-8303440||The "ZonedDateTime.parse" may not accept the "UTC+XX" zone id|
|JDK-8282201||Consider removal of expiry check in VerifyCACerts.java test|
|JDK-8303186||Missing Classpath exception from Continuation.c|
|JDK-8303906||Update jdk20u fix version to 20.0.2|