A virtual machine is a piece of computer software designed to reproduce a specific set of computer behaviors and capabilities other than the ones native to the computer or operating system on which the software itself is running.
Some virtual machines are emulators; these allow software written for one machine to run on another. Others produce behaviors and capabilities of a machine that doesn't necessarily exist as an actual piece of hardware but may only be a detailed specification. For example, the P-code machine specification (one of the first) was a description of a specific set of capabilities and behaviors that programmers could use to write programs that would run on any computer running virtual machine software that correctly implemented the specification. More modern examples include the specification of the Java virtual machine and the Common Language Infrastructure virtual machine at the heart of the Microsoft .NET initiative. These allow diverse computers all to run software written to that specification; the virtual machine software itself must be written separately for each type of computer on which it runs.
Another type of virtual machine lets you run one operating system on top of another on the same machine. One early use of this concept was the IBM [CMS] operating system. It provided a separate virtual machine environment for each individual user program. In that way, the programs could be written simply as if they were running alone, and the OS quietly provided multitasking and resource management services behind the scenes. This also enabled IBM to upgrade the hardware, install a new version of the CMS VM, and thereby allow user programs to take advantage of the new hardware without being rewritten. The plex86 and VMWare packages do the same thing on modern PCs, trapping all hardware accesses and simulating all of a motherboard except for the processor.
A selection of virtual machines:
- Common Language Infrastructure
- Java virtual machine
- O-code machine
- P-code machine
- SECD machine
- Parrot a virtual machine being developed for Perl 6
- TrueType virtual machine