Emulation is providing your user with a complete model of your emulated system for their use, requiring every little thing to be translated between your host and your target environments.
Virtualization is a way of exposing the “virtualized” object for shared use, in other (very loose) words, dividing the resources of your host computer into many “virtual copies” of those resources, fooling the user of each virtual copy of the host into believing that they are running on a “real” machine and have the whole machine to themselves.
Virtualization is much faster than emulation, due to the fact that you are using the “real” components rather than a software simulation. In a case where VMWare and Virtual PC both emulate the BX chipset but virtualize the processor this is much less resource intensive than emulating both the chipset AND the processor AND everything else in a tool like BOCHS.
Virtualization in the recently popular sense comes in two flavors.
1. System Virtualization: This is where a virtual model of the computer hardware is created. This enables the user to create multiple “sessions” that each think they are running on top of the real computer directly.
Popular examples of this kind of system are VMWare and Virtual PC.
Quite often in this kind of virtualization, the most important parts of the host hardware are virtualized but some components of the virtual computer environment used by guest sessions are emulated, to ensure stability and consistancy when moving virtual machines from one physical platform to another.
2. Application Virtualization: This is where an application is placed within a virtualization session “wrapper” running on top of your current OS. Examples of this kind of system are Thinstall and Softgrid.
The “wrapper” intercepts all interactions between your application and the real system, in order to protect the main system from any programs that you need to run but which sometimes misbehave or which have very odd compatability requirements (e.g. assume they are running as admin).
So far, this article has sounded like a paid advert from the international society for the promotion of Virtualization, but emulation has its uses. Emulation is used to allow a system to run software that was originally designed to run in a totally alien environment. It does this by creating a complete map, in software, of the hardware and software in the original environment.
A popular example of emulation that I’ve already mentioned is Virtual PC for the Power PC Mac.
Another popular example, still centred on the Mac, would be Apple’s “Rosetta” technology to allow the new Intel based Macs to emulate a Power PC processor to run code originally produced for the old Mac systems.
Yet another example, and those of you who enjoy the odd computer game will have heard of this one, is MAME. Mame is a system that allows modern computers to emulate old style arcade game cabinets, leaving you to load the appropriate, legally acquired, game ROM whenever you want to remind yourself of all the time you wasted in games arcades when you were younger.