|This article does not cite any sources. (September 2009) (Learn how and when to remove this template message)|
|Developer(s)||Bryan Ford, Russ Cox|
|Operating system||FreeBSD, Linux, Mac OS X|
|Type||Application-level virtual machine|
The Vx32 virtual extension environment is an application-level virtual machine implemented as an ordinary user-mode library and designed to run native x86 code. Applications can link with and use Vx32 in order to create safe, OS-independent execution environments, in which to run untrusted plug-ins or other extensions written in any language that compiles to x86 code.
From the host processor's viewpoint, plug-ins running under the Vx32 virtual machine monitor run in the context of the application process itself, but the Vx32 library uses dynamic recompilation to prevent the "guest" plug-in code from accessing memory or jumping to instructions outside its designated sandbox. The Vx32 library redirects any system calls the plug-in makes to the application itself rather than to the host operating system, thereby giving the application exclusive control over the API and security environment in which the plug-in code executes.
Vx32 thus provides an application extension facility comparable in function to the Java virtual machine (JVM) or the Common Language Runtime (CLR), but with less overhead and with the ability to run code written in any language, safe or unsafe. Vx32's primary disadvantage is that it is more difficult to make it run on non-x86 host processors.
There are some disadvantages that have been proposed by critics of Vx32:
- Vx32 is closely tied to the IA-32 instruction set, which makes it difficult to use on non-x86 architectures
- The IA-32e (AMD64) mode cannot be used by guests (the host can still run in 64-bit mode), because of the use of segmentation which is inherent to Vx32's design
- The Vx32 Virtual Extension Environment
- Vx32: Lightweight User-level Sandboxing on the x86 - Paper presented at USENIX 2008
- 9vx - A port of Plan 9 from Bell Labs to vx32.
- vx32 for Win32