blob: 231f772d73d9cc989a9911bd1544b594dbfd5ef1 [file] [log] [blame]
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
"http://www.w3.org/TR/html4/strict.dtd">
<!-- Material used from: HTML 4.01 specs: http://www.w3.org/TR/html401/ -->
<html>
<head>
<META http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
<title>"VMKit" JVM and .Net runtimes for LLVM</title>
<link type="text/css" rel="stylesheet" href="menu.css" />
<link type="text/css" rel="stylesheet" href="content.css" />
</head>
<body>
<!--#include virtual="menu.html.incl"-->
<div id="content">
<!--*********************************************************************-->
<h1>VMKit: JVM and .Net runtimes for LLVM</h1>
<!--*********************************************************************-->
<p>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 <a href="http://llvm.org">LLVM framework</a>
for optimizations and compilation. For garbage collection, it uses
<a href="http://jikesrvm.org/MMTk">MMTk</a>.
You can <a href="get_started.html">get and build</a> the
source today.</p>
<!--=====================================================================-->
<h2 id="goals">Features</h2>
<!--=====================================================================-->
<p>VMKit provides the following features:</p>
<p><b>End-User Features</a></b>:</p>
<ul>
<li>Runs any Java and .Net applications on MacOSX and Unix-based systems.</li>
<li>Precise garbage collection.</li>
<li>Just-in-Time and Ahead-of-Time compilation.</li>
<li>Portable on many architectures (x86, x64, ppc32, ppc64, arm).</li>
</ul>
<p><b>Developer Features</a></b>:</p>
<ul>
<li>Relatively small code base (~ 20k loc per VM)</li>
<li>Infrastructure for running multiple VM/applications in a single
process</li>
<li>Infrastructure for virtual machine research and development</li>
</ul>
<!--=====================================================================-->
<h2>Why?</h2>
<!--=====================================================================-->
<p>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.</p>
<p>The PhD thesis that initiated VMKit:
<ul>
<li><a href="publications/thesis.html">Nicolas Geoffray's PhD thesis</a>
</li>
</ul>
<p>An introduction to VMKit can be found in the following video lectures:
<ul>
<li><a href="http://llvm.org/devmtg/2009-10/Geoffray_GarbageCollectionVMKit-700kbps.mov">
Presentation of VMKit/MMTk at the 2009 LLVM Developer's Meeting</a>
</li>
<li><a href="http://llvm.org/devmtg/2008-08/Geoffray_VMKitProject_Lo.3gp">
Presentation of VMKit at the 2008 LLVM Developer's Meeting</a>
</li>
</ul>
</p>
<!--=====================================================================-->
<h2>Current Status</h2>
<!--=====================================================================-->
<p>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.</p>
<p>VMKit currently has a decent implementation of the JVM. It executes
large projects (e.g. OSGi Felix, Tomcat, Eclipse) and the
<a href="http://dacapobench.org">DaCapo benchmarks</a>.
The CLI implementation is still in its early stages, but can execute
simple applications.</p>
<p>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
</p>
<!--=====================================================================-->
<h2>Get it and get involved!</h2>
<!--=====================================================================-->
<p>Start by <a href="get_started.html">getting the code, building it, and
playing with it</a>. This will show you the sorts of things we can do
today.</p>
<p>Once you've done that, please consider <a href="get_involved.html">getting
involved in the VMKit community</a>. 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.</p>
</div>
</body>
</html>