ABI/API Compatibility — A Learning Series¶
Numbered steps, from "what is an ABI?" through checking a multi-binary product in CI to what no static check can decide. Steps 1–5 are about the problem and the promise you are making; from Step 6 on they are about catching breaks, which is where checking tools such as abicheck become the subject. Read the steps in order — each assumes the ones before it — and follow the Ladder line at the bottom of every page to the next one. The sidebar lists the same steps in the same order.
Start here¶
- New to the topic? Read ABI in Five Minutes, then keep following the ladder.
- Already know what an ABI is? Start at Step 2 with Part 0 — Compatibility as a Product Contract, or take your role's shortcut below.
- Looking something up? The ABI Cheat Sheet and the Glossary.
The path¶
- Start Here (beginner) — ABI in Five Minutes → How a Break Shows Up → ABI Cheat Sheet → Glossary
- Foundations (beginner → intermediate) — Part 0 — Compatibility as a Product Contract → Part 1 — Foundations → What Is Part of Your ABI Surface?
- How Breaks Happen (intermediate) — Part 2 — Symbol Contract Breaks → Part 3 — Type Layout Breaks → Part 4 — C++ ABI Specifics (go deeper: Class Layout ABI & API, Exception Unwinding, Modern C/C++ and Toolchain ABI Hazards) → Part 5 — ELF & Linker-Level Concerns (go deeper: The MSVC/PE ABI Model) → Part 6 — Subtle & Transitive Breaks
- Designing for Stability (intermediate) — Part 7 — Designing for Stability
- Define Your Contract (intermediate) — Compatibility Direction → Consumer Models → Build Profile Comparability → Static & Header-Only Contracts — also: Contract-Aware Compatibility (Concepts tab)
- Detect Breaks (intermediate) — Detecting Breaks → Assurance Beyond Static Checking — also: Evidence & Detectability (Concepts tab); What Each Level Sees (Concepts tab)
- In Practice (intermediate) — Where in the Pipeline → Report the Surface, Not Only the Breaks → Rollout and Governance → Triage a Suspicious Finding — also: Baseline Management (tool guide)
- At Scale (advanced) — Products, Not Libraries → Template- and Header-Heavy Libraries → How System Libraries Stay Compatible → Dependency & Runtime Floors → Environment & Toolchain Drift → Packages and Consumers
- Beyond Static ABI (advanced) — Behavioral & Semantic Compatibility → Data, Wire & Storage Compatibility → Ownership & Lifetime Contracts → Concurrency & Initialization Contracts
Concepts tab — the tool's own sequence
- Concepts c1 · Reading a result (intermediate) — Verdicts → Contract-Aware Compatibility
- Concepts c2 · The evidence model (intermediate) — Evidence & Detectability → What Each Level Sees → ELF-Only Mode and Symbol Filtering → Limitations & Known Boundaries
- Concepts c3 · Internals (advanced) — Architecture → Source & Build Data → Graph Coverage & Negative Evidence → Unified Impact Assessment
A "go deeper" page is an optional side read; it returns you to the step it hangs from. An "also" page belongs to another tab but is worth reading at that point.
Shortcuts by role¶
Each shortcut walks the steps in order, skipping what the role does not need, and ends with the tool page to open next.
ABI and API, defined¶
- ABI (Application Binary Interface) — the binary-level contract between a compiled library and its consumers: symbol names, calling conventions, struct/class layout, vtable order. Changing it can break already-compiled callers without anyone recompiling.
- API (Application Programming Interface) — the source-level contract (declarations, signatures, semantics) a caller compiles against. Changing it can break recompilation even when the ABI is intact.
The two overlap but neither contains the other: a renamed enum member breaks the API and leaves the ABI alone; a reordered struct field breaks the ABI and leaves the API alone. Examples are ELF/Linux and Itanium-C++-ABI flavoured unless a page says otherwise; Part 5 carries the PE/COFF and Mach-O parallels and the Platform Support reference the exact matrix.
After the series¶
- Getting Started — install abicheck, run a first check, wire it into CI.
- Choose Your Workflow — maps your situation to the right command.
- Compatibility Catalog — every break in this series as a compilable, runnable fixture.