I was listening to an episode of Hanselminutes the other day about unit testing frameworks, and one of the panelists, Brad Wilson from xUnit.NET, mentioned something that really caught my attention. He said that "...there's an interesting product that most people don't really think about called SoftGrid, which...allows you to create a semi-private/semi-virtualized environment inside of an existing copy of Windows." To me, it sounded like chroot for Windows. After some digging, I've learned that that is a pretty good comparison (if you have that frame of reference). I've also learned that Microsoft has purchased SoftGrid and has RTMed a new version under the name, App-V. As you can read about on the App-V product page, this lightweight virtualization solution provides a pseudo environment for applications to execute within. Specifically, this per-user make-believe world includes a virtual registry, file system, GAC (and DLLs in general), COM, IPC, configuration files, and fonts. (Virtualized IPC is a mind blowing to me. I wonder how that is done.)
Wilson's idea that he set forth in that episode on Scott's talk show was to utilize this tool for testing. Rather than using a CI application like TeamCity or ABS to start/stop entire virtual machines, Wilson suggested using these CI tools in conjunction with App-V to "chroot" (if you will) a section of the test machine for verification of a candidate build. This would hasten the setup of test environments. While I see Wilson's point and agree that this tool deserves a good look to learn exactly how it can be used in concert with existing testing frameworks, I have a couple points I'd like to raise:
- Starting virtual machines isn't a time consuming task, especially when their being automatically instantiated as a part of a build process that is taking place late at night.
- Licensing of App-V could be costly. (I don't what Microsoft is charging and how the model works.)
- It's new and unknown whereas machine-based virtualization platforms like VMWare are well understood (relatively speaking).
There are other interesting applications besides testing. For example, it can potentially lower the TCO for large application deployments. Specifically, virtualized applications could be packaged as MSIs and pushed to the workstations via some sort of distribution system (e.g., AD). Later, when a user clicks the shortcut on their desktop, the application is streamed to them from the virtual application server. Once enough of the bytes arrive, the application starts and the results are cached in some administrator-configured caching location. These are just two possible ways to use this technology.
I doubt that I'll ever mess with App-V more than this cursory investigation, but it highlights the paradigm shift that we've recently made in the computing industry as virtualization continues to redefine the way software is created, tested, managed, deployed, and used. Just think about the levels of virtualization that are used today: Entire computers are virtualized (i.e., hardware virtualization); applications written in high-level languages run in Virtual Machines (VMs) such as the JRE, the .NET CLR, V8, TraceMonkey, etc.; and applications are being virtualized with products such as App-V. Virtualization is being used at every level and in an increasing number of ways.
As I've said before, it sure is an exciting time to be a programmer!