In 1948, the mathematician John von Neumann asked a question that sounds like a riddle: what is the minimum a machine needs in order to build a working copy of itself?
He answered it on paper, with no computer to test it on, five years before anyone had seen the structure of DNA. His answer was right, and biology has been running it ever since.
That question has a much smaller cousin you can run on a laptop in ten seconds. Write a program that prints its own source code, exactly. It sounds trivial. It is not, and the reason it is not turns out to be the same reason von Neumann needed three parts instead of one.
This is the whole chain, in order: a two-line Python program, a compiler backdoor that survives its own deletion, a 200,000-cell paper machine, four rules on a grid, and the 2026 research on AI systems that copy themselves. 🧬
TL;DR: A quine is a program that prints its own source, and it works by using one piece of text twice, as code and as data. Von Neumann proved in 1948 that self-replication needs three parts: a constructor, a blind copier, and a controller. Conway's Game of Life reaches the same result with four rules. Try Taskade Genesis free →
🧬 What Is a Self-Replicating Program?
A self-replicating program is any program that produces a copy of its own code. The cleanest example is a quine: a program that takes no input and prints its own complete source, character for character, and does nothing else.
Here is one in Python. Two lines, no file reading, no tricks:
Python
s = 's = %r\nprint(s %% s)'
print(s % s)
Run it and the output is those two lines, byte for byte. Verify it yourself:
Bash
python3 quine.py | diff - quine.py && echo "identical"
The name comes from Douglas Hofstadter, who coined it in Godel, Escher, Bach (1979) after the logician Willard Van Orman Quine. Quine's paradox has the identical shape: "Yields falsehood when preceded by its quotation" yields falsehood when preceded by its quotation. The phrase appears once as an instruction and once as quoted data.
One rule is strict, and most casual explanations skip it: a quine may not read its own source file. Opening quine.py and printing the contents is a cheating quine. It proves nothing, because it breaks the moment you rename the file or pipe the program through standard input.
There is one degenerate case worth knowing. In most languages the empty file is technically a quine: zero bytes of source produce zero bytes of output. That is precisely why formal definitions require a quine to be a non-empty program.
🔁 Why You Cannot Write a Quine by Adding More Print Statements
The obvious approach fails for a structural reason, not a syntax one: every fix you add is new source code that also has to be printed.
Watch it fail. Each attempt gets longer and stays exactly as wrong as the last:
ATTEMPT 1 print("hello")
output: hello
missing: the print statement itselfATTEMPT 2 print('print("hello")')
output: print("hello")
missing: the outer print statement
ATTEMPT 3 print('print('print("hello")')')
output: print('print("hello")')
missing: the outer print statement
Each patch adds source FASTER than it adds coverage.
The gap stays CONSTANT. Adding code never closes it.
This is the entire difficulty. You cannot close a constant-width gap with a patch that grows every time you apply it. You need a different mechanism: one piece of text used twice, once as instructions and once as data.
That dual-use trick is the seed of everything else on this page. Von Neumann needed it. DNA needs it. Conway's grid reinvents it.
🧩 How the Python Quine Works, Line by Line
The two-line quine works because %r formats a value using repr(), the representation Python needs in order to reconstruct the value, including the surrounding quotes and every escape character.
Python
s = 's = %r\nprint(s %% s)'
print(s % s)
Read it as a template with a hole in it:
| Piece | What it does |
|---|---|
s |
Holds a template of the entire program, with one placeholder |
%r |
The hole. Filled with repr(s), which includes the quotes |
%% |
An escaped percent sign. Prints as a single % |
\n |
The line break between line 1 and line 2 |
print(s % s) |
Fills the hole in s with s itself |
Why %r and not %s
This is the most common error in quine explanations, and it is easy to demonstrate. %s uses str(), which prints a string's contents without quotes. %r uses repr(), which includes them.
Change one character and the program still runs, still prints something quine-shaped, and produces output that is not valid Python:
Python
s = 's = %s\nprint(s %% s)'
print(s % s)
Its output:
s = s = %s
print(s %% s)
print(s % s)
Feed that back to Python and you get SyntaxError: invalid syntax on line 1. The quotes are gone, so s = s = %s is not a string assignment. It is not a quine. It is a program that looks like one.
Why this matters beyond Python:
repr()is defined to produce a representation that can be evaluated back into the original object. That is exactly the property self-reproduction requires, which is why the equivalent specifier is the load-bearing detail in almost every language. Ruby uses%p, JavaScript usesJSON.stringify, and Haskell usesshow. Any explanation showing%sin a Python quine has published code that does not run.
The fixed-point trick for finding quines
Here is a genuinely useful technique. If a near-quine's output differs from its source only in formatting, such as single versus double quotes, run the output as the new source and repeat. If it stabilizes, you have found the quine.
This JavaScript quine was found exactly that way:
Javascript
const s = "const s = %j;\nconsole.log(s.replace(\"%j\", JSON.stringify(s)));";
console.log(s.replace("%j", JSON.stringify(s)));
The first draft used single quotes and drifted, because JSON.stringify emits double quotes. Running the output as the new input converged in one step.
A quine is a fixed point of the "run it" function. That is not a metaphor. It is the literal mathematical statement, and it is why Kleene's second recursion theorem guarantees that a quine exists in every Turing-complete language.
🌍 Quines in Every Major Language
Every Turing-complete language has a quine. That is a theorem, not a coincidence. Only the ugliness varies.
| Language | Mechanism | Core of the trick |
|---|---|---|
| Python | %r format specifier |
s = 's = %r\nprint(s %% s)' |
| Ruby | %p format specifier |
s = "s = %p\nputs s %% s" |
| JavaScript | JSON.stringify for quoting |
s.replace("%j", JSON.stringify(s)) |
| Haskell | show for the quoted form |
Pure, compact, no mutation |
| Lisp | Quasiquote and unquote | Homoiconic, so nearly trivial |
| C | char* plus printf, %c with ASCII 34 for the quote |
Manual quote handling, the tedious case |
| Any Turing-complete language | Kleene's recursion theorem | Existence is guaranteed |
Languages where code and data share a representation, called homoiconic languages, make quines almost trivial. Lisp is the classic case. Languages that enforce a hard boundary between source text and runtime values, like C, make them tedious.
The difficulty of writing a quine is a rough measure of how strictly a language separates code from data. That is a genuinely useful thing to know about a language, and it is the first hint that self-reference is an architectural property rather than a syntax trick.
🎭 Quine Relays, Ouroboros Programs, and Multiquines
Once you can write a quine, the variations get competitive.
| Variant | What it does |
|---|---|
| Ouroboros program | Program A outputs program B, and B outputs A. A two-step cycle |
| Quine relay | An N-language cycle. Yusuke Endoh's famous relay runs through 128 languages and returns to the original |
| Multiquine | A set of programs where each can output any of the others on demand |
| Polyglot quine | Valid in several languages at once, printing itself in all of them |
| Radiation-hardened quine | Still a valid quine after any single character is deleted |
The radiation-hardened quine is the one worth pausing on. It survives damage to its own description, which is the software equivalent of error correction in DNA replication. Biology solved the same problem with proofreading enzymes and redundancy in the genetic code, where multiple codons map to the same amino acid.
The competitive versions are a puzzle. The property they are exploring is not.
☣️ Is a Computer Virus a Quine?
Not quite, but the replication core of a classic file-infecting virus is exactly the quine mechanism with the output redirected. The distance from puzzle to malware is two small edits.
The differences are real and worth stating precisely:
| Quine | Virus | Worm | |
|---|---|---|---|
| Output | Standard output | Into a host file | Across a network |
| Needs a host | No | Yes | No |
| Payload beyond copying | None | Usually | Usually |
| Runs without user action | No | On host execution | Yes |
| Intent | Demonstration | Harm or persistence | Harm or spread |
A quine is the mechanism. A virus is the mechanism plus a host, a payload, and an intent. Modern malware layers on packing, polymorphism, and evasion, but the bottom layer still answers "how does a program copy itself."
The mechanism itself is neutral. The same trick underlies biological reproduction, software distribution, and every template you have ever cloned.
🕵️ Trusting Trust: The Most Dangerous Quine Ever Written
In 1983, Ken Thompson used a quine to prove that reading source code can never prove a program is safe. He described it in his Turing Award lecture, Reflections on Trusting Trust, published in Communications of the ACM in August 1984, and it remains the most important real-world application of self-replicating code.

Ken Thompson (seated) and Dennis Ritchie at a PDP-11, 1973. Image: Wikimedia Commons, public domain.
The attack has three stages, and the third is the one that makes people uncomfortable:
Stage 2 is the quine. The compiler must recognize that it is compiling a compiler, and reproduce the malicious code into the new binary without that code appearing anywhere in the source it was given. It carries its own description, just like the two-line Python program.
Thompson's conclusion is quoted constantly and still lands:
"You can't trust code that you did not totally create yourself. [...] No amount of source-level verification or scrutiny will protect you from using untrusted code."
Ken Thompson, Reflections on Trusting Trust, 1983 Turing Award lecture, published 1984
There is a defense, and it is elegant. David A. Wheeler's Diverse Double-Compiling works by compiling the compiler's source with a second, independent compiler, then using that result to compile the original source again. If the final binaries match bit for bit, no backdoor is hiding in the gap. It does not require trusting either compiler individually, only that both were not compromised in the same way.
This is the answer to "are quines useful," and it is the reason reproducible builds matter across the entire software supply chain.
🤔 Are Quines Actually Useful?
Yes, in four specific places, even though writing one is usually a puzzle. This question is asked constantly and answered badly, so here is the direct list.
| Use | What it actually does |
|---|---|
| Compiler and toolchain testing | A quine round-trips source through a compiler exactly. Any formatting or escaping bug shows up immediately |
| Security research | Trusting Trust, self-reproducing payloads, and the reproducible-build defenses developed to counter them |
| Proving theoretical limits | Kleene's recursion theorem, and the standard proof that the halting problem is undecidable, both use self-reference |
| Bootstrapping | A compiler written in its own language must reproduce itself from a prior version to survive |
There is also a fifth, less tangible use: quines are the smallest complete demonstration that a system can contain a description of itself. That property is the thing the rest of this article is about, and the two-line Python program is the cheapest possible way to see it working.
🧠 Von Neumann's 1948 Question and the Paradox It Runs Into
John von Neumann asked the general form: what is the minimum required for any machine to build a working copy of itself? He was not thinking about software. He was thinking about machines, about biology, and about whether reproduction was a special property of living things or a property of organization.
The question runs straight into a paradox:
THE REGRESS A machine builds a copy of itself.
|
The copy needs a full description of the machine.
|
But the description is PART of the machine.
|
So the description needs its own description.
|
Which is also part of the machine, so it needs ITS own description.
|
... forever.
If the description must describe everything, and the description is part of everything, the machine can never be finitely specified. Reproduction looks impossible.
🏗️ The Universal Constructor: Three Organs and One Trick
Von Neumann's solution needs exactly three components, plus one detail that most summaries omit and that is the entire reason it works.
Let X be any machine, and let phi(X) be its description, historically called the tape.
| Component | Job | Does it interpret the tape? |
|---|---|---|
| A. Constructor | Given phi(X), builds X | Yes. Reads it as meaning |
| B. Copier | Given phi(X), duplicates phi(X) | No. Reads it as raw symbols |
| C. Controller | Runs A, then B, attaches the copy, releases the offspring | Directs only |
| phi(D). Description | The tape describing A plus B plus C together | It is the data |
Now form the whole organism D = A + B + C, and hand it the tape phi(D):
The copier is blind, and that is the whole invention.
The regress dies because the tape is never asked to describe itself. The constructor treats phi(D) as instructions and reads its meaning. The copier treats the exact same phi(D) as a meaningless string of symbols and duplicates it without understanding anything. Because the copier never interprets, the tape needs no description of itself.
That is the quine's dual-use trick promoted from a language feature to an architecture: the same text, read once as code and once as data.
This is a live engineering constraint, not a historical footnote. Any system that clones itself has to keep these two lanes separate. The moment a copying step starts interpreting what it copies and rebuilding from that interpretation, the copies drift.
🧬 The Prophecy: von Neumann Described DNA Before Anyone Had Seen It
Von Neumann worked this out in 1948. Watson and Crick published the structure of DNA in 1953. With no biochemistry, he derived that self-reproduction requires a description used in two distinct ways. Biology turned out to do precisely that.
| von Neumann, 1948 | Molecular biology, confirmed after 1953 |
|---|---|
| The description (tape) | DNA |
| Constructor reads it as meaning | Transcription and translation: DNA to RNA to protein |
| Copier duplicates it blind | Replication: DNA polymerase copies base by base |
| Two lanes, one description | Two enzyme systems, one molecule |
| Controller sequences the process | Cell cycle regulation |
| The copier must not interpret | Polymerase does not know what any gene means |
| Damage-tolerant descriptions | Proofreading enzymes and codon redundancy |
DNA polymerase does not know what a gene does. It copies base pairs. The ribosome, separately, reads the same molecule for meaning. Two processes, two lanes, one molecule, exactly as predicted.
This is one of the most striking predictions in the history of science, and it is underrated because it was a prediction about architecture rather than substance. Von Neumann did not predict the double helix. He predicted the job description the double helix would have to fill.
🔬 Cellular Automata: Why von Neumann Invented a Grid
Von Neumann wanted to prove the design worked, but no machine in the 1940s could build anything. On a suggestion from his Los Alamos colleague Stanislaw Ulam, he moved the problem onto an abstract substrate: an infinite grid of cells, each in one of a fixed set of states, all updating simultaneously under the same local rule.
That was the birth of the cellular automaton.
He set out the three-part logic in a lecture at the Hixon Symposium in September 1948. The detailed cellular construction came later, in a manuscript he worked on through 1952 and 1953: 29 states per cell, each cell talking only to its four orthogonal neighbors, with the universal constructor occupying roughly 200,000 cells. He died on 8 February 1957 without finishing it, and Arthur W. Burks edited and completed the work as Theory of Self-Reproducing Automata, published in 1966.
The 1948 date is the one that matters for the DNA prediction, because that is when the architecture was stated. The 29-state machine is the working drawing that came after.
The design worked on paper. But 29 states and 200,000 cells is not something anyone explores by hand, and that limitation set up the next move.
♟️ Conway's Game of Life: Four Rules, Zero Players
In the late 1960s, the Cambridge mathematician John Horton Conway asked how simple those rules could get. He and his colleagues refined the rules by hand on Go boards in the university's mathematics common room. The result became the most famous cellular automaton ever devised, and Martin Gardner gave it its first public description in his Mathematical Games column in Scientific American, October 1970.

John Horton Conway in 2005. He died in April 2020. Image: Wikimedia Commons / Thane Plambeck / CC BY 2.0.
Every cell is alive or dead and looks at its eight neighbors:
| Cell state | Living neighbors | Result | Informal name |
|---|---|---|---|
| Alive | Fewer than 2 | Dies | Underpopulation |
| Alive | 2 or 3 | Survives | Stability |
| Alive | More than 3 | Dies | Overpopulation |
| Dead | Exactly 3 | Becomes alive | Reproduction |
That is the entire system, written in shorthand as B3/S23: born on 3, survives on 2 or 3.
Life is a zero-player game. You choose the first frame, and that is your only move. Everything after is determined.
A quick glossary, because the community vocabulary is a wall for newcomers:
| Term | Meaning |
|---|---|
| Still life | A pattern that never changes |
| Oscillator | A pattern that repeats on a fixed period |
| Spaceship | A pattern that moves across the grid |
| Soup | A random starting configuration |
| Ash | The stable debris left after a soup settles |
| Eater | A pattern that absorbs incoming gliders and recovers |
| Garden of Eden | A configuration with no possible predecessor |
The search for what these four rules can produce is still running, at a scale that is hard to picture. A distributed census called Catagolue has now run as of August 2026, over 333 trillion random starting soups and catalogued more than 7 quadrillion objects across roughly 552,000 distinct types. Fifty-six years in, people are still finding new patterns in a system whose complete rulebook is four lines long.
🚀 The Ladder: From a Blinking Dot to Universal Computation
Those four rules are enough to build a computer. The climb happens in steps, and every one is a real, named, discovered pattern.
The glider: a signal that walks
The glider is a five-cell pattern spotted by Richard K. Guy in 1969, while Conway's group was tracking the evolution of a pattern called the R-pentomino. It first appeared at generation 69. Over four generations a glider returns to its original shape, displaced one cell diagonally, then repeats forever.
Generation 0 Generation 1 Generation 2 Generation 3 Generation 4
. # . . . . . . . . . . . . .
. . # # . # . . # # . . . # .
# # # . # # # . # . # # . . #
. . . . # . . # # # # . # # #
shifted 1 diagonally

A glider, the first spaceship ever found in Life. Image: Wikimedia Commons, public domain.
A pattern that moves is a pattern that carries information from one place to another. The glider is a wire.
The glider gun: Conway's $50 problem
Conway offered $50 to anyone who could prove or disprove that no finite starting pattern could grow without bound. In November 1970, an MIT team led by Bill Gosper found the Gosper glider gun: a stable 36-cell arrangement that emits a new glider every 30 generations, forever.

The Gosper glider gun. Image: Wikimedia Commons, public domain.
The same gun as a static 36-cell layout: two queen bee shuttles stabilized by two blocks. Image: Wikimedia Commons, public domain.
Gosper announced it by Western Union telegram on 4 November 1970, listing the cell coordinates and the line "IS A GLIDER GUN." Gardner, unable to check it himself, forwarded it to a reader named Robert Wainwright, who ran the pattern on an IBM mainframe and confirmed it.
That claimed the prize and gave Life a power supply. A gun is a clock and a signal source in one pattern.
Logic gates: where computation begins
With a steady stream of gliders you can build gates, because two colliding glider streams annihilate. A stream that arrives is a 1. A stream that is missing is a 0.
The loop closes: self-replication inside Life
Conway's grid does not merely support computation. People have built von Neumann's universal constructor inside it, and self-replicating patterns as well.
| Milestone | Who | When |
|---|---|---|
| Game of Life developed at Cambridge | John Horton Conway | late 1960s |
| First published description | Martin Gardner, Scientific American | October 1970 |
| Glider discovered, at generation 69 of the R-pentomino | Richard K. Guy | 1969 |
| Glider gun, unbounded-growth prize | An MIT team led by Bill Gosper | November 1970 |
| First published universality claim | Robert T. Wainwright, "Life is universal!" | 1974 |
| Outline of a universal computer and constructor | Berlekamp, Conway and Guy, Winning Ways | 1982 |
| Sliding block memory | Dean Hickerson | 1990 |
| Rule 110 proven universal | Matthew Cook | proved 1994, published 2004 |
| First explicit Turing machine in Life, finite tape | Paul Rendell | April 2000 |
| First explicit universal computer, a register machine | Paul Chapman | November 2002 |
| Universal Turing machine in Life | Paul Rendell | February 2010 |
| Gemini, a self-constructing spaceship | Andrew J. Wade | May 2010 |
| Linear propagator, the first explicit replicator | Dave Greene | 2013 |
| Fully universal Turing machine, finite starting pattern | Paul Rendell | March 2011 |
| Life simulated inside Life | Phillip Bradbury, on Brice Due's metapixel | 2012 |
| Life proven omniperiodic | Brown, Cheng, Jacobi and co-authors | 2023 |
| Conway dies of COVID-19 complications | 11 April 2020 |
Two details in that table are usually reported wrong, so they are worth stating plainly. The 1982 Winning Ways result was an outline, not a rigorous proof, and it claimed a universal constructor as well as a universal computer. And Rendell's 2000 machine was not universal: it ran one fixed program on a finite tape. Chapman's 2002 register machine has the better claim to the first explicit universal computer in Life, and Rendell's 2011 version is the one that finally produced unbounded tape from a finite starting pattern.
Andrew Wade's "Gemini" (2010) deserves emphasis, and it also deserves a precise label. It constructs a copy of itself and then deletes the original, so the whole assembly moves: it displaces itself 5,120 cells vertically and 1,024 horizontally every 33,699,586 generations. That makes it self-constructing rather than self-replicating, because nothing ever multiplies. Popular coverage in 2010 called it the first self-replicating pattern, which is the one detail worth getting right.
The first explicit replicator in Life, a pattern that genuinely makes copies without destroying itself, is Dave Greene's linear propagator from 2013. The distinction matters here more than it might elsewhere: von Neumann's whole question was about a machine that leaves a working copy behind, not one that relocates.
The four-rule toy from 1970 and the 1948 paper machine are not analogies for each other. One is an implementation of the other.
For the wider story of emergence, digital organisms, and life-like behavior arising from code, see our companion guide on artificial life, and the BFF experiment for self-replicators emerging spontaneously from random noise.
⚡ Turing Completeness Is Cheap, but Logic Gates Alone Are Not Enough
A system is Turing complete if it can perform any computation a general-purpose computer can. It needs conditionals, repetition, and unbounded memory. That last requirement is the one nearly everyone drops, and dropping it causes most of the confusion about this topic.
The correction that matters: logic gates give you computation. They do not give you Turing completeness on their own. Without unlimited memory, a system is a finite state machine, however clever its wiring. This is why Conway's Game of Life is Turing complete on an infinite grid but not on a fixed 100 by 100 board, and it is the honest answer to why a bounded Minecraft world sits in a different category from the mathematical idealization.
Strictly speaking, every physical computer ever built is a finite state machine, because RAM runs out. Turing completeness is a statement about the model, not the hardware.
With that clarified, the striking fact stands: universality is absurdly easy to stumble into. The minimal demonstration is Rule 110, a one-dimensional automaton whose entire rule fits on a business card. Stephen Wolfram suspected it was universal by 1985, and Matthew Cook proved it in 1994 while working as his research assistant. The proof was famously delayed by a contract dispute and did not appear in print until 2004.
One caveat that popular write-ups almost always drop: Rule 110's universality is weak universality. The construction needs an infinite repeating background pattern on both sides, with only the central program region finite. The same qualification applies to Langton's Ant. It is still a genuine universality result, but it is not the same as computing from a finite starting configuration.
| System | Intended purpose | Turing complete? |
|---|---|---|
| Conway's Game of Life | A mathematical curiosity | Yes, on an unbounded grid |
| Rule 110 | A 1-D automaton, 8 rule bits | Yes, the minimal known case |
| Minecraft redstone | An in-game wiring toy | Yes as a model, bounded in practice |
| Magic: The Gathering | A card game | Yes, with a specific board state |
| PowerPoint animations | Slide transitions | Yes, demonstrated in 2017 |
x86 mov instruction |
Moving data between registers | Yes, mov alone suffices |
| CSS plus HTML | Styling documents | Yes, with user input as the clock |
| Excel formulas | Spreadsheet math | Yes, since the LAMBDA function |
One more clarification, because it trips people constantly: Turing completeness has nothing to do with the Turing test. One is about what a system can compute. The other is about whether a human can tell they are talking to a machine.
The engineering corollary is uncomfortable: if your product exposes conditionals, loops, and state, you have shipped a programming language whether you meant to or not, along with the halting problem and unbounded runtime.
Which is exactly why serious automation platforms deliberately bound their execution. Taskade's automations cap how many steps a single run may take. That cap is not a missing feature. It is the reason a customer can trust that their workflow cannot loop forever and quietly run up an enormous bill. Giving up universality to keep a guarantee is a real design decision, and per the rule above it is the memory bound, not the logic, that makes the guarantee hold.
🌀 Computational Irreducibility: Why You Have to Run It
Conway's Game of Life is completely deterministic and completely unpredictable. Its rules fit in four lines. Given a starting pattern there is generally no formula for what it looks like at generation ten million. The only way to find out is to run ten million generations.
Stephen Wolfram named this computational irreducibility, and Life is its canonical object.
Two consequences reach well beyond cellular automata:
- Determinism does not buy predictability. Knowing every rule and the exact starting state still leaves you no option but to simulate.
- It is the formal ceiling on "the AI will plan the whole thing up front." A planner cannot fast-forward a rich system to its outcome. It can only take a step and look.
That second point is the honest theoretical argument for why AI agents are built as loops rather than single-pass planners, and why step-by-step reasoning measurably improves results. For where the limits of a single forward pass actually sit, see how large language models work and what is agentic engineering.
🛠️ What Cellular Automata Are Actually Used For
This is the question every enthusiast gets asked and almost nobody answers with real examples. Cellular automata are not only art and theory. Here are shipping applications.
| Field | Application |
|---|---|
| Cryptography | The chi step of Keccak, the SHA-3 standard, is a 5-bit S-box applied in parallel to every row. It is translation-invariant, which makes it a cellular automaton mapping in Daemen's sense, and it traces back to Wolfram's cellular-automaton cryptography |
| Fluid dynamics | Lattice Boltzmann methods simulate blood flow and airway particle dispersion directly from CT and MRI scans, with no mesh generation step |
| Materials science | Modeling solidification, grain growth, and crystal formation |
| Wildfire modeling | Fire spread across terrain grids under wind and fuel conditions |
| Game development | Procedural cave and dungeon generation, and the traffic and pollution models in the original SimCity |
| Machine learning | Neural cellular automata, where each cell runs a small learned network, used for self-organizing textures and regenerating patterns |
The honest counter-example belongs here too. A random number generator based on the middle column of Rule 30 was proposed and turned out to be unsuitable for cryptography. Simple rules producing complex output is not the same as simple rules producing secure output.
The machine-learning row is the live edge. Neural cellular automata replace the fixed rule with a small trained network, and the resulting systems grow target shapes from a single cell and regenerate after damage. It is the same substrate Conway used, with a learned rule instead of a hand-written one.
🤖 Can AI Systems Replicate Themselves?
Under specific experimental conditions with heavy scaffolding, yes. This is the newest chapter of von Neumann's question, and it is worth stating carefully because the topic attracts exaggeration.
| Research | Finding | Caveat |
|---|---|---|
| Fudan University, 2024 (preprint, not peer reviewed) | Llama-3.1-70B-Instruct and Qwen-2.5-72B-Instruct completed self-replication in 50% and 90% of trials, meaning 5 and 9 runs out of 10 | Given agent scaffolding, shell access, and an explicit instruction to replicate. What was copied was a directory of code plus model weights, not the model bootstrapping itself. Not spontaneous |
| Chang and Lipson, 2018 | A neural network quine: given a coordinate into its own parameter vector, it outputs the weight sitting at that coordinate | Reproduces itself one weight at a time. A network cannot emit its whole weight vector in one shot, so replication is indirect and approximate |
| Google Paradigms of Intelligence and the University of Chicago, 2024 | Self-replicating programs emerged from random interactions in a simple instruction soup, with no fitness function at all | Emergence, not design. The strongest link back to von Neumann. Arose mainly from self-modification, in roughly 40% of runs within 16k epochs |
| Self-improving agent systems | Agents that modify their own code and keep improvements that score better on benchmarks | Improvement, not reproduction. A different organ |
The important distinction is between replication and spontaneity. A model handed a shell, a copy of its own weights, and an instruction to replicate is being operated, not reproducing on its own. That is closer to a very capable copier than to a complete von Neumann organism.
The Google result is the genuinely surprising one, because nothing selected for replication and self-copying programs appeared anyway. That is the closest modern echo of what von Neumann was actually asking: not "can we build one," but "what makes reproduction possible at all."
For the deeper treatment of agents that improve their own behavior, see self-improving AI agents and types of memory in AI agents.
🖥️ HyperCard: Self-Replicating Software That Shipped to Millions
The most successful self-copying software system ever shipped was not a virus. It was HyperCard, released by Apple on August 11, 1987 and built by Bill Atkinson, with the HyperTalk scripting language by Dan Winkler.
Atkinson never separated the people who consume information from the people who create it. Every HyperCard stack contained its own authoring environment. Open a stack, press a key combination, and you were editing that stack from inside it. The artifact carried its own means of production.
| von Neumann | HyperCard, 1987 |
|---|---|
| Description (tape) | The stack file and its HyperTalk scripts |
| Constructor | The authoring mode inside every stack |
| Copier | A floppy disk |
| Controller | The user |
The loop closed, and it closed for millions of people who had never written a line of code.
It also explains Atkinson's own stated regret more sharply than nostalgia usually allows. He said his mistake was building HyperCard for standalone machines in a networked age. In his own words: "I grew up in a box-centric culture at Apple. If I'd grown up in a network-centric culture, like Sun, HyperCard might have been the first Web browser." That is not a failure of the constructor, which was excellent and sat on every Mac. It is a copier problem. Replication rate, not construction quality, was the binding constraint. The web won because its copier was a URL instead of a person carrying a disk across a room.
🧬 Workspace DNA: The Three Organs Applied to Real Software
An AI code generator is a constructor. You give it a description and it builds something. That is one organ out of three, and it explains why generated code so often feels like a starting point rather than a system.
Most builders stop at the first box, which is the distinction we drew in they generate code, we generate runtime: a folder of files is an artifact, a running system is an organism.
Taskade Genesis is built as all three organs. Describe an outcome in plain language and what comes back is a running workspace with four connected layers:
| Layer | Role | Biological analogue |
|---|---|---|
| Projects | Structured data across 7 views: List, Board, Calendar, Table, Mind Map, Gantt, Org Chart | Memory |
| AI agents | 15+ frontier models, 34 built-in tools, persistent memory | Intelligence |
| Automations | Triggers and actions across 100+ bidirectional integrations | Execution |
| App interface | What a user actually clicks | The body |
Taskade calls this loop Workspace DNA: Memory, Intelligence, Execution. The name is not decoration. It is the same architecture von Neumann specified, with the description used two ways.
Notice the cycle at the bottom. Automations write results back into projects, so the data an agent reads tomorrow is shaped by what the system did today. Execution becomes memory. That feedback edge is what separates a workspace that accumulates from a document that just sits there.
The Community Gallery is the pattern library for this, the same way Life enthusiasts maintain catalogs of gliders and guns. Someone builds a working app, publishes it, and you clone the whole running system instead of copying a screenshot of it.
Replicator or quine? An honest distinction
| Property | Replicator | Quine |
|---|---|---|
| Copies its structure | Yes | Yes |
| Produces a working copy | Yes | Yes |
| Routinely emits the description that rebuilds it | No | Yes, that is its whole job |
| Everyday example | Cloning a running app | A two-line Python program |
The split is one of emphasis rather than a hard boundary: a quine hands back its source without launching an independent copy, and nothing stops a replicator from carrying a rebuildable description. Most software, including most AI-generated software, sits on the replicator side. You can clone a working app and get a working app. What it cannot yet do is hand back the intent: the prompt, the reasoning, the decisions. That is why "clone this app, but for a dental practice instead of a law firm" is still hard, and why curated templates exist to approximate it.
The organ that is still missing, in every system
Von Neumann's design has no critic. Nothing checks that the offspring is correct, only that it was built. Life does not need a verifier, because a glider that collides wrong simply dies. A workspace does need one, because a system that reproduces its own mistakes at machine speed is not an improvement over doing the work by hand.
This is why serious AI systems increasingly pair a generator with an independent checker rather than trusting a single pass. Building that fourth organ is a more interesting problem than building a bigger constructor.
🔭 How to Explore This Yourself
Everything on this page is reachable in an afternoon.
| What to try | How | Time |
|---|---|---|
| Run the Python quine | Copy the two lines, then python3 quine.py | diff - quine.py |
2 minutes |
| Break it deliberately | Change %r to %s and watch the SyntaxError |
2 minutes |
| Find a quine by iteration | Write a near-quine, run its output as the new source, repeat until stable | 20 minutes |
| Watch a glider gun | Paste a Gosper gun pattern into any online Life simulator | 5 minutes |
| Build a Life logic gate | Aim two glider guns at each other and study the collision | 1 hour |
| Build a self-replicating workspace | Describe an app to Taskade Genesis, then clone it | 10 minutes |
Start with the quine. The failure is the instructive part: nearly everyone tries the naive approach first, watches the gap refuse to close, and only then sees why the dual-use trick is necessary rather than clever.
🧬 One Description, Read Two Ways
Von Neumann asked his question in 1948 with no computer to test it on. Conway answered a version of it in 1970 with four rules and graph paper. Ken Thompson weaponized it in 1983. A Python programmer can demonstrate the core trick today in two lines.
All of them are answering the same question: can a system contain a description of itself complete enough to build another one?
The answer is yes, and the mechanism never changes. One description, read twice. Once for meaning, once as raw symbols. Interpret it to build the body, copy it blind to pass it on. Confuse the two lanes and you fall into an infinite regress. Keep them separate and you get reproduction, whether the substrate is a grid of cells, a strand of DNA, a HyperCard stack, or a workspace.
▲ ■ ● Von Neumann described the architecture. You get to build on it. Your projects hold the memory, your agents supply the intelligence, your automations carry out the execution, and the whole system can be described, cloned, and started again somewhere else. Memory feeds Intelligence, Intelligence triggers Execution. Clone a working app → or build your own from a prompt →.
One prompt. One living system. Built to be copied.
🔗 Related Reading
- What Is Artificial Life? - Digital organisms, emergence, and intelligence arising from code
- The BFF Experiment - Self-replicating programs emerging from random noise, with no fitness function
- They Generate Code. We Generate Runtime. - Why a folder of files is not a working system
- How Do Large Language Models Work? - Transformers from attention through generation
- Self-Improving AI Agents - The reflection loop, and agents that revise themselves
- What Is Intelligence? - From biological neurons to AI agents
- The Complete History of Computing - The arc from binary to AI agents
- What Is Grokking in AI? - A sudden phase transition in capability, emergence with a clean measurement
- What Are Multi-Agent Systems? - Collective behavior no single agent was programmed for
- Fifty Years of Computing Primitives - The primitives everything else is built from
- Types of Memory in AI Agents - How agents remember, and why verification matters
- History of Mermaid.js - The diagrams-as-code renderer that drew every diagram here
- Clone Apps. Add Login. Run Agents. - Self-replication as a product feature
- The Living Software Era - Software that keeps running after the prompt
- What Is Agentic Engineering? - How AI agents are reshaping software development
Concepts
- Emergent Behavior - When a system does things no rule specified
- Self-Evolving Systems - Systems that change their own structure over time
- Living Applications - Apps with memory, intelligence, and execution
- Autonomous Apps - Software that runs itself
- The Turing Test - Distinct from Turing completeness, and often confused with it
Compare
- Taskade vs Emergent - Two takes on generated software
- Free Lovable Alternative - Code generation versus runtime generation
- Free Replit Alternative - Generate and run in one place
🐑 Before you go... von Neumann described the architecture of self-reproduction in 1948. Taskade Genesis is what it looks like as a product. One prompt turns into a living workspace with AI agents, automations, and real-time collaboration in seconds.
- 🚀 AI App Builder: Turn a single prompt into a working app. No code required.
- 🤖 Custom AI Agents: Agents with custom tools, slash commands, and persistent memory.
- 🔄 Automations: Workflows that run on autopilot across 100+ integrations.
- 🧬 Workspace DNA: Memory plus Intelligence plus Execution. That is living software.
Ready to build? Create a free account and ship your first app today. 👈
🔗 Resources
- https://en.wikipedia.org/wiki/Quine_(computing)
- https://en.wikipedia.org/wiki/Von_Neumann_universal_constructor
- https://en.wikipedia.org/wiki/Conway%27s_Game_of_Life
- https://en.wikipedia.org/wiki/Rule_110
- https://dl.acm.org/doi/10.1145/358198.358210
- https://www.schneier.com/blog/archives/2006/01/countering_trus.html
- https://arxiv.org/abs/1803.05859
- https://arxiv.org/abs/2406.19108
- https://conwaylife.com/
- https://github.com/mame/quine-relay
💬 Frequently Asked Questions About Self-Replicating Code
What is a quine in programming?
A program that takes no input and prints its own complete source code, exactly. Douglas Hofstadter coined the term in Godel, Escher, Bach (1979) after the logician Willard Van Orman Quine. It works by using one piece of text twice: once as executable instructions, once as quoted data.
Is a program that reads its own source file a quine?
No. That is a cheating quine. It depends on the file existing at a known path, so it breaks the moment you rename the file or pipe the program through standard input. A true quine carries its own description internally and works in any environment.
What is the shortest possible quine?
In most languages the empty file technically qualifies, since zero bytes produce zero bytes, which is why formal definitions require a non-empty program. Among real quines, length varies enormously: homoiconic languages like Lisp allow very short ones, while C requires manual handling of quote characters.
Why does the copier in von Neumann's design have to be blind?
Because a copier that interprets the description in order to duplicate it would need a description of that interpretation, which would need its own description, reopening the infinite regress. Treating the description as meaningless symbols lets it be duplicated perfectly without ever being understood. DNA polymerase works the same way.
How did von Neumann predict DNA before Watson and Crick?
He did not predict the chemistry. He proved in 1948 that any self-reproducing system needs a description used two ways, interpreted to build the body and copied blind to pass on. That architectural requirement is what DNA turned out to satisfy, with transcription handling interpretation and replication handling copying.
What are the four rules of Conway's Game of Life?
A living cell with fewer than two living neighbors dies. A living cell with two or three survives. A living cell with more than three dies. A dead cell with exactly three living neighbors becomes alive. This is written B3/S23. Conway developed the rules at Cambridge in the late 1960s, and Martin Gardner published the first public description in October 1970.
Is Conway's Game of Life Turing complete?
Yes, on an unbounded grid. Gliders carry signals, glider guns provide a clock, and colliding glider streams implement logic gates. Paul Rendell built a Turing machine inside Life in 2000 and a universal one in 2010. On a fixed finite board it is a finite state machine, because Turing completeness also requires unlimited memory.
Do logic gates alone make something Turing complete?
No. This is the most common misunderstanding on the topic. Gates give you computation, but Turing completeness also requires unbounded memory. Every physical computer is technically a finite state machine, since RAM runs out. Turing completeness is a claim about the model, not the hardware.
Is Turing completeness the same as the Turing test?
No, and they are unrelated despite the shared name. Turing completeness is about what a system can compute. The Turing test is about whether a human conversing with a machine can tell it is a machine.
What was Ken Thompson's Trusting Trust attack?
A 1983 demonstration, described in his Turing Award lecture and published in 1984, of a compiler that inserts a backdoor into the login program and inserts the backdoor-inserting code into any compiler it builds. Once the binary exists the malicious source can be deleted, and the backdoor survives in every future compiler generation. Diverse Double-Compiling is the known defense.
Are quines useful for anything real?
Yes, in four places: testing compilers and toolchains by round-tripping source exactly, security research including Trusting Trust and the reproducible-build defenses against it, proving theoretical results such as Kleene's recursion theorem and the undecidability of the halting problem, and bootstrapping a compiler written in its own language.
Can AI models actually replicate themselves?
Under specific experimental scaffolding, yes. A 2024 Fudan University study reported Llama-3.1-70B-Instruct and Qwen-2.5-72B-Instruct completing self-replication in 50 percent and 90 percent of trials when given agent tooling, shell access, and explicit instructions. This is assisted behavior, not spontaneous. Separately, Chang and Lipson built a neural network quine in 2018 that reproduces itself one weight at a time, taking a coordinate into its own parameters and returning the weight at that position.
🧬 Build Your Own AI Applications
Von Neumann worked out the architecture of self-reproduction on paper. Taskade Genesis is what that architecture looks like as a product you can use today. Describe what you need and Taskade builds it as living software with agents, automations, and a real interface. It is vibe coding with a runtime attached. Explore ready-made AI apps.






