One of the incredibly awesome, and underused technologies available is virtualization. To give a brief background for anyone who is not familiar with IT lingo, a virtual machine or VM is basically a way to store your operating system as a bunch of files that have no interaction with the actual hardware associated with a computer. The idea is that you can install a product like VMware or Virtualbox on your current operating system and play any other operating system as a window or in the background without actually installing a new operating system at all. You can even load a virtual machine that someone else created with all of their applications and settings in a matter of seconds. It’s all done by copying the VM files on your computer and then using a player to run those files. The impressive thing is that you can run as many VM’s as you would like without changing or installing anything more than a simple player on your desktop.
Why is this important? I work for a software company that produces software for a windows environments, and is designed to run over a network. I spend hours every week reconfiguring server configurations and settings that were not setup correctly first time they were installed. The installation alone takes anywhere from 20-60 minutes and can be painfully difficult, if not impossible, if your operating system configuration is not setup properly. In many cases even the server may appear to be setup correctly and working fine when in reality it isn’t. This only further complicates things when our clients try to install and connect a number of clients to the server only to realize that there are problems. This is not uncommon for any type of software support model. The server client model is a very effective way to administer and share information over a network when it is configured properly. The problem for any software product is that there are too many variables, including OS configuration, software dependencies, and human error.
Now this would mainly benefit network applications that run on a client-server model and would only be plausible for the server setup, but imagine if it were possible to get the exact software installed on every server in exactly the same way with exactly the same settings. If you could take all of the OS, installation and a lot of the misconfiguration variables out of the equation, it might lead to a lot less support needed for installations and troubleshooting. It would be extremely beneficial for any software developer to create their software and put it on a virtual machine and ship the VM to their clients. Basically the client would only be required to install a simple VM player and then download all the VM files that contain the entire OS and installation for the software. One of the great things about this is that allows you to sandbox the VM so that any configuration changes you make to the server OS won’t have any affect on the the VM. And in many cases even there is a server crash it could be extremely easy to recover the data because all of your information is stored on the hard drive as a bunch of files.
There are some issues with this model of distribution, including the Windows licensing model which will not allow software vendors to sell Windows VM’s without paying a heavy fee to Microsoft. Many companies have worked around this caveat by distributing their product on Linux VM’s, which will run perfect in any Windows or Mac host environment. The idea of virtualization would not solve all of the software development and distribution problems in the world. For example, you would probably still need to manually install the software on each client that connects to the virtual server. This method of distributing software has recently become popular because it allows software developers to become OS independent.
Although we don’t use virtualization yet at my place of work, it’s tool that is still in infancy and many companies like Amazon and Google are already taking advantage its capabilities. It is an amazing concept and even more incredible in practice but the real test of time will tell if smaller companies are ready for virtualization.