Think about the following scenario. You have migrated parts of your IT Infrastructure successfully in the Cloud of a provider. You think: "Well, everything is fine. We are saving costs, our infrastructure is now scalable and elastic and our software is always state of the art." But,... what if certain things happen? Maybe you want to leave the Cloud and go back into your own Datacenter or you would like to change the provider?
Or how could you map your business processes into the Cloud distributed over several providers. Maybe one provider works on process A and an other provider works on process B, a third provider works on process C using process A and B. Or you are using several independent services from different providers and integrate them to a connected one. An easier example - the data is stored at provider A and provider B processes the data.
Is this possible? How does it works?
One critical point of Cloud Computing is the lack of standards. Each provider is using different technologies and cooks his own soup inside his infrastructure. For this reason each relationship among a provider and a client is different.
The need for a transparent Cloud is indispensable!
One answer could be libcloud (http://libcloud.org). Libcloud is a standard library for Cloud providers like Amazon, Rackspace, Slicehost and many more including an uniform API. Developed by Cloudkick (https://www.cloudkick.com), libcloud has become an independent project. It is written in Python and free of charge (Apache License 2.0) to interact with different Cloud providers. Libcloud was developed to obtain low barriers between Cloud providers and "... to make it easy for developers to build products that work between any of the services that it supports."