Skip to content

All Programs Are Equal

Take this seriously for a paragraph. It pays.

Postgres is a program. Accepts SQL operations, returns rows. Op-program.

The Linux kernel is a program. Accepts syscall operations, returns data or errors. Op-program.

A browser is a program. Renders HTTP responses. Op-program.

A calculator on a phone is a program. Add(a, b) -> number. Op-program.

GPT-4 is a program. Complete(prompt) -> tokens. Op-program.

A music box from 1796 is a program. TurnHandle(rotations) -> melody. Op-program.

A traffic light is a program. Cycle() -> red | yellow | green. Op-program.

A coffee maker is a program. Brew(beans, water) -> coffee | OutOfBeans. Op-program.

Sewer plumbing is a program. Flush(waste) -> ok | clogged. Op-program.

Luca Pacioli's 1494 accounting book is a program. Record(transaction) -> balance. Op-program.

A wheat farm is a program with a slow operation cycle. PlantSeason(seeds) -> harvest | drought | locust | flood. Op-program.

DNA replication is a program. Replicate(strand) -> daughter_strand | mutation.

The brain is a program with a thick consciousness/v1 trait. Op-program.

The universe is a program. Tick(state) -> state' | heat_death_eventually. Op-program.

The joke is supposed to break here. It doesn't break.

Each of these things — a circuit, a tradition, an organ, a planet — accepts something, returns something, can fail. Each of them has names for what it does, or would have if anyone bothered to write the names down. Each of them is, by Op's definition, an operation. The five fields fit. Not because they were designed to fit each example. Because the five fields describe the shape of interaction itself, and interaction does not care whether the parties are silicon, neurons, hyphae, or planetary motion.

This is the moment Op stops being software-shaped.

Op is not "a new way to write APIs." Op is the discipline of naming operations where they already existed without names. The traffic light has been doing Cycle() for a hundred years. The DBA's career is Migrate(schema) -> new_schema. The forest's mycorrhizal network is RouteNutrient(from, to) -> delivered | lost. None of these were waiting for Op. All of them were already operations. Op only writes them down with the same shape.

What this means in practice: the boundary between "things Op describes" and "things Op does not describe" is not at the edge of the software industry. The boundary is at the edge of named interaction. If something has identifiable steps that take input and return output and can fail, Op fits. If it does not — usually because nobody bothered to draw those lines — Op cannot fit, but the lines could be drawn, and the moment they are, Op fits again.

The most absurd-sounding examples — wheat farms, traffic lights, music boxes — work because they share the structural property the protocol cares about. They are interaction-shaped. The fact that the implementation is mechanical, biological, or industrial does not change the form. The form is universal in the sense the conjecture means by primitive: smaller than any particular case, larger than nothing, recognisable across substrates.

Equality of programs, taken this seriously, is not a slogan. It is a working consequence of the form being a primitive. There is no built-in tier. There is no canonical Op program shape. BuyDog and DNA replication are equally valid Op operations, written down by their respective authors with whatever level of detail those authors chose to commit to (#20).

Some programs get reused often. Some run once. Some run for four billion years. The reuse is a fact about the world, not a property assigned by Op. Op only describes how programs name what they do.

When somebody tells you Op feels too broad — they are correct. Op is exactly as broad as interaction. Narrowing it would weld an opinion into the core (#14). Op refuses. The breadth is the whole point.

The traffic light, the database, the brain, the cosmos. Same protocol. Different authors. Different goals. Different scales. Same form. That's the joke. And it is true.

Apache 2.0 · Built in public · Contributions welcome