Machine emulation has established its place as a truly useful technology in computing. Probably most people reading this will be aware of products like VMWare that allow you to run a "virtual PC" inside your computer, allowing you to host other operating systems inside your Windows machine. Similarly, users of the MacBook will be familiar with Parallels, which allows you to host a virtual Windows machine inside OS-X. In some ways this is the ultimate expression of machine virtuality, as it is hosting one 8086-family processor inside another.

The programming language BCPL , with its origins in the 1960s used an interpreter for an 'ideal machine', running something called O-code, an intermediate code. BCPL compilers would create code in O-code (instead of native machine code like 8086), which could run in a special runtime interpreter. The advantage here was to produce a language system easy to move to a new environment, via a process called bootstrapping, which goes like this:

1. Write an O-code interpreter (perhaps in machine code) for your new processor architecture and operating system.
2. This enables you to run the O-code versions of tools that are already available on the old architecture, including the BCPL compiler itself.
3. Run the BCPL compiler locally, bringing all the already developed tools onto the new platform.

The final stage of bootstrapping might even be to write a native compiler to compile directly to the target architecture (e.g. 8086). Of course this compiler could be written in a high-level language, BCPL, speeding up implementation hundreds of times over writing directly in machine code.

This system allowed BCPL to be ported onto countless different types of machines, and still exists on the PC architecture today. Probably more importantly, because BCPL was able to spread widely, it inspired another generation of students, notably the team at Bell Labs who created the "C" language. In turn C inspired C++, C# and even Java. C# and Java are also coincidentally runtime interpreter systems, like their BCPL ancestor.

In the case of Java this has led to widespread implementation not only in desktop computers but also embedded systems, and it is commonly integrated into mobile phone handsets as Java ME. For the users of mobile handsets, this is probably appreciated as it brings apps like games (and even emulators written in Java) to the handset, but for handset developers it has become even more useful as the Java libraries can usually access every part of the handset from the Camera to the Bluetooth interface and from the GUI to the removeable flash memory card. In an environment where new platforms come out several times a year, time-to-market is a huge concern, and virtual machines are a key to delivering that.