The thing I don't like about the public cloud is the real possibility for permanent vendor lock-in, IBM mainframe style.
What many people don't realize is that this is why OpenStack is so popular. As cloud providers "standardize" on the OpenStack platform and APIs (except for AWS, which doesn't do it because they are the 900 lb gorilla in the market), they become interchangeable by nature. The common denominator for compatibility is how your provisioning and migration engine interfaces with the cloud provider. And if you're based on the OpenStack API, then you can basically migrate or provision your workloads on any provider that supports that API - no lock-in. All you need to do is update DNS to point to your new hosting provider and you're in business.