Both Google Protocol buffers and Apache Thrift (originated at Facebook) both offers backward&#x2F;forward compatibility that works and product&#x2F;union types. They are especially nice to use for intercommunication between tightly-coupled components.<p>I personally like Thrift as it can use JSON or plain text (perfect for debugging) or whatever, not just a binary encoding of communication messages and its type system is IMO slightly easier to work with.