‘Long Now’ of software?

NOTE HXA7241 2011-08-28T10:06Z

Is it possible to have a software equivalent to the ‘Long Now’ project? Can we imagine a software system that would last for 10000 years? (or even just 1000) This means both running and adapting/reusing – both of the two fundamental aspects of software.

We do not know very well how to build enduring systems, self-supporting systems.

Some think of Lisp as being a language for the next thousand years, could that actually be possible? But that is not really quite a software system: it is more like culture. It is not independently viable.

But software is partly culture. At its best, it is a symbiosis of human and machine. It not a separate object but diffused amongst us like a mycelial structure. It is both independent and dependent.

Perhaps the internet is the best we have done (Alan Kay).

~ ~ ~

Of course, we already have an example: DNA systems. But DNA systems are evolution not machine, not engineering.

This leads to a comparison of evolution and engineering: engineering is good for deliberate building for intended purposes, and evolution is good for automatic building for unknown circumstances.

What is needed is a combination. How to make an evolutionary system that is fixed to a particular purpose? Evolution is only fixed to reproduction. So the reproduction would have to be made to depend on the intended aim: parts that follow the aim are helped to reproduce.

Is it possible to maintain information enduringly? Something representing the intention must be totally permanent or self-renewing. But a fixed intent limits evolution: it implicitly limits evolution's scope of response to circumstances. That means it weakens the robustness of its reproduction – its most fundamental essence.

Engineering and evolution are antagonistic. The best that could be done is to do the right amount of each: for engineering, predict the environment, and your working materials, and design accordingly; for evolution, allow it freedom to handle the rest that is unknown.

~ ~ ~

The fault with some software is to try to solve all the problems and realise all the visions, and in one single super-system. This cannot be the way to create ‘big’ software. Everything is too interdependent and controlled.

A good architectural form co-operates with users. It does not constrain them or do everything for them, it serves them while also allowing them freedom. And software has two kinds of users, the second is other software makers. They also need that freedom. The ultimate architectural form for software is co-operative and emergent.

Grand-scale software must be designed as much by not designing: by not specifying too much, by not controlling everything. It is as much about what is left out.

~ ~ ~

So what would be a good project for a ‘Long Now’ of software? Maybe a kind of DNA engineering framework, or perhaps more like a DNA unix – a basic software infrastructure for using DNA systems to build all manner of things – BioBricks and further . . .