BFF · 2D primordial soup · live

Self-replicators out of random noise

Every 8×8 tile is a 64-byte program. Each epoch, tiles pair up with a neighbour, get glued into one tape, and run as code that can rewrite itself and its partner. Nothing rewards copying. The slide opens on a real moment from an overnight run: epoch 7,904, one epoch after the first replicator appeared (ringed). Watch whether it survives and spreads.

SLIDE128 × 72 · 9,216 PROGRAMS · 590 KB
Pre-life: no replicators yet
Epoch
0
Ops / pair
0
High-order H
0.00
high-order entropy, bits/byteepoch 0

Click the slide to

Under the lens

Click a tile to read its program.

Birth gallery: replay one interaction

lineage took overdied young

byte reads 0 / 8,192 instructions 0 loops closed across the seam 0 program counter head0 head1
Press Play.

The ten instructions (every other byte value is a no-op)

What you are watching

Two programs glued into a 128-byte tape share one memory. Instruction pointer, head0 and head1 all start at byte 0. The instructions move heads, bump bytes, and copy between heads. Code is data, so a program can overwrite its partner, including the partner's code.

The paper this reproduces found that in about 40% of runs, programs that copy themselves appear within 16k epochs, with no fitness function and no selection. Here the grid is smaller than the paper's 240 × 135, so it can take longer. If you get impatient, use Add replicator.

Two ways to copy yourself

Overnight runs found two replicators, one per run. The marked bytes are the ones each can't lose:

2D grid    ··[·······<,··}·]·········{·····}········]·········}··,<······[·
             ^       ^^  ^
well-mixed ······[·····{·.>]·<··········<·<]·]<·<<·········<·]>.·{·····[···
                 ^     ^ ^^^

Both walk one head backwards from byte 0, which wraps straight into the partner, and copy themselves across one byte at a time. The copy comes out mirrored. Both tails are their heads reversed, so the mirror image is again a working copier. In the well-mixed soup every species shows up as a mirror pair with near-equal counts (263 and 261 copies, 201 and 198), flipping orientation each generation.

How the first one was born

Pure noise almost never does it. Of a billion random 64-byte strings, about 6 per million copy most of themselves into a neighbour, and none make copies that can copy again.

I replayed this run epoch by epoch to catch the birth. At epoch 7,904, tile (64, 34) on this slide held a program with an unfinished copy loop and no closing ]. It was paired with the ringed tile, whose first byte happened to be ]. The loop closed across the seam and wrote a complete replicator into the ringed tile. The same thing, a borrowed bracket, started life in the well-mixed run too.

Across 60 runs I traced 49 births this way. 42 began with a borrowed ], and 3 more with some other piece supplied by the partner. Only 2 came from a lucky mutation. About half of all new lineages die within a few hundred epochs.

Changing the rules confirms it. When loops can't close across the seam, no life appeared in 3 million epochs. Normally there are about 50 births in that time. When programs can't start with ], births fall threefold.