VMWare version 4.0 is out. You’ve already heard my raves about this brilliant program in the past; I simply couldn’t live without it.

VMWare LogoThe new version adds the ability to store snapshots of the virtual computer’s complete state, including RAM and all hard drives, and instantly jump back to the snapshot whenever you want. Now, instead of having a blank Win 98 machine ready to boot up at any time, I have a blank Win 98 machine that is already booted and logged on, ready to restore at any time. This actually saves a significant amount of time while doing configuration testing.

I have one complaint about the new version: for some reason, there’s a new CMOS, whatever that means, which meant that when my old VMs woke up, they had to rediscover all their hardware from scratch. This was a major nuisance with Windows 98, resulting in a flurry of Plug ‘n’ Play hell. I gave up, throwing away my Win 98 OSes and recreating them from scratch, a serious annoyance (especially since I have VMs running in languages which I don’t understand, so I can’t really tell what they’re yelling at me about.) The Windows 2000 and Windows XP VMs seemed to handle all the Plug ‘n’ Play rediscovery transparently.

Last Friday afternoon, you may have noticed that this site was down for 10 minutes or so while we rebooted the server a few dozen times to apply the latest Microsoft patches, flash the bios, reseat some memory, etc. It occurred to me: what if, instead of running a conventional server, you ran your server in a VM? So everything my server does would actually be running in a virtual machine on the server. That has five interesting implications:

  1. I could make a snapshot of the complete machine state. If anyone hacks into the machine, installing trapdoors or defacing the website, a single click gets us back to a known-good condition. The catch: you can’t keep any frequently-changing state on the server. Easy fix: run another VM as a file server for your frequently-changing state (like web log files, mailboxes, etc.).
  2. You can split up functions among different VMs without buying more hardware. Isolate your mail server from your web server from your DNS server, all on one machine.
  3. When I need to install an OS patch or even an entirely new operating system, rather than rebooting, I would simply apply the patch to a new, identical copy of the virtual machine running on my desktop computer. I could copy the new VM up to the server, stop the old VM and start the new VM at the same time. Net effect: you can replace the whole operating system on a live server with only seconds of down time, zero risk that the new OS won’t come up, and only one physical box.
  4. If anything goes wrong and you need to swap in different hardware, all you need is some kind of box that will run VMWare. Solutions like Ghost won’t quite work because the ghosted image may not have the right device drivers for the replacement hardware.
  5. Everything runs emulated, so you’re paying for all this convenience with a lot of CPU cycles.

Anyway, VMWare has a server product, about which I know very little, but it probably lets you do all this and more and I think it’s going to be an increasingly standard policy of good system administrators to build servers as VMs for all but the most CPU-intensive applications.

About the author.

I'm Joel Spolsky, co-founder of Trello and Fog Creek Software, and CEO of Stack Overflow. More about me.