Some of you may already be familiar with the
Perl Purity Test: Are you a Perl geek, and if so, how much of a geek are you?
The part of this test that struck me the most was the Perl's 'eval' function.
It makes it possible to evaluate on the fly the part of Perl code that is not
analysed when the code is compiled. This test asks the question: have you ever
written self-modifying evals? Not often,
but yes! And then: have you ever nested an eval inside another eval? I have to
admit that yes, on rare occasions, I have. And finally: Have you ever used more
than five nested evals? There I had to admit, oh, no, I've never even thought
of that! So why implement recursive evals? I still don't know why. But when I
think of other situations, sometimes I wonder if there might be an advantage to
putting an object within the same object, and so on -- a bit like Russian
nested dolls. This concept struck me as viable, and even advantageous, when
applied to virtual machines (VMs).
Virtual Machines (VMs) : the Russian nested doll concept
Nevertheless, we are starting to see two-level
structures appearing here and there, as is the case for running VMs within an
ESX itself in a VM Workstation. Why only two levels? For several reasons, but
above all because many processor access management features (Intel VT or
AMD-V) are no longer available after the first hypervisor layer. In fact, today
it's always a single handler that works best in terms of processor resources
and memory. One just works better than two. "Distributed" mechanisms are still
very complex and therefore very expensive. Paravirtualised hypervisors can easily
make it possible to imagine structures with more than two nesting levels since
there is nothing between the OS and the processor. The drivers are another
significant obstacle to the virtualisation of virtual machines. However, new
kinds of drivers are being developed that don't function directly with the
hardware anymore (supervisor mode), but interact with the kernel via
standardised APIs (user mode), a bit like hardware does with a USB bus.

Vincent,
Thoughtful article, but would not a better model be to strip out as many layers as possible? Even to this day, hiding in data centres, there are mainframes running an operating called zOS, and that operating system is supporting many different applications use in turn by many thousands of users. The equivalent of ESX, which we called VM in the 1980s, has disappeared into the hardware and is now a way of logically partitioning the machine. It's used mainly for testing new versions of the OS. zOS itself is inherently capable of running many applications at once and sharing the resources according to pre-set policy, but the metaphor of virtual machines and the overhead of a second layer of OSs are not there.
After all, the definition of an operating system is that which manages the sharing and control of hardware resources amongst all the applications it supports, and provides an API or a set of service calls to simplify the writing of applications.
Today we're using virtualisation to handle two disparities in scale:
Firstly, when we have a number of small applications we want to pack onto one server. We don't trust Windows to run them side by side, so we use ESX and separate them in virtual machines.
But ultimately, wouldn't it be better to have just one OS that can actually run multiple applications and allocate resources according to policies we set? Of course, we need the OS and we need the apps!
Secondly, we have big applications that need to run on many servers. It's a different problem. In this case, wouldn't it be easier to have an operating system that could manage lots of servers as a single resource, and support suitably written applications directly. The applications don't need to know what they're running on - all the see is the API (there's a bit of this in Amazon's EC2 service).
This OS, of course, would manage processors and storage across multiple sites and provide fault tolerance.
There is another dimension to server virtualisation a la ESX. Saving complete system images as files makes them transportable. But if you have a single OS controlling all your processors you can have an inherently fault tolerant environment. Transporting an application becomes actually meaningless, because the OS has de-localised it.
This second vision is what application level virtualisation tries to deliver, but it's still an extra product layered on top of lots of individual OSs.
But I fully realise that this isn't where we are. I suggest that the reason we use server virtualisation is because we're dealing with applications that weren't written that way, running on OSs that are still fundamentally single server. It's perfectly valid, and a low risk step to reducing cost, but there's a lot of waste at every level there.
Perhaps part of the real vision of a "cloud" is what i have described above, not just from the end user's point of view, but from the application's as well.
I predict that OS virtualisation will be of historical interest well within a decade, and possibly much sooner. VMware's focus on the management layer and application level acquisitions suggests they share this view.
would welcome your thoughts.
I just found this blog a while ago when a good friend suggested it to me. I have been a regular reader ever since.