- speed 'champ': protobuf
- namespacing: protobuf (beefcake doesn't support it 'out of the box')
- rubyness: beefcake by a nose
- performance isn't everything, though I was surprised how much protobuf seemed to be ahead. These are very basic benchmarks, and your milage may, and probably will (!), vary. I noticed without strings protobuf was about 1/2 faster, but when including strings, that dropped to about 1/3 faster.
- I like namespacing. If I'm going to go through the 'hassle' of putting a schema and DSL onto my wire definitions, then namespacing is more than a nice-to-have. Beefcake has a way to add it during build-time via the shell ENV, but protobuf wins a bit by just getting 'er done.
- rubyness: beefcake strikes me as a tad cleaner in its auto-generated classes. Plus it just does one thing, but does it well... protobuf tries to include encoding/decoding, json, as well as RPC mechanisms. I don't mind that, but it does add a bit of extra 'heft' to the protobuf gem.
I ended up going with protobuf for its better documentation, slight ease-of-use, and project activity. But it is nice to know that switching between the two is pretty simple!