A minimalistic computer simulation demonstrating the emergence of functional replicators out of random noise; based on a variant of the Brainfuck programming language.
The BFF Setup
You have a “soup” containing thousands of tapes. Each tape is exactly 64 bytes. The size never changes.
An interaction works like this:
Pick two random tapes from the soup
Temporarily concatenate them into a 128-byte tape
Run this as a Brainfuck program
Split back into two 64-byte tapes (bytes 0–63 and bytes 64–127)
Return both to the soup
The key insight: in standard Brainfuck, the program and the data tape are separate. In BFF, they’re the same thing. The 128-byte combined tape is simultaneously the program being executed AND the memory being operated on.
What the Instructions
Brainfuck has a read/write head that points to some position on the tape:
< — move head left one position
> — move head right one position
+ — increment the byte at current position (0→1, 255→0)
- — decrement the byte at current position
[ — if current byte is 0, jump forward to matching ]
] — if current byte is nonzero, jump back to matching [
, and . — input/output (TODO: why does he keep , but drop .?)
Execution starts at byte 0 and proceeds through the tape. When it hits an instruction, it executes it. Non-instruction bytes (anything other than those 7 characters) get skipped.
How Replication Emerges
Say tape A occupies bytes 0–63 and tape B occupies bytes 64–127 in the combined tape.
If tape A happens to contain a sequence of instructions that:
Reads bytes from positions 0–63
Writes those values to positions 64–127
…then when they split apart, tape B has become a copy of tape A.
A simple copy loop might look something like:
Move to position 0
Read byte, move to position 64, write byte
Move back, go to position 1
Repeat until done
BFF results
![[What is Intelligence - What is Life-1767462354139.webp]]![[What is Intelligence - What is Life-1767462257159.webp]]![[What is Intelligence - What is Life-1767461529967.webp]]![[What is Intelligence - What is Life-1767461534587.webp]]![[What is Intelligence - What is Life-1767461538104.webp]]
Operations per interaction: Each dot is one interaction; height shows how many instructions executed. Before the phase transition, almost nothing happens. At the transition, a sharp vertical wall appears as copy loops start running thousands of operations per interaction. Coding bytes per tape: Fraction of each tape containing valid instructions vs. random bytes. Rises over time because only code produces code. Jumps sharply at the phase transition when whole-tape replicators take over, continues climbing afterward as sub-replicators colonize remaining space. Entropy by tape position: For each tape position, how variable is that byte across all tapes in the soup? Before the transition: maximum entropy everywhere (random). After: near-zero for early positions (conserved replication machinery), higher toward the end (cargo/sub-replicator space that tolerates variation). Positions of aligned-copy loops: Where on the tape are the [ instructions performing whole-tape replication? Multiple clusters indicate competing replicator species whose populations shift over time. Positions of self-multiplying loops: Where are [ instructions that copy themselves multiple times per interaction? These sub-replicators emerge only after whole-tape replication is stable — evolution continuing at a nested level.