VMKit: JVM and .Net runtimes for LLVM
The VMKit project is an implementation of a JVM and CLI virtual machine (.Net is an implementation of the CLI). It translates Java bytecode and MSIL in the LLVM IR and uses the LLVM framework for optimizations and just in time compilation. You can get and build the source today.
Features and Goals
Some of the goals for the project include the following:
End-User Features:
- Virtual machine interoperability
- Experiment virtual machine technologies with a small code base
- Very fast on CPU-intensive applications
Utility and Applications:
- Infrastructure for virtual machine development
- Use the LLVM 'BSD' License
Internal Design and Implementation:
- Real-world, production quality virtual machines (the JVM runs Tomcat)
- A simple and hackable code base
- Execute virtual machines in the same environment
Why?
The development of VMKit was started out of a need to factorize virtual machine development. The JVM and CLI virtual machine have many similarities, but are too high-level to be the basis of a "universal" virtual machine. The LLVM IR on the opposite is low-level enough to be able to execute these VMs. VMKit is a proof of concept implementation towards that direction.
An introduction to VMKit can be found in the following video lectures:
A port of VMKit to use the Boehm GC can be found in the following paper:
For an example of what kind of experimental technologies we can implement in a timely fashion with VMKit:
Current Status
VMKit is still in its early development stages. If you are looking to experiment virtual machine technologies, VMKit is probably a great solution for you. If you want to use it as a drop in JVM or .Net, it is not yet ready.
VMKit currently has a decent implementation of the JVM. It executes Apache projects (e.g. OSGi Felix and Tomcat) and the SPECJVM98 benchmark. The CLI implementation is still in its early stages, but can execute simple applications.
The JVM has been tested on Linux/x64, Linux/x86, Linux/ppc32, MacOSX/x64, MacOSX/x86, MacOSX/ppc32. The JVM may work on ppc64. Support for Windows has not been investigated
Get it and get involved!
Start by getting the code, building it, and playing with it. This will show you the sorts of things we can do today.
Once you've done that, please consider getting involved in the VMKit community. Currently, VMKit is tightly integrated into the llvm community. You can sign up for the llvm mailing list to ask and learn about how the project works.