GraalVM has introduced support for COBOL, extending the support where a single runtime can support multiple interoperable languages. This has extended the reach of Java (the language) that can run on multiple platforms to Java (the virtual machine) that can run many languages on many platforms.
The work was introduced by Christoph Schobesberger in October, through his research work at JKU Linz University. The technology works through GraalVM’s integration with LLVM bitcode. The path through LLVM differs from the way that HotSpot implementations implement support for alternative languages like Nashorn (JavaScript in Java 8, deprecated later) and JRuby (an active external project). Where the HotSpot implementations target Java bytecode and JSR-292 (dynamic languages) and its subsequent JIT optimizations, GraalVM languages like TruffleRuby pursue optimization at the LLVM level for native ahead-of-time compilation. GraalVM also offers a HotSpot mode apart from its native compilation.
The role of polyglot (multi-language) programming is an aim of GraalVM, where developers can create interoperable software that is native compiled, connecting to a library from another language that provides a benefit but may not be understood by the author. In the case of COBOL, applications that are compiled with GnuCobol can be engaged by developers who understand Java. This bridge can help bridge the gap to maintain older software systems that may be written in COBOL but are difficult to maintain. IBM Systems Media indicates that approximately 10% of COBOL engineers are retiring each year at an average age of 58 and that systems can be altered for interoperability with Java. IBM is also alleged to have encouraged forced retirements of employees in various age discrimination lawsuits.
Apart from the COBOL integration, GraalVM maintains an active list of polyglot languages with instructions for running programs. This list includes other languages: JavaScript/Node, Python, R, Ruby, and WebAssembly. Much of this work derives from the research of Thomas Wurthinger and others as described in their 2015 ACM paper, "High-performance cross-language interoperability in a multi-language runtime." One crucial ability to manage execution across languages is the ability to see and visualize the execution of those languages for flaws at the compiler level. This visualization is enabled through the Ideal Graph Visualizer.
While the draw of GraalVM and its polyglot model can appeal to developers, the primary benefit of AOT compilation does not always achieve desired results to decrease resources and cost. A blog post by Payara analyzed the execution cost of different workloads on a serverless or containerized execution model. While some applications may receive a cost benefit, the cost benefit may work in reverse in some cases based on memory demands and application usage patterns. As a series of small functions, most serverless systems use a single language rather than the polyglot capabilities.