Enduring software

NOTE HXA7241 2011-09-25T10:06Z

Making ‘enduring software’ looks more like a requirements/product-design problem than an engineering problem.

Is it possible to say anything a priori about enduring software? Maybe there is a simple law that sets the bounds:

‘Unlimited’ software must have either: a Turing-complete abstraction/interface, or a way to transform the abstraction. If it has neither, it is limited, and so will eventually fail to meet requirements given time and circumstance.

(‘Turing-complete interface/abstraction’? An interface – that is, an abstraction – is a way to control a machine (in a sense, it represents a machine). So the widest, most powerful abstraction, is one that controls/represents a machine that can do anything. We know what that is: Turing-complete.)

This says nothing more than what is already known. But at least it makes it obvious that most claims or expectations of future-proof software must be false (they have neither Turing-complete interfaces, nor well-defined means of transform).

But the second point is that this is quite hollow. If the (overall) abstraction is Turing-complete then the software does not really do anything – it is just another general machine on top of the one underneath – you end up where you started. And effectively the same with transformation (although maybe that is a little more interesting . . .).


The whole idea of enduring software is something of an illusion. It cannot quite mean what it appears to. But it is possible to clarify what it does mean.

The idea of ‘enduring’ is of something that can keep going despite its surroundings changing – enduring against something. That is meaningful with material machines: you want the concept to endure despite the instability of the material that embodies it. But software has no equivalent embodying material (it is its own); there is nothing the concept is trying to persist against.

The idea of enduring software only makes sense as something that is not really about software exactly. If software is used for a long time, it is because the particular use it performs is still wanted: it is really the use, the purpose, that is enduring.

Designing enduring software is about pragmatic, a posteriori, knowledge. That is, about discovering and inventing particular structures that happen to be good for the particular environments and uses we happen to have.

‘Enduring software’ is not a technical matter, not about some special way of designing/implementing, but about the requirements side. It is about finding or envisioning the right software to make, rather than the right way to make it.