Two compiled pieces can call each other only if they agree on the ABI. Rust has no stable ABI of its own, so FFI goes through the C ABI (extern "C"). CPython also defines a limited, stable ABI (abi3) that lets one compiled extension work across several Python versions.