The content of this article was originally written by Sebastien Goasguen on the CloudStack blog.
Prior to joining Citrix's community team for Apache CloudStack, I had worked with OpenNebula (ONE) since 2009. Like CloudStack, ONE is an Apache-licensed IaaS solution, though they take different approaches.
To compare two systems like these, the best way would be to go through a deployment and then an evaluation period. We could also do a one-by-one comparison of features. (See the feature pages for CloudStack and OpenNebula, respectively.) You might also want to compare the CloudStack API and OpenNebula API.
Both systems have notable commonalities: A rich GUI, support for multiple hypervisors, and a philosophy to be hypervisor agnostic, an EC2 compatible interface as well as a native API, support for multiple zones and virtual data centers with relatively fine grained access control lists. CloudStack and OpenNebula also offer an image/template repository, a storage backend supporting NFS, GlusterFS, iSCSI, and LVM. Finally, both systems have a vibrant community contributing to the projects.
From a software perspective the big difference is that CloudStack is written in Java, while ONE has a C++ core with significant Ruby scripting as well as Bash script used for drivers. It does feel like CloudStack is more on the Dev side of DevOps while ONE is more on the Ops side, but this is very much a personal opinion.
ONE does boast a few interesting characteristics that I think CloudStack could benefit from: Support for Hybrid cloud (i.e. the ability to add an EC2 like site as a cloud bursting capability), a virtual appliance marketplace (i.e the ability for the community to share images between sites), as well as tools to test-drive the software without having to do a full install.
Some of this is underway already. The marketplace concept is being discussed on the CloudStack mailing list , while DevCloud was recently announced and is the perfect Sandbox to give CloudStack a try. What could be interesting is to set up a CloudStack Public cloud, for users to access and test the GUI and API.
What CloudStack brings, however, is terrific scalability which outperforms ONE at the moment. CloudStack also has the ability to do bare metal provisioning in addition to "traditional" virtual machine provisioning, and amazing network management with the ability to configure hardware networking devices like the Juniper SRX and Citrix Netscaler as well as new features like Nicira integration.
Though I've found some differences between CloudStack and OpenNebula, I think they're both great projects.