FREE C, close to the metal LESSON · C, close to the metal
Cross the binary boundary
Compilation, linking, ABI, and loading
A build is a chain of contracts between representations.
Preprocessing forms translation units; compilation lowers declarations and definitions to object code and metadata; the linker resolves symbols and relocations; the loader maps segments and prepares process state. The ABI governs calling convention, register use, alignment, object layout, and symbol conventions. Source-level agreement is insufficient if separately built components disagree at this boundary.
Headers describe an interface; object files and the ABI make it executable.
Binary compatibility is wider than source compatibility.
Changing struct layout, visibility, calling convention, compiler flags, or dependency versions can preserve source syntax while breaking consumers. Inspect symbols, relocations, disassembly, and dynamic dependencies when debugging across compiled boundaries. Reproducible builds and versioned interfaces turn invisible assumptions into controlled inputs.
At the ABI, layout and calling behavior are part of the public contract.