This document discusses ensuring binary compatibility when exchanging data between applications written in different languages or running on different processor architectures. It covers considerations for type sizes, alignment, endianess, and representations. Key points include using fixed-size types for external data structures, explicitly specifying endianess for integers, and using the C representation for structures to guarantee platform-independent ordering and alignment. Input and output is limited to reading and writing bytes, requiring conversion between byte slices and Rust types. Calling external functions is unsafe in Rust due to lack of compiler checks, so I/O is preferable though less efficient.