With my new Macbook Pro on the way from China, I have started the big consolidation of hardware and software platforms. The goal is to improve the change management of software development environments, increase mobility and increase stability of the environments.

The way how I am going to do that is moving all "fragile" environments to virtual machines. My most fragile environment is Windows XP (I am still resisting Vista). What I mean "fragile" is well known "software rot" of the developers machine, caused by frequent installs and uninstalls (or upgrades) of components, tools, etc. After some time (which varies by the kind and frequency of installs), the machine becomes more and more sluggish, registry bloated and occurrence of weird things more frequent - up to the point that developer decides to blow off the Windows install and start from scratch.

This operating system "cancer" can be slowed down a lot in virtual machine by using several baselines: clean install, clean install with Visual Studio, etc. Whenever you need to roll back an install (or test a new Beta version of Visual Studio, many of which were notoriously known to be uninstallable) you just throw away latest VM status. It takes some discipline to keep things documented and to keep the images up to date with all the patches and updates - which may be a challenge ;-).

As host platform I will be using OS X (for the notebook) and Linux (for the desktop). I could use Windows as host on desktop, but the latest series of BSOD I have experienced on my barely one year old desktop machine made me to rethink that. It is time again after few years, to make another try of Linux - for three main reasons. First is to find out whether there is indeed some hardware problem with the machine (the memory tests were showing no issues) or whether it is (as usual) some bug in third-party driver. It is so annoying that any unknown sloppy programming job of some never-heard-of company can shut down XP completely - thanks to Microsoft's decision to put pretty much everything into kernel space :-(. If Linux works OK, the point is proven - it WAS a software problem.

The second reason for Linux is that several of our clients are using Linux and virtualization and we want to recreate comparable environment in the lab for evaluation and testing purposes. We had lot of fun finding out why did the Oracle Advanced Queueing stop communicating with ATG Dynamo service components recently and I am sure this is not the only scenario where moving physical server into virtualized subtly changes environment up to the point of breaking it :-)

And the third reason for Linux as a host is convenience having same kind of OS as host on notebook and workstation and power of that OS. Shared availability of tools such as bash and Unix file tools can make administration and automatization much simpler.

I have not made final decision whether to stay with Parallels (which is available for all three platforms or switch to VMWARE. Right now, I am leaning more towards VMWARE - I have tested it out on Linux and Windows and found it working very well - at least the free player version. The VMWARE Server's UI performance on Windows host was not very impressive - but I guess that was not what it was written for. The reviews of performance I have read favorize VMWARE on Mac and very important factor is availability of ready-made pre-built images - software appliances from Marketplace. Neither have I selected the Linux Distro - albeit it will be one of the major ones.

As the guest OS I will be using XP - the only way how to do the .NET development. As well as Linux, which can be useful to overcome the lack of Java 6 on Mac (until resolved) as also to contain various database environments into their own appliance (MySQL, Oracle, PostgreSQL). I want also compare user experience when doing Java development on Linux and Mac with respect to on Windows - in recent discussions on Javalobby so many people were claiming superiority of Linux for developer's workstation that I cannot resist the temptation :-).

I am really curious how this will work when implemented. The only scenario where the above described setup would not work is the kind of project we did last year: depending on hardware devices physically attached to the PC by Firewire or even custom board (such as biometric camera with face recognition software or secure document scanner). Right now, we have the the luxury of not needing anything like this - which is great time to try it out ...