Despite huge spending and a never ending supply of new products, enterprise IT is no less complicated than it was a few years ago. Cloud computing with all of its promises is still more of an aspirin for your headache than a cure for your infrastructure disease.
The cloud is still relatively virgin territory with effectively two vendors - Amazon and Google - setting the pace and defining the way people think about it. Despite announcements and press releases, we've yet to see much from IBM, Sun Microsystems, or Microsoft, the vendors who typically drive new technology purchasing. And there isn't much consensus on what defines a cloud, with only two consistent themes of multi-tenancy and infinite scale.
While it's easy to consume cloud resources, deployment is defined by two approaches: virtual machine images like Amazon EC2 (known as Amazon Machine Images or AMI), and direct code deployment like Google App Engine. App Engine only offers support for Python applications and is therefore severely limited. Before everyone starts crying, there is nothing wrong with Python, but odds are you will need support for more than just language in or out of the enterprise.
Despite lacking multiple programming languages, the Google approach of code and deploy is far more appealing and I would expect that mechanism to become the weapon of choice for most, if not all cloud offerings, regardless of language.
Java, which introduced the (theoretical) "write once, run anywhere" paradigm seems like the most likely candidate for a cloud operating system standard, but Sun has been mum on this as they've reorganized and finally created a cloud business unit.
One of the big challenges for Java in the cloud is that no one has yet come up with a simple deployment mechanism. Several people have argued with me that this approach wouldn't be applicable in most scenarios and in fact might not work at all in light of the need for things like build and compile. Nonetheless, that doesn't mean that Java shouldn't become the dominant cloud operating system.
In fact, Java answers many of the cloud question: Java is open source, mature, standardized, has plenty of development and management tools, and APIs that support a vast array of other systems. Java also has a very large enterprise developer base, a key to getting new technology tested and adopted.
Deploying an application at a cloud provider may be similar to an enterprise or local deployment but the methods developers use to interface inside the firewall versus the cloud are very different. Developers have to change the way they manage and deploy applications to jive with the cloud providers' unique infrastructure. And since we currently lack portability between virtual-machine (VM) vendors and not all cloud providers instantiate the same rules and interaction mechanics you are pretty much locked in.