page en construction --

YNVM: a prototype of Virtual Virtual Machine

YNVM is a recursive acronym for YNVM's Not a Virtual Machine.


page en construction --



As a first step to the (long) way to the VVM, we realized the Recursive Virtual Machine. The RVM is able to modify its own instruction and primitive sets at runtime. It's a Lisp like interactive language that has been implemented on top of UNIX for several architectures (Pentium, Sparc and PowerPC). By adding or changing instructions sets on the fly, the RVM allows to reconfigure itself to a VM adapted to a given application domain. For now, this application domain should be able to run on top of Unix (we are working on a RVM version based on the OSKit that will allow the RVM to adapt the operating system itself). Compared to an operating system the RVM looks like a mono-user, mono-application environment. The difficult problems of interoperability between VMlets and the security/verification of the specifications contained in a VMlets are still open.


YNVM was created with an aim of improving the performances of the RVM. RVM is a reflective interpreted virtual machine, YNVM includes a JIT (Just In Time compiler). Primarily, YNVM is both a reflective dynamic compiler and a reflective dynamic library loader.

Several projects use the YNVM as a reflective execution environment (C/SPAN, Nevermind, JnJVM, CVM, DVVM). The architecture of the YNVM was improved during these projects.


The YNVM is a flexible dynamic code generator that provides both a complete: reflexive language and a flexible execution environment.

The YNVM is structured as a set of components and interfaces — such as lexer, parser, compiler, optimizer, code generator and runtime assembler — implementing a flexible chain of dynamic compilation. By dynamically recomposing or modifying at runtime the layers within the YNVM, any dedicated chain of compilation can be constructed.

YNVM architecture 001
Figure 1 – Architecture du compilateur dynamique YNVM.

The default front-end "language" is a lisp-like, textual representation of a syntax tree. The execution model is identical to that of C and the dynamically compiled and optimized C programs.

Meta-data are retained during compilation to permit dynamic modification or serialization of application level code by the application itself.

The main objectives of this environment are:

page en construction --

Limitations and evolution of the prototype

Our experiment, in particular in the migration of the Java process (JnJVM), permits to show the limits of the YNVM:

A new prototype of VVM must be produced to answer these chalenges.

page en construction --

Last modification on: Fri Oct 22 2004 - 16:29:04 +0200