中文 →
Blog Deep Read · 14 · martin.kleppmann.com

Martin Kleppmann
What deceives you isn't the code. It's the words you were handed to describe it

Jul 2007 – present · 126 posts · still active but very slow (31 posts in 2008, zero in 2023, one in 2025; latest 8 Dec 2025, with four conference talks scheduled for 2026) · two pivots: around 2012 from usability and startup writing to data systems, around 2016 from industry to academia and formal verification · this page is based on 16 pieces read in full, spanning Jun 2008 – Dec 2025, selected from his own homepage "Highlights" list

Pull up the archive page at martin.kleppmann.com and scroll from the bottom: 126 posts across nineteen years. In the first 70, exactly one touches databases.

The other sixty-nine are about the usability of gas cookers. A two-part comparison of British and German train ticket machines, plus a follow-up on the latest developments in German ticket machines. "Find my nearest toilet, curry, whatever." "Yes/No/Cancel causes Aspirin sales to soar." In 2008 alone he published 31 posts. In 2023 he published none.

The man who wrote those went on to write Designing Data-Intensive Applications — the book a generation of engineers uses to think about databases. It looks like a career change. He never changed subject.

A ticket machine that makes you press the wrong button, and a database where "repeatable read" means three different things in three products, are the same bug. That isn't my analogy. He wrote it himself in 2014, about ACID transactions:

The levels basically have no intuitive meaning, because they are an incredibly leaky abstraction — they are defined by implementation detail, not because someone thought they'd make a great API.Hermitage: Testing the “I” in ACID, 2014

What he is fighting

Researching his book, he went to check what isolation levels actually guarantee, and found that the words are empty. PostgreSQL, MySQL and SQL Server all offer a level called "repeatable read", and it means something different in each. Oracle's level labelled "serializable" is not serializable at all. Worse: the race condition that nearly bankrupted a Bitcoin exchange would not have been prevented by most so-called ACID databases in their default configuration.

The danger isn't that you're confused. It's that you feel safe. A name that sounds like a promise, but is really a description of somebody's 1975 implementation, puts your confidence in the wrong place. For the next decade he kept making the same move: instead of solving the problem, take off the glasses everyone is looking at it through and inspect the lenses.

His hardest blow

In 2015 he went back and read the original proof of the CAP theorem word by word, and found that none of the words mean what people think. Consistency means linearizability, and has nothing to do with the C in ACID. Availability requires that every non-failing node answer. Partition tolerance isn't a choice at all. And the system model of the theorem is a single read-write register — transactions touching multiple objects are simply out of scope, and latency isn't mentioned once.

Then he tried to classify real systems, one at a time, and couldn't place a single one. A standard single-leader relational database can't write when partitioned from the leader, so it isn't CAP-available; read from an async follower and it isn't linearizable either. Neither. ZooKeeper — everybody's textbook example of "a CP system" — does not do linearizable reads by default, needs a quorum for writes so isn't CAP-available, and since 3.4.0 has a read-only mode that is CAP-available.

They are neither “CP” nor “AP”, they are just “P”, whatever that means. (Yes, the “two out of three” formulation does allow you to pick only one out of three, or even none out of three!)Please stop calling databases CP or AP, 2015

His point isn't just that the label is imprecise. It's that the label inverts your judgement: ZooKeeper's "AP" read-only mode still gives you a total order over historical writes, vastly stronger than Cassandra's "AP" — "so it's ridiculous to throw them into the same bucket." One bit cannot hold those differences, and people are making architecture decisions with that one bit.

Then he pushed the method to its limit

In 2016 he found that Redlock, the distributed lock algorithm recommended on the Redis website, had quietly promoted "clocks are roughly right, processes don't pause for long" into axioms — one GC pause is enough for two clients to believe they hold the same lock. His fix is the fencing token: a strictly increasing number, which the storage service must check, rejecting any write whose token went backwards. A proper consensus algorithm gets slow when timing goes bad; it never makes a wrong decision. Redlock does.

In 2015 he stared at a database's internal replication stream and noticed that an UPDATE becomes an immutable fact the moment it enters the log — and that indexes, caches and materialized views are three names for the same thing. The only difference is whose responsibility they are: the index is the database's, the cache is yours, which is why one is elegant and the other is a disaster. His proposal: take that hidden replication stream and turn it inside out, make it the only way in, and let every database be a materialized view of it.

In 2021 he argued the GPL has become pointless — not bad, pointless, because the enemy has changed. What takes your data away today isn't closed source, it's the cloud: one account suspension with no warning and no recourse will do it. And the Internet Archive keeps over 100,000 historical programs running in browser emulators without ever having had their source code — so what preserves software freedom isn't openness, it's having a copy at all. Hence local-first software: your data on your disk, real-time collaboration retained. The technical bet is CRDTs — and CRDTs are precisely the kind of thing human reasoning gets wrong, so he went and proved them in a proof assistant.

In December 2025 he predicted that LLMs will push formal verification into the mainstream. The reasoning is very him: "It doesn't matter if they hallucinate nonsense, because the proof checker will reject any invalid proof and force the AI agent to retry."

Nineteen years trace one escalating line: first demand more precise words, then a better architecture, then machine-checked proof, and finally a political reason to want any of it. It started with a German ticket machine.