The idea is to design simple computers, similar in complexity to vintage homecomputers. These computers are never built, but simulated on a PC. A standard PC will typically be able to run dozens or hundreds of these virtual machines at once. This is where the magic begins: The microcomputers are equipped with communication devices, allowing them to connect and talk to each other. The goal is to see useful structures grow spontaneously, like crystals.
By keeping the microcomputer architecture very simple, the emulation software can also be kept small and simple. This allows for rigorous verification. The benefits of completing this process are tremendous: If the emulation software is correct, untrusted code can be run without worry as emulated code can never escape out of the emulator. Other important benefits of the emulation approach include the ability to suspend, resume, clone, inspect or modify running programs at any time. Programs can also be easily sent through the network.
The prototype is a Java-based software currently under development. It is already able to run simple programs.
The computer design currently supported is called MVM (Minimal Virtual Machine). MVM's processor knows only a single instruction, subleq (subtract and branch if less or equal). In previous work, the instruction usually has only one addressing mode (mem/mem); for practical purposes, I added a second addressing mode (const/mem).
The MVM processor has no registers or flags.
MVM supports virtual devices that are mapped into its linear address space. Typical devices include an arithmetic unit, a system clock and a virtual video chip.