Going virtual
Virtualization is awesome in software development and testing. It uses more resources (than having separate physical machines), but significantly reduces the hassles of setting up and running different operating systems on a single machine. Being able to start a new system without rebooting, having virtual servers and being able to store snapshots of different systems has been really useful.
What is virtualization?
Three-sentence definition from Wikipedia: "Virtualization is performed on a given hardware platform by host software (a control program), which creates a simulated computer environment, a virtual machine, for its guest software. The guest software is not limited to user applications; many hosts allow the execution of complete operating systems. The guest software executes as if it were running directly on the physical hardware".
Which basically means you can run multiple virtual computers on a single physical machine, each with their own separate operating system and access to the network.
How I use virtualization
I use virtualization for the following:
1. Development servers: Running Linux in a virtual machine to provide pre-configured web servers for testing and doing development work. The main alternative would be to run a web server on the local computer (e.g. using Uniform Server). However, the key advantage in using virtualization is that the server installation is practically identical to the deployment installation - this is important since many dependencies of web applications such as PDF and Excel generation may work slightly differently on different operating systems. By using virtualization, these differences are eliminated.
2. Testing IE6. Internet Explorer 6 is unfortunately still used in many corporate environments and still has a significant market share. It is an insecure and deeply broken browser, but unfortunately it still needs to be tested. Instead of keeping it installed on a separate Windows XP system, I keep a virtual machine around with IE6 and use it for testing purposes.
3. Trying out beta software and server software. In particular, alternative Linux setups for servers which are often easier to do using fresh virtual machines rather than on a single server. If there are any problems, I can just revert the whole system to the previous snapshot.
One interesting website related to this is Bitnami, which offers ready-made virtual machines for various open source software tools. Worth trying if you want a particular web application working with minimal hassle.
4. Low-hassle deployment of temporary/personal stuff. Also known as "poor-man's-Xen-virtualization". I am planning on doing a small BIND DNS client setup soon to provide hostnames for the home LAN. I will probably build and test out the configuration on the my main computer, then just copy it to an older computer.
While there is a performance loss from deploying on consumer grade hardware with a consumer-oriented virtualization solution, it also allows you to use almost any hardware to host virtual machines (more lightweight hypervisors like Xen have rather specific hardware requirements).
And I am thinking about:
5. Work desktop virtualization (looking into this). I move a lot between computers and hate having to spend time installing and customizing the different applications I use. In the near future, I am planning to move my work setup from a physical machine to a virtual machine, meaning that when I change from one physical machine to another, the only thing I need to do is copy the virtual machine and have all my programs and settings remain intact. There are two things holding me back: one, I would prefer to have my files stored outside VMs (I am a bit worried about losing them if the virtual machine gets corrupted somehow) and two, graphics cards are not supported on current virtualization solutions which is bad for graphics performance.