In reply to anon. As far as user codes are concerned -- and inter-language bindings wrappers should be no different than other MPI applications -- the types are the same, regardless of the implementation. If Rust can't utilize the C preprocessor -- i.e., it can't see/utilize the internals of mpi.h, where such types are declared -- that sounds like the Rust<-->C integration is not fully complete. Specifically, from your description, it sounds like publicly-declared types (e.g., structs) would need to be mirrored in Rust, since their respective C .h files could not be used. That seems odd / incomplete. As for the reasons why MPI does not have an ABI, see my prior blog entry: http://blogs.cisco.com/performance/mpi-outside-of-c-and-fortran The reasons that I cite may not make you happy, but know that at least there are definite, deliberate reasons why there is no ABI today (that may change someday, but that's the way it is today).