- A Java Virtual Machine implemented in .NET
- A .NET implementation of the Java class libraries
- Tools that enable Java and .NET interoperability
IKVM.NET consists of several parts:
IKVM.Runtime.dll: The VM runtime and all supporting code. It contains (among other things):
- Byte Code JIT compiler/verifier: Just-in-time compiles Java Byte Code to CIL.
- Object model remapping infrastructure: Makes System.Object, System.String and System.Exception appear to Java code as java.lang.Object, java.lang.String and java.lang.Throwable.
- Managed .NET re-implementations of the native methods in Classpath.
- IKVM.OpenJDK.ClassLibrary.dll: compiled version of the Java class libraries derived from the OpenJDK class library with some parts filled in with code from GNU Classpath and IcedTea, plus some additional IKVM.NET specific code.
- ikvm-native.dll: Unmanaged C library that implements a small part of the JNI interface and some platform specific code on non Windows platforms. On Windows this is an optional part, only required when an application uses its own native libraries. This is not needed for pure Java applications. On non-Windows platforms it is required, but it is included with the Mono distribution so it usually doesn’t need to be installed seperately.
- ikvm.exe: Starter executable, comparable to java.exe (“dynamic mode”).
- ikvmc.exe: Static compiler. Used to compile Java classes and jars into a .NET assembly (“static mode”) .
- ikvmstub.exe: A tool that generates stub class files from a .NET assembly, so that Java code can be compiled against .NET code. IKVM.NET understands the stubs and replaces the references to the stubs by references to the actual .NET types.
- IKVM.AWT.WinForms.dll: Very limited and broken implementation of a few AWT peers. This is a low priority issue for me.