Self-replicating, self-modifying Assembly that can evolve into every program
github.com
github.com
The idea is there, but there is the missing concept of "fitness," as one major example of a necessary function for evolution. Random mutations alone do not result in evolution (although it is an important / mandatory step).
Since it takes a human to determine whether any of the thousands and brazillions of output files actually work (and possibly restart the shell or reboot the system), and there is no method of measuring functional improvement, it is more of a lottery than anything. And if you find one that does work, which you must do by running it individually or debugging it, you can't let that program evolve into a new branch of the family tree. So, your program doesn't actually seem to have any evolution occurring.
For example, and this might seem off topic or just plain impossible for just a moment, but if you look into it, you'll see the connection: the Library of Babel[1] spawns every bit of code that your program spawns, but in MIME format. As a bonus, there is a ROT13 encoded version of every MIME version of your program's potential output as well. And there is an English man page for every one of the programs you can find in these formats if you search long enough. Nobody would call this evolution, because that's just how pseudo-randomness and true randomness work. And basically how your program works.
I'd even hazard to say that Library of Babel not only already has a fully functional version of your program in it, it has many more advanced versions of it that do output code that evolves and allows them to spawn and continue evolving beyond a single iteration, on their own.
Oddly, that makes Library of Babel significantly more efficient than your program, because you can also find a swedish man page for each of them, too. And it can output ports for any platform without requiring a different initial executable (seed). Some versions of the code will even compile without warnings!
Don't get me wrong. I like the idea of what you're doing. But the description is not what it is doing in its current iteration. Maybe you can evolve it to, though. It's a good philosophical project, but it's got a ways to go to fit the description it's been given.
Your program could theoretically spawn a program that reproduces the code that creates the Library of Babel. BUT you wouldn't have a way of knowing even if you were close, let alone if you got it spot on. And it would certainly take an infinite number of monkeys to test the code to see if it does the job or not, and some of them would still find a version of it already in the Library of Babel.
I think you'd be interested in Artificial Life (alife). It's basically what your program is nodding towards, but not fully approaching. Check out this particular area of alife, Evolutionary Computation[2].
Yes, I agree with you on the fact that in the current state of LDCA, there is no meaningful evolution. I tried create a supervisor script[1] to achieve such evolution based on comparing stdout. But comparing stdout does not give me a stochastic picture of error/loss. So instead in the following days or months, I'll try to create a system that checks the values in the registers at the end of the program execution. It will pick the best offspring to go with and eliminate other offsprings.
Yes, I'm basically trying to create Artificial Life with this project. Any contributions to this project are welcomed. Feel free to open PRs and issues on GitHub to discuss and contribute.
[1] https://github.com/mertyildiran/ldca/blob/master/simulate.py