IKVM.NET
 
   

IKVM.NET Home Page

Introduction

IKVM.NET is an implementation of Java for Mono and the Microsoft .NET Framework. It includes the following components:

  • A Java Virtual Machine implemented in .NET
  • A .NET implementation of the Java class libraries
  • Tools that enable Java and .NET interoperability

Read more about what you can do with IKVM.NET.

IKVM.NET Components

IKVM.NET 0.36 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.

Project Status

This project is currently in active development. Compliance with JDK 1.6 is largely implemented, but there are some holes. In particular,

  • AWT and Swing are not presently functional. This is a low priority item for the project developers.
  • Security is another fairly large hole missing from the IKVM platform. This will be solved by relying on the sophisticated and powerful security model offered by the .NET platform.

Still, enough functionality is in place that several large Java projects run successfully.

Related Work

Valid HTML 4.01!Valid CSS!Built with Apache Forrest logo