Release Notes

Oracle GraalVM Enterprise Edition 19.3.3

(2020-07-14)

Oracle GraalVM Enterprise Edition 19.3.3 is a Critical Patch Update (CPU) release. It includes all the Oracle Java Development Kit (JDK) security fixes released as part of that CPU. This release fixes vulnerabilities mentioned in July 2020 Oracle Critical Patch Update Advisory.

It also includes the following:

Oracle GraalVM Enterprise Edition 19.3.2

(2020-04-14)

This is a Critical Patch Update (CPU) for Oracle GraalVM Enterprise Edition 19.3.1. The update is to address security vulnerabilities announced in the April 2020 Oracle Critical Patch Update Advisory.

The release also includes:

Oracle GraalVM Enterprise Edition 19.3.1

(2019-01-14)

This is a Critical Patch Update (CPU) for Oracle GraalVM Enterprise Edition. It contains fixes to security vulnerabilities, critical bugs, and other fixes as identified in the January 2020 Oracle Critical Patch Update Advisory.

The 19.3.1 version also includes the following:

For more information about Oracle Critical Patch Updates and Security Alerts, please visit the announcements list.

Please note that for GraalVM Enterprise Edition on Java 11, java -version incorrectly reports a version based on 11.0.6+1 where as it is actually 11.0.6+8. This issue in the GraalVM build process will be remedied in future releases.

Oracle GraalVM Enterprise Edition 19.3.0.2

(2019-12-24)

This is a bugfix update including fixes to the JVM Compiler Interface (JVMCI) and necessary updates to the JDK 11 support. The following issues were addressed:

Oracle GraalVM Enterprise Edition 19.3.0

(2019-11-19)

GraalVM Enterprise 19.3.0 is the first planned long-term support (LTS) release built from the main line of the project. This is also a major feature release and it is a recommended upgrade. It will continue to receive stability, security, and select performance fixes until the next LTS release is available. The LTS designation should provide a level of stability for developers to work with.

GraalVM JDK 11 Based Builds

New in the 19.3 release is the distribution of GraalVM Enterprise builds based on Oracle Java 11.0.5. GraalVM Enterprise on JDK 11 includes all the JDK changes since JDK 8. These are detailed in the release notes for JDK 9, JDK 10 and JDK 11. In particular, the Java Platform Module System (JPMS) introduced in JDK 9 means GraalVM now uses module encapsulation to isolate code such as JVMCI, the GraalVM compiler and the Truffle API from application code.

In terms of languages, GraalVM Enterprise on JDK11 supports all JVM languages (Java, Scala etc.) as well as all guest languages currently supported in GraalVM Enterprise on JDK 8. Due to the modular structure of the base JDK, there is no more $GRAALVM_HOME/jre/ directory in the GraalVM package based on JDK 11. This has an impact on the path to the languages location, e.g., $GRAALVM_HOME/jre/languages/js now becomes $GRAALVM_HOME/languages/js).

Native Image of GraalVM Enterprise functionality now also supports Java 11 code as an early adopter technology feature. Currently the native image builder ($GRAALVM_HOME/bin/native-image) does not support the Java Platform Module System (JPMS) and has no module introspection at image run time.

Pease note, at present GraalVM Updater cannot rebuild images ($GRAALVM_HOME/bin/gu rebuild-images) with GraalVM Enterprise and Community editions on JDK 11. Even if GraalVM Native Image is installed, a user will encounter the following error while rebuilding:

$ $GRAALVM_HOME/bin/gu rebuild-images ruby
Error: rebuild-images utility is not available. You may need to install "native-image" component.
Please refer to documentation for the details.

A possible workaround is to rebuild images invoking rebuild-images command directly, e.g.:

$GRAALVM_HOME/bin/rebuild-images ruby

Native Image

GraalVM Enterprise 19.3.0 switched to using the JDK native code instead of manual substitutions. The switch to Java Native Interface (JNI) platform enabled the possibility to provide support for JDK 11 and extended support for Windows platforms. It has no impact on startup time or memory footprint, and eliminates the need for shipping JDK libraries such as libsunec.so along with native images that use Java crypto services. GraalVM now ships with statically linkable version of the JDK libraries.

Note that the sunec native library of SunEC provider gets statically linked into an image if required (see #951). Thus native images do not depend on the sunec shared library anymore at runtime.

GraalVM Compiler

JavaScript

The Node.js runtime available with GraalVM was updated to the 12.10.0 version, which brought some breaking changes.

Additional proposals for ECMAScript 2020 have been implemented (Promise.allSettled and Nullish coalescing) and are available in ECMAScript 2020 mode (--js.ecmascript-version=2020).

To provide better compatibility with the ECMAScript specification, some extensions are now disabled by default, some depending on the launcher (js, node, or via GraalVM Polyglot Context). This includes the print and printErr functions (the js.print flag), the global built-in (superseded by globalThis, use the js.global-property flag to reenable), or the performance global property (the js.performance flag).

More details can be found in the project changelog on GitHub.

LLVM Interpreter

In GraalVM 19.3 clang and other LLVM tools are no longer required to be installed for building the GraalVM LLVM runtime. The LLVM toolchain bundled with GraalVM Enterprise is used. The LLVM toolchain is not an “experimental” feature any more and is used by other languages.

List of features that have also been added:

Refer to the component changelog for the complete list of changes.

Python

$ graalpython -m ginstall install numpy
$ graalpython -m ginstall install pandas
import urllib.request
print(urllib.request.urlopen("http://google.com").read())

To see a complete list of changes, please refer to the project changelog.

R

To see the complete list of changes, please refer to the project changelog.

Ruby

A comprehensive list of changes to the Ruby language component is available on here.

The focus has been on improving compatibility with Ruby on Rails applications. Major changes include:

Tools

Code Coverage Command Line Tool

As of version 19.3 GraalVM Enterprise provides a code coverage command line tool to record and analyze the source code coverage of a particular execution of code for languages implemented with the Truffle framework. Enable it with --codecoverage option, for example js --codecoverage. Visit the tool reference documentation for more information.

GraalVM VisualVM

Debugger

Visual Studio Code Extensions

VSCode extensions are provided as VSIX packages. GraalVM team created the first VSIX extension based on Python implementation. The extension installs with npm package manager and upon the extension installation, the user is requested to point the PATH environment variable to GraalVM home directory.

Changes for GraalVM Embedders (SDK)

Proceed to the SDK changelog for the complete list of changes.

Changes for GraalVM Language or Tool Implementers (Truffle)

To see the full list of changes to the APIs, proceed to the Truffle changelog.

Oracle GraalVM Enterprise Edition 19.2.1

(2019-10-15)

This is a Critical Patch Update (CPU) for Oracle GraalVM Enterprise Edition following a regular Oracle Java CPU schedule. The update is to address security vulnerabilities announced in the October 2019 Oracle Critical Patch Update Advisory. The 19.2.1 version is a full distribution and it is recommended to upgrade to it from older GraalVM versions.

Oracle GraalVM Enterprise Edition 19.2.1 includes all the Java security fixes released as part of that CPU and mentioned in the Java SE 8 Release notes. It also includes the following:

Listed below are critical bug fixes that went into this version:

Oracle Cloud Infrastructure customers can install GraalVM Enterprise Critical Patch Update using yum – a package-management utility for the Linux operating systems. For more details, proceed to GraalVM on OCI page.

Oracle GraalVM Enterprise Edition 19.2.0.1

(2019-09-13)

This is a high severity update for GraalVM to address the following issues:

Oracle GraalVM Enterprise Edition 19.2.0

(2019-08-20)

This is a GraalVM feature release, Oracle recommends upgrading to it from the 19.1.x or older releases.

Native Image

The process of collecting data for profile-guided optimizations (PGO) for GraalVM Enterprise native images was simplified. PGO allows to optimize performance of native images by analyzing collected profiles during the image generation process. Since 19.2.0 you can collect data for PGO while running your application in a just-in-time (JIT) compiled mode:

$ /graal-ee-19.2.0/bin/java -Dgraal.PGOInstrument=myclass.iprof MyClass
$ /graal-ee-19.2.0/bin/native-image --pgo=myclass.iprof MyClass
$ ./myclass

Performance

There has been a throughput improvement for Native Image in GraalVM Enterprise when no profiles are available. Running the Micronaut GraalVM example shows spending ~10% less CPU time and achieving a ~10% higher throughput of requests per CPU second in 19.2.0.

A common usability problem was solved when a class marked for initialization at runtime gets inadvertently initialized at build time. The flag -H:+TraceClassInitialization was introduced to help tracing what classes got initialized at runtime.

JavaScript

More changes are listed in the JavaScript component changelog.

LLVM Interpreter

A preliminary support for compiling native programs to bitcode using the LLVM toolchain was introduced. The LLVM toolchain is a set of tools and APIs for compiling native projects, such as C and C++, to bitcode that can be executed with the GraalVM LLVM runtime. It is aimed to simplify ahead-of-time compilation for users and language implementers who want to use the GraalVM LLVM runtime. To do so, the launchers that invoke the C/C++ compiler with special flags are provided to produce results that can be executed by the GraalVM LLVM runtime. For more details, please consult the LLVM reference documentation.

The toolchain is an experimental feature in this release. A complete list of changes to GraalVM LLVM runtime can be found in the changelog.

Ruby

A comprehensive list of changes to Ruby language component is available on GitHub. Major changes include:

R

The changelog is available on GitHub.

Python

The GraalVM Python implementation is still experimental and we are working towards improving completeness.

More details are available in the project changelog on GitHub.

API Changes for GraalVM Integrators (SDK + Truffle)

The ability to configure custom polyglot access with PolyglotAccess.newBuilder() has been implemented. It allows to configure fine-grained access control for polyglot bindings and between polyglot languages. For example, given a TruffleObject as a value, there is a need to determine language and type of that object. This feature is significant for GraalVM execution inside Oracle RDBMS.

GraalVM 19.1.1 release also added support for date, time, timezone, duration values in polyglot APIs, and introduced the Context.Builder.timeZone(ZoneId) class to configure the default timezone of polyglot contexts.

The major GraalVM SDK and Truffle APIs changes between the versions are summarized in:

Tools

A preview version of Java Flight Recorder (JFR) support has been released as a plugin for the VisualVM tool bundled with GraalVM 19.1.1. The plugin reads all JFR snapshots created from Java 7 and newer and presents the data in typical VisualVM views familiar for its users.

To install the JFR support, download GraalVM 19.2.0, unzip it and run /bin/jvisualvm to start VisualVM. Use `Tools | Plugins | Available Plugins` to list all available plugins and install the VisualVM-JFR and VisualVM-JFR-Generic modules. The JFR snapshots can be opened using either the "File | Load" action or by double-clicking the JFR Snapshots node and adding the snapshot into the JFR repository permanently. Please follow the documentation of your Java installation how to create JFR snapshots.

JFR support is currently an experimental feature. Some advanced features like analyzing JVM internals, showing event stack traces or support for creating JFR snapshots from live processes are not available in the preview version and will be addressed incrementally in the following releases.

GraalVM Updater Utility

The issue where GraalVM Enterprise would by default download the GraalVM Community components from GitHub was fixed. For a GraalVM Community user – nothing changes, you can still install the components as before, and the gu will locate the necessary jar files on GitHub and correctly install them:

gu install native-image ruby R python

For GraalVM Enterprise, install R and llvm-toolchain components from GitHub, for example:

gu install R

The other components are available from the OTN page, and can be installed from a manually downloaded file, for example to install native-image support run:

gu install -L native-image-installable-svm-svmee-darwin-amd64-19.2.0.jar

Version Calendar

You can now refer to GraalVM version calendar to learn more about the GraalVM release model and prepare for upcoming releases.

Oracle GraalVM Enterprise Edition 19.1.1

(2019-07-16)

This is a Critical Patch Update (CPU) release for the 19.1.0 GraalVM release. Oracle recommends upgrading to it from the 19.1.x and older releases.

This CPU release has been induced by the update to OracleJDK from 8u212 to 8u221 as the base JDK of GraalVM Enterprise. More details can be found here and here.

This CPU release includes fixes for the following CVEs:

For more information please see the Oracle July 2019 Security Advisory.

Critical fixes to GraalVM Native Image listed below went also into this version:

Oracle GraalVM Enterprise Edition 19.1.0

(2019-07-02)

This is a feature release. It is recommend upgrading to it from the 19.0.x releases.

Java

Native Image

We fixed many issues that were reported on GitHub. You can browse the full list here.

JavaScript

public static void main(String[] args) {
        try (Engine engine = Engine.create()) {
            Source source = Source.create("js", "21 + 21");
            try (
              Context context1 = Context.newBuilder().engine(engine).build();
              Context context2 = Context.newBuilder().engine(engine).build()) {
                context1.eval(source).asInt();
                context2.eval(source).asInt();
            }
        }
    }

LLVM Interpreter

Ruby

The GraalVM Ruby implementation in this version targets performance and compatibility improvements, new features implementations and multiple bug fixes. The most notable include:

There is Ruby component changelog available.

R

Python

For more information, proceed to the changelog.

Oracle GraalVM Enterprise Edition 19.0.2

(2019-06-13)

This is a bug fix release for 19.0.0.

Java

Native Image

LLVM Interpreter

Oracle GraalVM Enterprise Edition 19.0.0

(2019-05-09)

We are pleased to announce the first public general availability release of Oracle GraalVM Enterprise Edition 19.

GraalVM Enterprise is built on the global standard for enterprise-class application development, Java SE. GraalVM Enterprise is a multilingual virtual machine and delivers even higher efficiency, better isolation and greater agility for enterprises in cloud and hybrid environments.

The core features of GraalVM Enterprise are:

Additional features which can be added to the GraalVM Enterprise installation include:

Base GraalVM Enterprise 19 distribution includes the following runtimes:

Learn how to begin using GraalVM Enterprise in the Getting Started section of the documentation.