Okay, but what IS application virtualization?
The reason we found it rather hard to describe application virtualization is that it has such a broad meaning. In order to understand it, we first need to go over the different kinds of virtualization.
When first confronted with this term, many people will instantly link it to hardware virtualization. Although hardware virtualization can also be divided into many subcategories, that is not the focus of this article. Hardware virtualization is essentially an entire set of simulated hardware that an operating system can run on, and the complete package is what we call a virtual machine (VM). The VM is completely independent from the host OS and can easily be moved around and run from a different machine, even with a different host OS, as long as the required management software is present.
There are two main types of hardware virtualization, one that based on the use of a hypervisor (ESX, Hyper-V), and one that functions as a software package running on top of host OS (VMware Server, Parallels Desktop). The hypervisor runs directly on the hardware, functioning as a low overhead virtual machine manager. Software packages offer similar functionality but with increased overhead.
Hardware virtualization consists of two areas. The guest OS and applications are unaware of their virtualized state, and function as though they have sole access to the computer hardware. In reality, they talk to the hypervisor or management software, which takes care of routing the calls to the actual hardware. This is a technique regularly used by companies to consolidate older servers and for running less demanding servers. A major benefit is that there is no need to purchase a new system for every new service they wish to offer. It's also used quite often for development testing purposes, due to its sandbox nature (you can test on multiple OSes simultaneously on a single physical computer), and even in the consumer market people use hardware virtualization as a means to run different OSes at the same time (i.e. a full Linux installation running under Windows XP).
Another, less well-known form of virtualization is OS virtualization. Though more commonly used on Linux-based systems (for example by OpenVZ), Parallels Virtuozzo provides a Windows alternative. Instead of simulating an entire set of hardware, the existing OS is "partitioned" to cater to several isolated applications that are all operating under the impression that they have sole control of the OS. Though this remains restricted to the use of one kernel, the partitions can use different distributions and/or drivers and run completely independently. The interesting thing about this approach is that, though different services can run in a completely isolated environment, the amount of overhead created on the host system is greatly reduced compared to hardware virtualization, as there is no need to maintain a complete set of hardware for each partition.
With OS virtualization, every container makes use of the same base OS, while advanced isolation and resource management allow every container to feel like a separate server to its users. The recurring trend in both these technologies is the isolation of certain resources while still allowing applications and software to function normally, unaware of the sandbox state. Virtualization just adds a layer between the physical resources and the software that requires these resources, creating an environment where the resource will no longer influence anything beyond that layer.
When moving to application virtualization, we take another step and follow the same logic, turning applications into isolated, self-contained packages that are able to operate under an OS and use all of its resources, but they are unable to wreak havoc when things go wrong. Because the packages are basically a complete environment they no longer require installation, thus providing extremely easy software distribution along with the safety of a completely isolated application. We'll cover more of the interesting uses of application virtualization later, though.
Virtualized applications can run perfectly next to regularly installed applications, and next to each other. This allows a user to run several different versions of the same software at the same time, and can reduce software conflicts to a minimum. While researching this subject, we regularly bumped into a conflict discussing the "two kinds of application virtualization". While the above image in fact applies to either approach, there's a rather significant difference in their usage, so let's cover that first.