The dream machine



The dream machine I'd like to own one day;

Hardware

Backbone:
High speed wireless network for connecting clients to the servers, high speed (fiber?) network for the connection between static servers.

Servers:
3 servers running a virtual environment, enough CPU power to satisfy high demand but capable of throttling back to very low power states, even shutting down CPU's when they're not needed, high performance static disks (flash, etc) without the problem of aging in a NAS.

Clients:
3 portable clients (as I prefer seperate desktops instead of 1 giant desktop).


Software

Servers:
Clustered virtual backbone like VMware ESX or Xen, capable of running accelerated graphics and any hardware I plug into the servers or clients.
Option of graphic output of 1 virtual machine sent to 2 or more clients.

Clients:
Option to control clients with one set of keyboard/mouse (think Synergy).

Applications:
Cluster capable, to have 2 or more instances co-operate for graphics work or games, combining the graphic output as if 1 desktop on 2 or more clients (working in combination with the server graphic option).


But,

that was the original idea.
After thinking a bit more about it while reading another article about virtualization, I figured the point of view was wrong.
Running an OS on virtual harware is all the rage, but that's not the true goal. Why are we running an OS?
The answer; to run applications!

The OS is nothing more than a tool to run the applications that do the real work. The database doesn't care what the OS does as long as it gets data to the clients. Same with mail, files, printqueues, the latest RPG or FPS games, etc, etc...
The application needs to run, that's it. Nothing more, nothing less.

So what changes from the original idea? Well, depends.
Applications could be cluster aware, have the ability to dynamically change the number of nodes it runs on. Then it can remove itself from one node intentionally or in case of a failure.
If the application isn't cluster aware, the host OS has to be able to run it virtually. Like a virtual guest OS it runs in its own environment which can be migrated across nodes.
The main point is that the hosts run applications only. No virtual guest OS that runs the applications. One layer is removed from the equation this way, which should in turn enhance performance and reliability. And applications that can't run natively on the host's OS can always be run in an emulator (which is backed up by hardware virtualization).

This setup might not be as futuristic as it seems though. KVM on Linux or *BSD could be used to run the non-cluster applications in a virtual environment, and DMX (aka Xdmx and xorg-dmx) can be used to distribute the graphical output to the clients. Not the complete set as I'd like to have, but it all comes down to the applications anyway.