Random byte programs collide, execute over each other, and split apart again. No fitness
function, no selection, no goal. Watch for the moment the noise stops being noise.
New to this? The controls ship on a suggested setup, just press Run and watch the
Fertile programs number. Every control and metric is explained below, and hovering any
of them shows a one-line note.
Ten instructions, and two data heads, h0 and h1: that move
independently along the tape. Instructions and data share that tape, so a running
program is rewriting the same bytes it is being read from.
0 for the paper's canonical setup, where
emergence is far rarer in a soup this small. Every knob below is explained in the two sections
that follow.wrap: circular tape. invalidate: the program ends. saturate: the head sticks at the edge.0 there is no external mutation; every variation comes only from programs rewriting one another. Even a small value (the range is 0 to 0.01) changes the outcome dramatically.0 is the paper's canonical, hard setup. Offsetting it (64 = the partner's first byte, the shipped default) lets copying begin immediately, so emergence becomes common.[ or ] with no partner does. ends program is the paper's spec; no-op ignores it and keeps running.demo A and demo B are two different hand-found replicators.scan every, species at, dead after). It runs a full-soup census, which costs a little speed.
Fertile programs is the measurement that assumes nothing: it samples the soup, pairs each
program with random partners, and counts the ones that come out of the encounter having made a
copy of themselves. It detects life it has never seen before, which is the whole point, since a
spontaneously emerged replicator has a shape nobody chose. The sample is 64 programs, so the
reading moves in steps of ~1.6%, and a purely random soup already scores a few percent by
accident; treat anything under ~5% as noise.
Species tracking groups programs by their sequence of opcodes, the active instructions,
ignoring the inert filler between them. Two programs with the same opcode spine are the same
species even if their junk bytes differ. Every figure in that table is an exact count taken by
a full scan of the soup, so there is no statistical noise, only temporal resolution: everything
is measured as of the last scan, every N generations as you set it. % original is
how many members still carry the founder's exact 64 bytes, versus the cloud of variants that
drift away from it while the species stays alive.
Nothing here mutates by design: with the mutation rate at zero, all variation comes from
programs rewriting themselves as they run. Every byte in the soup is one pixel. Given the same
seed and settings this runs identically on every machine, the simulation is integer-only and
fully deterministic, so a seed reproduces a world exactly. Results are bit-identical to
soup.js in Node. The two replicators offered under "plant" are hand-found, not
emergent, a way to watch what a working replicator does without waiting for one to arise.