With virtualization, lying has become respectable. Processors lie to user mode processes about memory addresses. Computers lie to operating systems about installed hardware. Storage systems lie to everybody about the location of data. The virtualization hype transforms honest down-to-earth systems into lying medusas.
Virtualization = Lying
This sounds frightening, and it probably is to old school IT pros who are used to doing everything by hand. So let me put it differently: virtualization is the art of lying according to pre-defined rules. Take the popular example of virtual machine software, e.g. VMware ESX, Microsoft Hyper-V or Citrix XenServer. When you install a guest operating system, it thinks it the machine it is running on has a certain amount of RAM, say 1 GB. That is not true. The host most likely has much more RAM, but the virtualization software lies about this fact to the guest operating system. Every good liar chooses a story and sticks to it. In other words, he implicitly defines rules to which he adheres. Otherwise it would be easy to see through the lie because the liar would contradict himself constantly. The result would be chaos - both in real life and in IT. Going back to the virtual machine example, it is easy to see the simple truth of this. If the VM host did not stick to one story (i.e. the exact hardware specification to present to the guest) the whole concept of virtualizing an entire computer would fail miserably. After all, which (guest) OS would tolerate frequent and major hardware changes - online while running?
Why Lie At All?
There is an inherent power to lying: by hiding reality behind a set of lies, what is real becomes interchangeable. If an OS inside a virtual machine knows nothing about real hardware, it is possible to recreate the same set of lies on an entirely different host computer and transfer the guest over without it knowing about the process. It will happily go on "living" without ever knowing that its "soul" has been moved to a different body. Wow. If we could only do stuff like that outside of IT... Back to computers, what is the benefit? Why, flexibility, of course! Virtualization decouples applications from the OS, the OS from the hardware, storage from disk drives, and so on. With virtualization, you can move each piece around individually, without affecting other components in the system. Migrations become a piece of cake. Increasing capacity is suddenly possible without overtime and admins get to see their family even if they have to upgrade critical systems. Brave new world!
The Cost of Lying
Everything comes at a cost. Even (or especially) lying. As anyone who ever got entangled in a web of lies knows, it can greatly increase complexity. If you employ virtualization in your network, you not only need to know the (simple?) truth, but also the lie. There are always some components that see the truth and deal with reality (e.g. your hypervisor), whilst many others are happy believing the lie. But you, as an administrator, have to understand both. You need a mental mapping between fact and fiction, and on many levels: apps, storage, hardware, memory, to name a few. We IT people need to play along with the lie, but know the truth. Many thanks to Joe Nord from Citrix who planted the idea of "virtualization = lying" in my head.