<!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: a substrate for virtual machines</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: a substrate for virtual machines</h1> | |
<!--*********************************************************************--> | |
<p>Current MREs are monolithic. Extending them to propose new features or | |
reusing them to execute new languages is difficult. VMKit is a library | |
that eases the development of new MREs and the process of experimenting | |
with new mechanisms inside MREs. VMKit provides the basic components of | |
MREs: a JIT compiler, a GC, and a thread manager.</p> | |
<p>VMKit relies on <a href="http://llvm.org">LLVM</a> for compilation and | |
<a href="http://jikesrvm.org/MMTk">MMTk</a> to manage memory. | |
Currently, a full Java virtual machine called J3 is distributed with VMKit. | |
<!--=====================================================================--> | |
<h2 id="goals">Features</h2> | |
<!--=====================================================================--> | |
<p>For the end user, VMKit provides: | |
<ul> | |
<li>Precise garbage collection. | |
<li>Just-in-Time and Ahead-of-Time compilation. | |
<li>Portable on many architectures (x86, x64, ppc32, ppc64, arm). | |
</ul></p> | |
<p>For the MRE developer, VMKit provides: | |
<ul> | |
<li>Relatively small code base (~ 20k loc per VM) | |
<li>Infrastructure for virtual machine research and development | |
</ul></p> | |
<!--=====================================================================--> | |
<h2 id="goals">Current Status</h2> | |
<!--=====================================================================--> | |
<p>VMKit currently has a decent implementation of a JVM called J3. It | |
executes large projects (e.g. OSGi Felix, Tomcat, Eclipse) and the DaCapo | |
benchmarks. A R virtual machine is currently under heavy development.</p> | |
<p>J3 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> | |
<p>While this work aims to provide a fully functional JVM, it is still early | |
work and is under heavy development. Some of the common missing pieces in | |
vmkit/llvm are: | |
<ul> | |
<li>Mixed interpretation/compilation. | |
<li>Adaptive optimization. | |
</ul></p> | |
<!--=====================================================================--> | |
<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>Paper on the design of VMKit: | |
<ul> | |
<li><a href="publications/vmkit.html">VMKit: a Substrate for Managed Runtime Environments</a> | |
</li> | |
</ul> | |
<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 currently has a decent implementation of a JVM. It executes | |
large projects (e.g. OSGi Felix, Tomcat, Eclipse) and the | |
<a href="http://dacapobench.org">DaCapo benchmarks</a>. | |
</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> | |
<!--=====================================================================--> | |
<h2>VMKit2</h2> | |
<!--=====================================================================--> | |
<p>The project VMKit2, sponsored by Inria and LIP6, a fork of VMKit | |
project, that was recently integrated back into VMKit project.</p> | |
<table cellpadding="0" cellspacing="0" width="100%"> | |
<tbody><tr> | |
<td valign="middle" align="center" width="25%"> | |
<a href="http://www.inria.fr"> | |
<img border="0" src="http://www.inria.fr/var/inria/storage/images/medias/inria/images-corps/logo-inria-institutionnel-couleur/410230-1-fre-FR/logo-inria-institutionnel-couleur.jpg" height="80" alt="INRIA"></a> | |
</td> | |
<td valign="middle" align="center" width="50%"></td> | |
<td valign="middle" align="center" width="25%"> | |
<a href="http://www.lip6.fr"> | |
<img border="0" src="lip6.png" height="70" alt="Laboratoire d'Informatique de Paris6"></a> | |
</td> | |
</tr></tbody> | |
</table> | |
</div> | |
</body> | |
</html> |