Virtualization of resources is a key requirement for a cloud provider—for it is needed by statistical multiplexing that is required for scalability of the cloud, and also to create the illusion of infinite resources to the cloud user. Ambrust et al. [5] holds the view that ‘‘different utility computing offerings will be distinguished based on the level of abstraction presented to the programmer and the level of management of the resources’’. To take an example from the existing cloud providers, an instance of Amazon’s EC2 is very much like a physical machine and gives the cloud user almost full control of the software stack with a thin API. This gives the user a lot of flexibility in coding; however it also means that Amazon has little automatic scalability and failover features. In contrast, Google’s App Engine enforces an API on the user but offers impressive automatic scalability and failover options. Microsoft’s Azure platform is something in between the aforementioned providers by giving the user some choice in the language and offers somewhat automatic scaling and failover functions. Each of the aforementioned providers has different options for virtualizing computation, storage and communication.