Review of Virtual Machines
This page is under constant construction.
Please help me enrich it,
by sending annotations to existing pointers,
new pointers,
and the usual feedback.
Please tell me about any other interesting
pointer you know, that may relate somehow (anyhow) to the Tunes project...
WARNING: I've just begun this page, so it's rather empty, currently.
Contents
This index favors original and research virtual machines and calculi,
and free implementations.
In each category, machines are listed in alphabetical order.
Abstract Virtual Machines
Theoretical VMs
All machines and calculi presented are universal, i.e. Turing-equivalent.
Lambda Calculus
-
Lambda calculus is not only an abstract calculus,
but the calculus of abstraction.
It was invented even before Turing Machines,
also as a universal computational framework;
but its potential was not unleashed immediately.
-
Check pages and books about functional programming,
functional programming languages,
computer science laboratories,
theoretical computer science research, etc,
for more about lambda calculus.
-
A bibliography couldn't fit this page,
but I'll accept contributed meta-pointers,
and pointers to essential articles, and good tutorials.
-
A few pointers:
- See the series of "Lambda, the ultimate QUUX" articles.
In the original ones by GLS, QUUX={imperative|declarative}.
- This
W7 article could have been called
"Lambda, the ultimate security construct".
Pi Calculus
-
Pi calculus is an abstract model for parallel computations.
Its basic version is very low-level, but already universal.
Higher-order versions encompass lambda-calculus.
-
A bibliography couldn't fit this page,
but I'll accept contributed meta-pointers,
and pointers to essential articles, and good tutorials.
-
About Pi-calculus, I've found these pages:
concorrencia,
mobility.
Turing Machines
-
The first virtual machine successfully designed to
embody universal computations is the
Turing Machine.
-
Check Turing's original 1936 article for details;
the principle of Turing Machines is also described (often with variations)
in any book on the principles of Computing Theory.
Concrete Virtual Machines
These are Virtual Machines with concrete implementation
and precise byte-level encoding,
that you can readily use to transmit code.
Free VMs
ANDF
-
The ANDF (Architecture Neutral Distribution Format)
technology for portable binary code distribution
was developed by the OSF.
-
It's based on compilers outputing code for
a low-level virtual machine,
that then gets compiled by an architecture specific program
on the host that runs the code.
-
ANDF is freely available,
and there's an ANDF backend for GCC.
-
You shouldn't use ANDF anyway, because it's much too low-level,
and doesn't support GC.
-
I haven't double-checked the information in here,
so you'd better check yourself,
and tell me how I should correct this entry.
Guile
- GUILE,
"GNU's Ubiquitous Intelligent Language for Extension",
has some very interesting approaches for a VM.
Its VM is the Scheme programming language,
which is powerful enough to have
arbitrary frontends to other languages.
So you can write software in any language and with any syntax
(a compact byte-code syntax is feasible),
yet run it inside a GUILE environment.
This might be any program linked to the GUILE library.
Hence, any program can be extended using any language.
JVM
- The infamous Java Virtual Machine (JVM) is a VM introduced by Sun
as a standard compact (so they say) low-level
representation for programs written in Java.
It sucks in that it is both too low-level and too high-level
to prevent efficient analysis, front-end and back-end compilation,
plus it's too adapted to Java.
- A very bad choice for Java, even more so for other languages.
It's kind of the latest fad, but stay away from it if you can.
- Kaffe
is a free implementation of the JVM by the GNU project.
This includes both an interpreter
and JIT compiler for various systems.
- Programming Languages for the Java Virtual Machine
Juice
-
Juice
is a portable code structure which could be said to store a dataflow tree
as might be created by a powerful compiler. Source code is available.
It's made to work with Oberon,
but it's designed to be mostly language-independant,
except that the language must have GC, runtime typing capability, and so on.
- I'm VERY impressed;
it makes portable code verification and
native code generation almost EASY.
-
A few pointers:
Introduction,
Research,
Michael Franz,
Thomas Kistler,
Slim binaries,
Oberon.
- [Reviewed by William Tanksley]
Squeak
- Squeak is a free VM used to implement a Smalltalk-80 superset,
including full source in Smalltalk
and a reduced Smalltalk to C translator.
- Developed by Apple for its MacIntosh,
ported to
all common 32-bit architectures.
Proprietary VMs
These you shouldn't use, least you'll become the hostage
of the vendors who lock you and whoever else you will communicate with you
into their technology.
However attractive a proprietary technology may appear,
it shouldn't be used as a means of communication.
Happily, no one owns the english language.
Of course, it is good to know what proprietary VMs exist or have existed,
to be aware of their advantages and shortcomings,
which is why they are listed here.
i8086
- The most infamous virtual machine in computer history,
that throttled for so many years advances in computer technology,
has been the i8086 instruction set,
upon which the "PC-compatible" computers were built.
Because this "industry standard" was so low-level,
software could not be written to take advantage
of other better faster simpler smaller cheaper hardware architectures.
- You're not convinced that the i8086 instruction set is a virtual machine?
See how the modern compatible CPU,
like the AMD K6,
actually emulates the 8086 instruction set on top of a RISC core...
- To be fair, Intel shouldn't be the most blamed one for that:
the misdesign of an operating systems that so deeply depends
on the processor structure,
the lack of free portable development tools,
was not their fault (they did encourage it, though).
The only thing Intel did was to continue produce ever faster hardware
in response to a demand for a series of compatible processors.
and benefit from the PC market having relatively low price due
to standardness.
IBM and Microsoft should be blamed,
together with all the competing OS vendors,
who all wrote proprietary hardware-dependent OSes,
so that in any case, customers were taken hostages.
- However lame the legacy design,
free competition from free specifications
allows Intel-compatible platforms to currently give
the more bangs per bucks.
Hence, even if hopefully
and there's no reason why intel should not continue
to produce quality hardware
after the end of that sad i8086 compatibility episode.
Pressure from competition will have them work better and
lower their prices.
- The morale of the story is that (1) a virtual machine
designed for a portable interchange of programs
should be high-level enough so that it could be implemented
efficiently on just any present and future hardware and
(2) is should be free not proprietary.
TAOS
- Despite the hype,
it seems that the TAOS VP (virtual processor),
as used in the Tao OS
is just a proprietary variation on the ANDF idea.
- Just stay away from it, as well as from other proprietary crap,
all the more when it's so low-level.
- Of course, this is written from the few information available about
TAOS, so tell me if you find more (or come to different conclusions).
...
-
More netsurfing
To Do on this page
- Add historical notes and credits
- Actually review these VMs, do not merely point to them. Gasp.
- Find other generic pages about VMs, if any.
- Send a note to all the generic VM pages that do not cite us.
- Gather pointers
- Add references to related languages
- Add these entries among abstract machines:
- Add these entries among concrete machines:
- Actual CPUs -- point to related CPU pages.
- Actual Object File Format encoding -- point to related pages;
includes Fat binaries
- UCSD Pascal P-code
- JVM
- ABVM
- UVM (?)
- Dis from Inferno OS.
It's supported on lots of hardware and software platforms,
with lots of interesting backends and frontends.
Is it freely usable?
see Inferno and
see Limbo.
- LispVM
- Discuss issues of "UNCOL"
- Discuss the choice of a universal language for distributing code
- point to the
Migration
subproject.
- A web search found
this page and
this one
- The Tube mobile code system
and Hare
- an article in infoworld
- an article from project SOR at INRIA
Back to the
Review subproject.
Page Maintainer:
Faré
-- rideau@clipper.ens.fr