Virtualization is a group of software technologies that allow abstraction between layers of a system. This allows separation between the logical layers of the system, providing isolation, flexibility, and/or the ability to run more than one at a time. This differs from most traditional systems where the various layers are inherently tied.
Virtualization commonly refers to three distinct technologies: Hardware Virtualization, Software Virtualization, and User Experience Virtualization. (Most commonly the first, Hardware Virtualization)
Hardware (sometimes called Operating System virtualization) is the use of software to allow a piece of hardware to run multiple operating system images at the same time. Traditional servers have a 1:1 ratio (One operating system running on one piece of hardware) and virtualization allows 1:many, making efficient use of available hardware. With the use of the hypervisor many operating systems can be run on top of one piece of physical hardware.
There are three main types of hardware virtualization, hypervisor, paravirtualization, and emulation. The bare metal hypervisor, or type 1, itself runs directly on the computer hardware. Hypervisors are generally thought to be enterprise level solutions to virualization as they make the most efficient use of available hardware resources.
Paravirtualization, or type 2, installs on top of a pre-existing operating system. Type 2 solutions are not as efficient because resources are also going to the host operating system, therefore type 2s are possibly better for hobbyist or development. Paravirtualization also requires the guest operating systems to be aware of the virtualization system and be designed to work with it.
Emulation also runs atop an existing system like paravirtualization; unlike its more efficient siblings, every instruction issued by the guest operating system must be interpreted by the emulation system. Emulation is notably less efficient than the other two, however it can enable a guest operating system to run on a host processor that it completely different than it was intended for.
Application Virutalization allows applications, which normally require installation, to run on system where they not actually installed. The virtualization layer simulates the installed prerequisite components, allowing the application to run normally.
There are two main types of User Experience Virtualization: Presentation and Data Location. Presentation Virtualization is commonly implemented by running a program on one system and producing the GUI at another. This may be as simple as a VNC or Remote Desktop Connnection, or a more complicated Virtual Desktop Infrastructure. Data Location Virtualization allows users a consistent view of the logical location of data across multiple distinct systems. The primary advantage of these systems is allowing users to access data in a consistent manor regardless of the physical location of the user or data.