Just when technology matures, a new technology rises to challenge it. In this case we are seeing the dawn of application and desktop virtualization against the well established rule of full hardware virtualization. Before getting too deep into the detail of the differences and features, it is worthwhile to try to define the relative classes of virtualization.
Wikipedia calls what I call hardware virtualization “Platform virtualization“. The goal, overall, it to provide a platform that can run any code (including the guest operating system) isolated from the rest of the native system. There are several subclasses with the most relevant being “Full virtualization”, “Hardware-assisted virtualization” and paravirtualization. Technically, the techniques are different but the goal remains the same. It is possible to install a full guest operating system in a VM and run the software for that OS within.
What kind of problems does hardware virtualization face? Informally, here’s a list:
- Emulation of hardware is a tricky business and always slower than native hardware
- Emulation of the opcode instructions is guaranteed to be slower
- The size of the virtual disk can limit flexibility in transfer
- The collective size of many virtual disks can clog up shared data storage
- Duplication of licensing costs (host and guest usually require a license each)
- Guest and host often do not work well together related to host and guest applications
- Virtual machine always needs a Virtual Machine Manager installed (requiring admin rights)
- Emulated devices usually have little correspondence to native hardware features
That’s probably enough for now. No one solution is going to address every concern but you can see how these kind of concerns add up to a desire for something else.
What if it was possible to virtualize the system at a higher level? What if you could virtualize right about the operating system layer? Wouldn’t that reduce the need to emulate and virtualize so much?
That is exactly what application and desktop virtualization is attempting to achieve.
Wikipedia has a an early attempt to capture this field with “application virtualization“. The basic goal with application virtualization is to reduce the footprint of virtualization while still giving the benefits of running applications anywhere. An application thinks that it is running on a certain environment when really it is being managed by a thin layer below it. This layer is responsible for providing a smooth surface which can lay on top of similar host platforms.
It is perhaps more widely known as making it easy to install once and then run everywhere. Solutions typically do not require admin rights for the user. It also means that one file can encapsulate the entire application instead of the typical large set of files.
A simpler way of viewing it is that the application is fully encapsulated. Because of this, it can be easily moved around and executed by many different people. As a result of this, it is much smaller than a whole virtual machine and runs under the native operating system with full access to the features of the native hardware. It is more like the application is a sibling to host applications than a child. The guest operating system model can isolate the environment so much that applications may not be able to communicate beyond simple means. The plumbing in application virtualization is much more straight forward.
Application virtualization addresses several of the concerns mentioned above with hardware virtualization.
- There is no emulation of hardware with application virtualization
- There is no need to virtualize instructions
- There is no virtual disk and the application encapsulation is always smaller
- There is no wasted space (unlike the virtual disks)
- There is only one operating system (one license)
- There is no virtual operating system wall between the two sides
- There is no need for admin rights
- Since devices aren’t emulated, the application gets the full features
Application virtualization does not handle device driver additions or dependencies. However, some solutions can handle services. Application virtualization also does not handle running applications on non-similar operating systems (like running Linux on Windows).
The intent is to keep things simple and do what is needed but not more.
There have been quite a few companies involved with improving this field over the last few years and the evolution of ideas has progressed quickly. It seems that maturity is problem within reach in the next two or three years.
So, don’t get too comfortable with virtual machines just yet. There’s this thing called application virtualization which is on the horizon.
Oh, and I almost forgot to mention desktop virtualization. It is a step beyond application virtualization which virtualizes the content of an entire desktop. This gives more integration and security for what would normally be viewed as independent applications. It also opens up more possibilities with things like having the users install their own applications in a controlled fashion. It’s a bit harder to classify at this point so it is a good place to stop.
I’m not saying hardware virtualization is bad. I’m just saying that there’s something evolving which avoids some of the pitfalls of virtualizing everything.