
Original Link: https://www.anandtech.com/show/2456
Introduction
In preparation for this article, we set out to find a simple definition of application virtualization. All we wanted was a simple and concise introductory sentence to give our readers a good idea of what application virtualization is all about, independent of the meanings given by the existing software vendors that tout the advantages of application virtualization.
The search turned out to be rather difficult, as it seems the different companies pursuing the technology are defining what it means. It is not our intention to declare a "winning technology" in this article; the fact is that all the products we'll have a look at have a slightly different focus. Instead, the goal is to provide an objective view of the technology's current possibilities for the IT market.
While the number of companies offering application virtualization is definitely growing, the bulk of the possibilities currently come from four products, namely VMware's Thinstall, Altiris' SVS (Software Virtualization Solution), Microsoft Application Virtualization (previously SoftGrid), and Citrix XenApp (previously Citrix Presentation Server). It's interesting to note that in the course of the past two years, nearly all of these products were acquired by one of the major software companies, so there's definitely interest by the big players in this field.

We hope this article will provide an interesting introduction to anyone interested in becoming more familiar with this trend.
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.
Two Types of Application Virtualization
While the previous explanations of virtualization provided a very basic rundown of what defines each type, our categorizing is of necessity roughly based on what reality currently offers. When it comes down to choosing a certain piece of software for a task, we often see big differences promoting the company's definitions of these fields. This is also true for application virtualization, and because its definition is so vague we see these different interpretations surfacing. One technology often described as application virtualization is something many PC users encounter on a daily basis, and it is best understood by naming its most popular examples: the Common Language Runtime environment of the .NET Framework and the Java Virtual Machine.

Though detailing what both these runtime environments do might be an interesting look at this interpretation of application virtualization, they are not the focus of this article. What's important to note is that they have a different take at solving some of the same problems. As any experienced programmer might tell you, an application coded natively for a certain OS can be quite sensitive in its needs for memory management and the specific capabilities of the CPU it runs on. As such, badly programmed applications can easily cause trouble, resulting in huge performance losses or even lockups. Our runtime environments provide a layer between the OS and the application, essentially isolating the application from vital resources of the system. They manage the resources while also providing a portable platform. The software requires the runtime environment to be present, but as long as that requirement is met the software can be run on any system.
Our Primary Focus
The main type of application virtualization we want to shed some light on, however, does not employ quite the same tactic of isolation. Thanks to the different companies developing it, we also get some nice extras, especially in the field of software deployment and distribution.
Put simply, application virtualization provides the possibility to fool an application into believing that some or all of the system resources it accesses and tampers with (on Windows, the most notable examples are the file system and the registry) are actually the real deal, while they are in fact simulated by the application virtualization management software. There are different degrees that the solutions provide when it comes to simulating resources, but the general goal is usually the same: Turning any user level running application, no matter its complexity, into a single, instantly executable package. This package should be completely cut off from the OS it is running on, in that it still requires the same architecture but no longer leaves any footprint on the host machine. This would mean that, whether or not the full, unvirtualized application was previously installed on a different host machine, as long as the manager software is present, the entire application is able to run from the package as if it were freshly installed.
This is achieved by catching every system resource request the application does (such as saving a file or saving something in the system registry) and redirecting it to a simulated version provided by the manager software. While this does allow isolating the app from the system, there are some steps that need to be taken first. The technology actually captures the entirety of the software into a single package, and the only way to do this is by monitoring how the application installation process. The management software captures the changes made to the system during the installation and builds the virtualization layer accordingly, making sure the application can remain blissfully unaware of its isolated state. This allows the application to run from any location, which is where the notion of streaming becomes especially interesting.

In the above image, SVS is getting ready to capture the installation of a program. It will record every single change made by the installer, which will form the basis of the application sandbox.
Who would want to use this for a business?
Because of the added portability of the virtualized software, many of the available solutions have included functionality that makes the technology quite a bit more interesting for business use. Software distribution in general can be quite a bothersome task in an environment with a large number of clients and many different software combinations. Keeping everything up to date and properly licensed can also become a time sink. On top of that, issues tend to pop up with installed software all over the place, and updating the software does not always guarantee an improvement. Being able to run two versions of a software package concurrently for testing purposes is not always an option, leaving many system administrators craving a powerful and automated software distribution system.
This is where application virtualization comes into play. Its portability allows it to run in any situation, and its isolation from everything else prevents harm to the rest of the system. This is how several application virtualization solutions have turned the slight disadvantage of needing the management software present on the client into an advantage, since it provides the possibility to add additional functionality. Implementing flexible streaming and software deployment solutions fits right into the idea of application virtualization, and that's why this technology is so interesting.
Application virtualization is a very solid way to accompany the transition from the traditional fat clients to thinner, more easily managed systems. The required software only needs to be virtualized once, and then it can be provided from a central software management server. From there, administrators can decide to deploy certain applications to certain clients, and update/remove them just as easily. The actual users of the software do not notice a difference, and user error recovery becomes much easier, as the administrator can easily roll back any damaging changes to the software.
Currently, many of the available application virtualization solutions are in fierce competition to provide the best possible user experience, which makes for many interesting flavors in this field - and undoubtedly we'll see many new developments in the near future. Businesses interested in implementing an application virtualization solution should therefore research each possibility very carefully, as their options are continually evolving and expanding.
Now, let us have a quick look at some of the interesting solutions currently on the market.
Current Application Virtualization solutions
As it is, there are four major players in the application virtualization market. There are probably dozens of others available, but the focus appears to be on these four that - because of their slight differences - cover most of what is currently desired.
Microsoft Application Virtualization
Acquired by Microsoft in 2006, this software may sound more familiar by naming its previous versions: Softricity's SoftGrid or Microsoft SoftGrid. MAV is pretty much a nice average of everything we've just described, developed by Microsoft to strengthen their position in the virtualization market. It uses a classic client/server model, using the Microsoft Systems Center Virtual Application Server to host the applications and provide them to the client through streaming. It allows for advanced user authorization requirements in order to deal with licensing issues, and it is able to stream selectively. This means that if a user only makes use of certain libraries within the application, only those libraries need to stream to the specific system.
Using MAV in a streaming environment prevents any of the applications from actually being installed on the client computer (apart from the user's local settings). While the application code can remain cached on the system, it will not function like a regularly downloaded piece of software, it remains dependent on MAV to be able to run and can be managed remotely. MAV does provide the option to run virtualized apps locally without the use of streaming, should the need arise.
XenApp
Known by many as simply Citrix, XenApp is the new name of what was previously Citrix Presentation Server. This software generally caters to a different audience, its focus being primarily applications that are run on the remote server with the interface then streamed to the user, as opposed to running the application on the client side. However, Citrix has included the possibility for application virtualization for quite a while, and with this new release it is pushing both server-side and client-side virtualization to the foreground. While this move more or less forces the software into direct competition with MAV, Citrix has stated that it believes several separate developments of the technology will increase customer awareness of its merits, and the interoperability of Citrix and Microsoft technologies will continue playing a big role in improving the user experience.
SVS
Acquired by Symantec in 2007, Altiris provides a very solid application virtualization solution with SVS. SVS (Software Virtualization Solution) adds an interesting twist to the story by introducing a slightly different look at the isolation of the applications. Instead of completely isolating separate applications, it gives users the opportunity to build up their own custom "layers". This removes the restriction to pure software virtualization and allows us to virtualize pretty much anything in the file system; it also enables users to bundle different applications in a single layer, allowing them full communication with each other when necessary. Activating a layer will make the contained application look as if it's installed normally, complete with its folder and files being present in the Program Files directory, while deactivating a layer removes every trace of the application from the system.
While making all the files available to a user does make an app more vulnerable to user errors, these problems are easily resolved by a simple reset of the application in the SVS Admin. SVS allows for streaming software in a similar fashion as MAV, using a central SVS Client Management Suite.

One moment, Firefox and VLC player are there, and present in the Program Files...

The next, they've disappeared from the system completely!
Thinstall
Though Thinstall may be the odd one out in this comparison, it is still a very capable product with an interesting approach. Acquired by VMware in January 2008, Thinstall is different from other solutions in that it is "agentless". This means that virtualization is achieved without the need for any management software on the client, essentially making the packages useable on any computer running Windows. This is done by installing the Thinstall software on a freshly installed operating system and using it to capture the installation of any piece of software. After making the necessary changes in settings, Thinstall will compile the entire application, along with its extremely lightweight agent, into a single distributable package. This takes the portability of the software to a whole new level, allowing applications to be carried pretty much anywhere on a simple USB stick. Of course, this portability raises questions about controlling software after deployment.
It is possible to keep these "thinstalled" applications together in a single repository (i.e. a shared network drive), allowing people to stream them by simply opening them from that location. However, the technology seems a bit limited by its own portability in that respect. The potential for licensing issues and/or piracy of products is also a potential concern. Nevertheless, Thinstall remains a very convincing product, especially well suited for businesses looking for true, transparent portability of even the largest software suites. Now that VMware owns the software, we're excited to see how the package develops in the future.
Conclusion
Things are changing in the business IT market. For a long time, the unstoppable growth of IT infrastructure in companies made the life of many a system administrator very frustrating, forcing them to spend a large amount of time troubleshooting, patching, installing, and reinstalling software. Every new piece of software can create new problems, with a seemingly infinite number of configurations; getting everything to "play together nicely" can be a truly daunting task.
How can we be certain that a piece of software will not cause trouble on our network, how can we monitor the used applications more closely, and how can we distribute our tested software to all of the client PCs in an efficient manner? These questions relate to the many problems that application virtualization solutions attempt to solve.
The fact that quite a few major software developers have moved into this field means we may finally see changes here, and the current competition will undoubtedly force every solution to strive for the best possible user experience. We're very excited to watch as the situation unfolds, and we'll definitely be keeping you up to date with further developments.
Application virtualization is on the move, and we are optimistic about its future. We hope this article was able to provide the interested with a good introduction to its possibilities.