Awesome. I've been meaning to play around with this more after first hearing about this paper. I tried a similar automata with an even simpler representation for turing machines and there wasn't an abiogenesis moment. I guess the many no-op characters in the original paper allow for it to explore a bigger space of valid programs or to hide data without completely overwriting itself.
I would like to try alternative character encodings, including ones with fewer no-ops where most bytes are valid BF characters. Are more no-ops better? Is self replicating goo the best we can do?
I've done a lot of experimentation around brainfuck, this paper's specific variant, and applications to genetic programming.
My conclusions so far regarding the abiogenesis/self-replicator angle is that it is very interesting, but it is impossible to control or guide in any practical way. I really enjoy building and watching these experiments, but they don't ever go anywhere useful. A machine that can edit its own program tape during execution (which is then persisted) is extremely volatile in terms of fitness landscape over time.
If you are looking for practical applications of BF to real world problems, I would suggest evolving fixed sized program modules that are executed over shared memory in a sequential fashion. Assume the problem + instruction set says that you must find a ~1000 instruction program. With standard BF, the search space is one gigantic 8^1000. If you split this up into 10 modules of 100 instructions, issues like credit assignment and smoothness of the solution space dramatically improve. 8^100 is still really bad, but compared to 8^1000 its astronomically better.