The three strata of virtualization
It struck me recently that you can view the general virtualization world as having three strata:
- at the first level, people are just interested in virtualizing and
isolating user-level programs. This is the world of FreeBSD jails
and Solaris zones.
- at the second level, people are interested in virtualizing the
entire operating system. This is the world of server consolidation,
hypervisors, paravirtualization and so on.
- at the third level, people actively want to virtualize even the hardware itself. This is often the world of testers and so on, who want to run systems that are as stock as possible.
Virtualization products fit into these strata too; each supports a particular level, and usually all higher levels (at an efficiency cost). For example, Xen is mostly a second level system at the moment (and IBM mainframes have been doing it for decades), while VMWare and Parallels are third level products, somewhat from necessity.
(If you want to do any sort of virtualization of an uncooperative operating system, you have no choice but to use full hardware virtualization.)
I like this view because it sheds light on why different groups of people interested in virtualization can find it hard to talk with each other: they're interested in different levels, and thus often have vastly different concerns and interests. With interests that are too different, people wind up not talking to each other but past each other. (And in the extreme, arguing past each other, relying on premises that are self-evident to them but foreign to the other side.)
This also points out a potential source of confusion: you can wind up using a product that supports a different level from the level you're actually interested in. Usually you wind up using a deeper level product and chafing at its obvious inefficiencies.
We aren't currently doing enough work with virtualization that this is a significant concern to us, but I'm going to have to remember it for the future. It's not enough to say something like 'use VMWare'; we need to understand why we're virtualizing something, and what we want to get out of it. That way we can keep focused on what's important and not get distracted into a technology-centered view of our problems.
(Yeah, yeah, this is probably obvious to lots of people already. I don't promise profound thoughts here, just my thoughts, and sometimes I'm slow to the party.)