Update on IKVM, a JVM for the Common Language Runtime
The goal of IKVM is to add Java support to the Common Language Runtime in two ways. In dynamic mode Java byte code is reinterpreted as IL code at runtime. In static mode, Java source code is compiled into IL instead of Java byte code. Running in either mode, IKVM seeks to be a nearly full implementation of the Java specification. Aside from some libraries that are not yet implemented, the major difference is that class loading in static mode will not exactly match the JVM behavior.
IKVM consists of a number of components.
- ikvm: A started executable used in dynamic mode. One could think of it as the CLR version of java.exe
- ikvmc: A static compiler that is used to compile Java classes and jars into .NET assemblies under the static mode paradigm.
- ikvmstub: This tool is used to create class files that act as stubs for .NET classes that a Java program needs.
- IKVM.Runtime.dll: This is the VM runtime itself. In addition to the just-in-time byte code to IL converter it handles the mapping between the Java and .NET object model.
- IKVM.OpenJDK.*.dll: This is the “compiled version of the Java class libraries, plus some additional IKVM.NET specific code.”
- ikvm-native.dll: A unmanaged C library needed for the JNI interface.
- IKVM.AWT.WinForms.dll: This contains the AWT and Swing peers.
IKVM is currently in release candidate 3. You can see the current list of known issues and incompatibilities on the IKVM blog.
The coverage and completeness was way beyond my expectations. It was also simple to understand, configure and start using. It was such a pleasure (and a relief) to find something that delivered so much value without any Sturm und Drang.
Total respect to the IKVM team.