"Genetic" diversity in software

I bet @dirvine has already thought of this, but having variation in the code of different nodes, SAFE apps, and most important of all in SAFE OS, is very attractive.

I had already been itching to find reasons to do some evolutionary software stuff on SAFE (because my past work with generic algorithms was such fun) but I hadn’t considered this approach: automatically creating variation in order to increase robustness without altering function - i.e genetic variation without altering the phenotype characteristics.

Example: Software Clones: Genetic Variation and Technology


Sounds good…I just wonder if the software would evolve to the point of becoming a “different species” so to speak, unable to “procreate”(or interact) with it’s original ancestral genetic software, as in biological evolution? Could this feasibly be a problem, or is it a mad question?..not sure

In regular programming at least, the interface (the way in which the program/code can be interacted with, input/output) and the implementation of that interface (the code behind the interface that executes the actual work) are usually seperated. I imagine if you want the implementation to evolve and have the interface stay the same, then it should be trivial to set it up that way.

1 Like

See, I said it was fun :slight_smile:

1 Like

Thanks for that Seneca

You can look at genetic programming too. The question is what the fitness function is…what is being optimized?

Something I’ve been thinking about in the medium-term is having autonomous nodes that self-sustain off of cryptocurrency. You could even have families and colonies of nodes. I have a bunch of notes around this for a future whitepaper but I think it would be cool to flesh it out in the context of ‘traditional’ server architectures (that can now also be provisioned with BTC via StackMonkey, etc.) and also in the context of Safe. @happybeing what kind of work did you do with GAs?

Is there a way for safe nodes to be autonomously spawned and provisioned?


Is there a way for safe nodes to be autonomously spawned and provisioned?

The reason I think David may already be thinking along these lines is because he recently described an update mechanism that seems to me a step towards this. So, no, not yet, but it’s an obvious extension, with “rank” being the fitness function. Very innovative, and mindblowing capability!

I’ve been coming back to these ideas for years, particularly how they could work with the web/internet as it evolved, but never more than casual musings.

I worked on applying GAs to commercial problems in the late eighties when I worked for Cambridge Consultants. It was my baby, and I did some small commercial projects with a couple of oil companies on different technical problems. I also used it to cut my teeth on C++, building a WIMP interface out of C++ classes and using this to create a visual demonstration program (GA Workbench for DOS). That program is probably still a great way to get a feel for GAs. I had a lot of fun.

Please have a look at my thread on the same subject:

The topics to research and investigate are interactive evolutionary algorithms.

Designs for DACs are algorithms which evolve by process of artificial selection within the context of the DAC ecosystem.

If SAFE Network will support scripting then we could in theory test this out. Simply propose the initial fitness functions from which the DAC designs can be measured.

For example profitability would measure the fitness of a DAC in terms of economic survivability. Mutation could come in the form of forks to the initial code which have unique innovations so for example NXT has several mutations, Bitcoin has mutations like Litecoin, all which compete in terms of profitability.

But they may also compete in terms of social utility.

Do you have a link to David’s post? Would love to take a look at it.

Source code itself is already manipulated, extended, cloned, mixed, etc which constantly creates new mutations of existing software. At least in the open source world.

At a higher level, different applications can be a combination of other applications, running from different computers in different places. Each application is treated as a component and can be swapped out for another.

Ofc, this all requires input from users, usually developers. The software itself doesn’t tend to write itself and mutate, but the affect is similar - humans mix the software with other bits of software and give birth to something new.

That isn’t to say that the software cannot modify how it interacts with its digital ecosystem, but rewriting themselves is beyond their scope.


This is the post by David which I think is a step towards an evolutionary model: