Anyone that builds an XaaS (or even a complex website) ends up building a management layer on top of their cloud; there's no point in everyone rebuilding the same thing, and it should probably have a sane API. FathomCloud can replace that management layer.
There are definitely lots of rough edges. If anyone wants to try it out, please email me with any issues and I'll do my best. And I'm happy to answer any questions!
For a simple instance, inbound traffic only works over IPv6. That's not really practical today, so there's support for floating IPv4 addresses. You can assign one IPv4 to an instance running a load balancer (haproxy, nginx), and then that uses IPv6 to talk to the backend instances. That's going to be documented within the week (I hope!)
Sadly, EC2 doesn't support IPv6, so we use protocol 41 (which wraps IPv6 in IPv4 packets), giving each EC2 instance a 2002: address. They can then talk to each other, or to other FathomCloud instances. They can talk to IPv6 servers that have a 2002: address configured.
Finally, most end-users don't have IPv6 either. There's a trick using SSH and tunnels to give you a quick-and-easy VPN, so you can get onto IPv6 from any machine. I'm going to blog about this, as it's the easiest way to get IPv6 and you get a VPN for free.
So it's a bit messy in the details, but with IPv4 floating IPs I think it all works. Using a single floating IPv4 to a loadbalancer is "the right thing to do" anyway in a cloud webserver setup. And I think it's totally worth it to say goodbye to NAT forever!
Part of the idea was not to use _any_ of the existing OpenStack code. Otherwise the temptation to copy-and-paste from OpenStack would have been too high, and copying and pasting defeats the whole purpose of doing a second implementation.
Equally, while I think there are some concepts that I hope will make it into the official OpenStack (such as a consistent Swift), there can be no copy and paste 'upstream' either because of the language barrier, which means that FathomCloud can be a true playground for experimentation.