LearnReferenceRelatives

Relatives and derivatives

Brainfuck is easy to change: rename the eight commands, take one away, or add a ninth, and you have a new language. Its author noticed: “people created variants. Tons and tons of variants” [1]. The Esolang wiki files them in a category it calls “a very large list” [2]. The family sorts into six kinds, with one or two well-documented examples of each.

The family at a glance

Languages related to brainfuck, by kind. Years and authors are as the cited source gives them; "not stated" means it does not.
LanguageYearByThe idea
P′′1964Corrado BöhmFour instructions on a tape. A forerunner, not a relative by descent [3]
FALSE1993Wouter van OortmerssenA stack language with a compiler of 1,024 bytes. The spark [4]
Ook!2001David Morgan-MarThe eight commands as pairs of "Ook" [5]
COW2003Sean HeberTwelve commands, all ways of writing "moo" [6]
Smallfuck2002Nikita AyzikovskyCells of one bit, no input or output, a tape with an end [7]
Boolfuck2004not statedCells of one bit, with input and output bit by bit [8]
pbrain2004Paul M. ParksAdds procedures [9]
Brainfork2004Asger IpsenAdds a command that splits the program in two [10]
Brainloller2005Lode VandevenneThe program is a picture: one coloured pixel per command [11]
Unary2005Lode VandevenneThe program is one number, written as a row of zeros [12]
BF Joustabout 2009Kerim AydinTwo programs fight on one tape [13]
BFF2024Agüera y Arcas and othersPrograms that can copy each other, for research [14]

Before: P′′ and FALSE

P′′ is the language Corrado Böhm described in 1964. Its four instructions are: move right; add one and move left; and two brackets that repeat while the current cell is not zero [3]. Brainfuck without input and output can be translated into it almost command for command, and the Esolang wiki calls brainfuck "a minor variation" of it [15]. Whether Müller knew of it is not known. See History.

FALSE is where the idea came from. Wouter van Oortmerssen designed it in 1993 to be powerful, hard to read, and small to compile: 1,024 bytes [4] [16]. Müller made brainfuck by cutting FALSE down until the compiler fitted in 240 [1] [17]. FALSE has some thirty commands, a stack and functions [1], so the two do not look alike. The Esolang wiki credits FALSE with inspiring Befunge as well [16].

Befunge, also from 1993, is a sibling by age only. Chris Pressey made it to be as hard to compile as possible: the program is a grid, and the point of execution can travel in four directions [18].

The same language in other words

The simplest way to make a new language from brainfuck is to rename the commands. The Esolang wiki calls such a language a "trivial brainfuck substitution" and lists a large family [19]. A program is translated symbol for symbol, so everything said about brainfuck holds for them too.

Ook!, by David Morgan-Mar (2001), is the best known and one of the first. It is written for orang-utans, who say only "Ook". Each command is two of the three words Ook. Ook? Ook!, so "move right" is Ook. Ook? and "add one" is Ook. Ook. [5] Müller mentioned it in his talk as "orangutan-compatible" [1].

Others of the kind use the word "Blub", single letters (Alphuck), or the sounds of a Pokémon (Pikalang) [19]. COW, by Sean Heber (2003), is not quite a renaming: its commands are all spellings of "moo" with different capitals, but there are twelve of them, four more than brainfuck has [6].

Daniel Cristofani has one request for people who make variants: give them a name that cannot be confused with "brainfuck", so that the name keeps meaning one language [20].

Smaller still

Can it be done with less? Yes.

Smallfuck, by Nikita Ayzikovsky (around March 2002), has cells of a single bit and one command, *, that flips it, in place of + and -. It has no input and no output. Its tape has a fixed length, which is why the wiki does not count it as Turing complete as defined [7].

Boolfuck (2004) also has cells of one bit, where + flips the bit and - is gone, but keeps input and output, one bit at a time. Every brainfuck program can be translated into it, so it can compute as much [8]. Together they show that the size of a cell does not matter for what can be computed, only the length of the tape. See Theory.

With something added

The other direction: keep the eight commands and add what is missed most.

pbrain, by Paul M. Parks (2004), adds procedures. ( and ) enclose a piece of program and give it the number that is in the current cell; : runs the procedure with the number in the current cell [9].

Brainfork, by Asger Ipsen (2004), adds Y, which splits the running program into two that go on side by side. In one the current cell becomes 0; in the other the pointer moves one cell right and that cell becomes 1, so each copy can find out which one it is [10].

The wiki's list goes on: a version on a grid of cells, one that can run backwards, one on quantum bits [2]. Cristofani's verdict on the whole direction is that it is like bolting parts onto a skateboard to make a truck [20].

The same program, written differently

These keep the language and change what a program looks like.

Brainloller, by Lode Vandevenne (2005), reads its program from the pixels of a picture. Each command has a colour. Two more colours turn the direction of reading, so that a long program can be folded into a rectangle [11].

Unary, by the same author (2005), goes as far as possible the other way. Give each command a code of three bits, put the codes in a row behind a 1, read the result as one number, and write that number as a row of that many zeros. A program is then described completely by its length [12]. Even a tiny program becomes absurdly long, which is the joke.

For play and for research

BF Joust is a game invented by Kerim Aydin. Two programs in a cut-down brainfuck run at the same time on one short tape, one starting at each end. Each has a "flag" in its starting cell and tries to bring the other's flag to zero, or to make the other run off the tape. Players send in programs and a server plays each against all the others [13]. More under Culture.

BFF is the variant used in the study "Computational Life" (2024). Program and data share one tape, and the input and output commands are replaced by commands that copy from one place on the tape to another. The researchers started with a large number of random programs of 64 bytes, let them run against each other, and report that programs that copy themselves tend to appear without being designed [14].

Limits

Read next

Notes and sources

Where a source is a community wiki or the author's own account, the entry or the text says so.

  1. Urban Müller, talk at Tamedia TX, 2017, read as the community transcript on the Esolang wiki: Tamedia TX 2017 transcript. The transcript says its last page is missing. Wikipedia gives the title as "Brainfuck, or how I learned to change the problem" and the date as 13 June 2017; we did not watch the recording. Opened 11 October 2026.
  2. Esolang wiki, "Brainfuck derivatives": the wiki's page on derivatives. Opened 11 October 2026.
  3. Wikipedia, "P′′": the Wikipedia article on P′′. Our source for Corrado Böhm, "On a family of Turing machines and the related programming language", ICC Bulletin 3 (1964), 185 to 194, and for C. Böhm and G. Jacopini, "Flow Diagrams, Turing Machines and Languages with Only Two Formation Rules", Communications of the ACM 9(5) (1966), 366 to 371. We did not open the two papers themselves. Opened 11 October 2026.
  4. Wouter van Oortmerssen, "The FALSE Programming Language": the author's page on FALSE. Opened 11 October 2026.
  5. Esolang wiki, "Ook!": the wiki article on Ook!. Opened 11 October 2026.
  6. Esolang wiki, "COW": the wiki article on COW. Opened 11 October 2026.
  7. Esolang wiki, "Smallfuck": the wiki article on Smallfuck. Opened 11 October 2026.
  8. Esolang wiki, "Boolfuck": the wiki article on Boolfuck. Opened 11 October 2026.
  9. Esolang wiki, "pbrain": the wiki article on pbrain. Opened 11 October 2026.
  10. Esolang wiki, "Brainfork": the wiki article on Brainfork. Opened 11 October 2026.
  11. Esolang wiki, "Brainloller": the wiki article on Brainloller. Opened 11 October 2026.
  12. Esolang wiki, "Unary": the wiki article on Unary. Opened 11 October 2026.
  13. Esolang wiki, "BF Joust": the wiki article on BF Joust. Opened 11 October 2026.
  14. Blaise Agüera y Arcas and others, "Computational Life: How Well-formed, Self-replicating Programs Emerge from Simple Interaction", arXiv:2406.19108, 2024: the abstract on arXiv and the full text. Opened 11 October 2026.
  15. Esolang wiki, "Brainfuck": the wiki article on brainfuck. A community wiki; we use it for conventions and for its list of results, and name it where it is our only source. Opened 11 October 2026.
  16. Esolang wiki, "FALSE": the wiki article on FALSE. Opened 11 October 2026.
  17. Urban Müller, brainfuck-2.lha, Aminet, dev/lang, dated 9 June 1993: the package page on Aminet. We read the files in the archive: README, bfc.asm (the compiler), bfi.c (the interpreter) and the six example programs. Sizes and dates are those of the archive listing. Opened 11 October 2026.
  18. Esolang wiki, "Befunge": the wiki article on Befunge. Opened 11 October 2026.
  19. Esolang wiki, "Trivial brainfuck substitution": the wiki article. Opened 11 October 2026.
  20. Daniel B Cristofani, "The Epistle to the Implementors": the epistle on brainfuck.org. Opened 11 October 2026.