The last time I looked into using virtual machines, I was an undergrad student in CS/SE at Mississippi State, circa 2005. I had to use Visual Studio and several MS Office programs daily and didn't have a UNIX or Linux machine of my own. I checked out VMWare's "VMWare Player" and went through the motions of installing my own Linux OS (I believe it was Fedora Core at the time). But the thing was so slow it was completely useless. Granted, my Dell Inspiron was on it's 4th year by that point, but I was completely unimpressed.
Nowadays, I have Linux installed on my desktop at the house, so I haven't really had the missing-OS problem. (Now that my latest laptop is unusable, I'm actually without a Windows machine for the first time since ... 6th grade?) But last week, I was preparing an assignment for a course I TA here at the University of Maryland using Hadoop. Hadoop is a pretty specialized but very useful framework for MapReduce calculations, and one such specialization involved an outright dependency on a basic UNIX/Linux command called "chmod." I find it ridiculous that a library written in Java would have such a dependency, but nevertheless, students who ran on Windows needed some way to run Hadoop.
I revisited virtualization, and ran across the free program VirtualBox (http://www.virtualbox.org/). VirtualBox can run on Windows, Mac, or UNIX/Linux machines to install an empty 64-bit machine with essentially "perfectly compatible hardware" for your target operating system. A couple of hours of downloads later, my wife's two-year-old Mac was running 64-bit Ubuntu with an 8 GB virtual hard disk and 512 MB of virtual RAM. Yes, it degrades the performance of the Mac OS, but if you're solely using the virtual machine, the difference is negligible.
So this lets us run Linux programs on a Mac or Windows machine. While that may be cool, does it really mean anything to the researchers out there? In my new realm of software testing, I'd say it absolutely does. We can use virtualization for:
- Replicate a single experimental setup across a heterogeneous cluster of target machines
- Distributing a complex machine setup to any interested parties (e.g. for research or testing purposes)
- Testing Windows and Mac programs on Linux machines, which are far more abundant