Honest claims · research august 2026 · published 2026-08-03 · v1 · 3 min read
Guarantees, not shapes
Publishing how a system is currently arranged turns an implementation choice into a contract nobody signed
The test that separates a promise from machinery, and what it costs to publish the wrong one. The canonical treatment of the guarantee test.
Someone outside your system asks how it works, and the generous answer is the dangerous one. Send them the object model, the field names, the storage layout, the sequence of states a record passes through, and you have been transparent in a way that feels like respect. What you have actually done is hand them a set of facts they will now build against, none of which you ever promised to keep.
The distinction that matters is between a guarantee and a shape. A guarantee is a claim about what will remain true. Identity is stable. A constraint is enforced. An export is complete. A shape is how the thing currently happens to be arranged, and it is every bit as factual and not remotely the same kind of statement. The test that separates them is a single question asked of each sentence before it leaves the building, which is whether the person reading it would have to change their own artifact if the fact stopped being true. If the answer is no, the sentence is machinery. Publishing machinery does not inform a counterparty; it recruits them into depending on a decision you made for reasons that will expire.
The mechanism is that observability, not the contract, sets the boundary of what someone will depend on. Hyrum Wright’s law states it in the form the field now quotes: with a sufficient number of users of an interface, all observable behaviors of your system will be depended on by somebody, whatever the written contract promises. The document you wrote is not the surface. The surface is everything they can see. And the accidental part is genuine, because nobody involved has to be careless for it to happen. Your counterparty read a fact, treated it as stable because you published it, and shipped. Their build now encodes it. You have acquired an obligation without a negotiation, a price, or a review, and you will discover it on the day you try to change the thing.
Two engineering cultures have paid this bill in public and drawn opposite conclusions. The Linux kernel treats it as an obligation it accepted rather than a mistake somebody else made: a change that breaks a working user program is a defect in the kernel, and the position has held for three decades against considerable inconvenience. Windows treats it as an operating cost, shipping application-specific compatibility shims so that programs relying on behavior no document ever promised keep running across releases. One project refuses to break what people depend on; the other builds a permanent department to keep the broken things working. Both responses are honorable and both are expensive, and neither culture chose the dependency it is now maintaining.
The saving grace is that the counterparty almost never wanted the machinery in the first place. They wanted to know whether their thing keeps working, and that question is answered at the altitude of promises. Tell them identity is stable and you have told them everything a stable identity implies for their design, without pinning yourself to the representation that delivers it today. Tell them exports are complete and you have said the useful thing without freezing a format. This is the discovery that makes the whole discipline affordable rather than merely principled: candor and confidentiality were never opposed, because the sentences worth publishing and the sentences worth protecting turn out to be different sentences. Say what will hold, keep what will change, and you have given somebody something they can build on for years without spending a single guarantee you did not mean to make.
Evidence and lineage
Research trail
Follow the sources, inspect how the claims are graded, or propose a correction at the exact record it concerns.
Sources 3
-
Hyrum Wright (2020). Hyrum's Law (hyrumslaw.com), restated in Software Engineering at Google (Winters, Manshreck and Wright)
The engineering sibling named in the brick: observability rather than the written contract sets the boundary of what a counterparty will depend on.
Comment on this source -
Linus Torvalds and the Linux kernel maintainers. The do-not-break-userspace rule, stated repeatedly on the Linux kernel mailing list and recorded in the kernel's stable API and userspace ABI documentation
The first of the two paired responses: a project that treats other people's dependence on observable behavior as an obligation it accepted.
Comment on this source -
Microsoft. Application Compatibility Toolkit and the Windows application compatibility shim infrastructure
The second response to the identical fact: keep changing, and maintain per-application shims so programs depending on undocumented behavior survive the change.
Comment on this source
Claims and confidence 3
- verified
With a sufficient number of users of an interface, all observable behaviors of your system will be depended on by somebody, whatever the written contract promises.
Hyrum's law, stated by Hyrum Wright and canonized in Software Engineering at Google (2020). An empirical regularity of large software ecosystems rather than a theorem, and uncontested in the field.
Respond to this claim - verified
The Linux kernel treats a change that breaks a working user program as a defect in the kernel rather than in the program.
Long-standing project policy stated by Linus Torvalds on the kernel mailing list and reflected in the kernel's own userspace ABI documentation.
Respond to this claim - verified
Windows ships application-specific compatibility shims so that programs depending on undocumented behavior keep working across releases.
Microsoft's own Application Compatibility Toolkit documentation and the public engineering record of the shim infrastructure.
Respond to this claim