Information Bootstrap: the way programs make themselves

Keith Farnsworth, May 2019

Software

The raw material for information is a set of differences and its elementary unit is a single binary difference (yes | no, or on | off, or true | false). We are used to this idea, since binary data is the raw material of digital computing. 

When someone says ‘software’ we probably think of the scripts (often termed 'code') written by people for computers to follow, be they a word-processor, a calculator, an ‘app’ on the smartphone, or the management system of a car engine or a washing machine. A script is a set of instructions that the computer ‘hardware’ follows or carries out. In all digital computers (your laptop, the engine management system in the car engine, etc.) the actions that can be performed and therefore the only valid instructions that can be followed, are acts of switching electrical connections on or off. That is all. It is a marvel of computer engineering that a sequence of switching connections on and off, and nothing more, can amount to a flight simulator, a video to watch, a diary, or the inner workings of a medical diagnostic scanner.  We now know the fundamental reason why this is true. All computation is information processing. By processing we mean taking bits of information and combining them, to make new information. By information, we mean, at the most atomistic level, binary differences: true and false, or on and off. Thus it is that information can always be represented by a set of on and off states: a binary sequence. By the same token, information processing can always be reduced to the  changing of those on and off states by reversing some of them. This is why digital computers are so powerful and have become so ubiquitous in modern life. The only limitation seems to be the ingenuity of the programmer to reduce a problem to a set of on-off sequences and workig out how changing these will  achieve the required outcome (the new information).


information pattern

To be clear, the software for digital computers is itself information: the set of instructions is itself a sequence of on and off. Given this, then it is perfectly reasonable to say that a program may itself be the result of information processing: that is a new set of instructions can be the output from following an earlier set. Further, it is also possible that the new set of instructions can be the ones followed by the same system as generated them. If that happens, then a process is set up, whereby the output of a computation is the program for a  computation, whose output is the program, perhaps modified to produce another modification of the program, which further modifies it and so on... Where will this end? The answer is that it will not end unless at some point, by design or accident, it produces a program that says stop!

Making oneself
When you start up your computer (e.g. smartphone) the first thing it does is 'boot up'. This term dates back to the early years of computing and it was explicitly illustrated it in the computers of the 1970s. I remember one which occupied an equipment rack two metres tall, and along its front was a row of toggle (on/off) switches. These were set to make a binary sequence (e.g. 100111010101) that was a very small amount of information, but it was enough to provide an electronic instruction that combined with a permanently stored small piece of information could start the most basic elements of the operating system in software, which in turn unwrapped more complex and information-rich algorithms and slowly the whole software of the operating system emerged. This was called boot-strapping (a reference to the apparent paradox of lifting oneself up by the bootstraps). It is a form of self-assembly: not of material patterns (as in molecular self assembly), but of pure information.

Now, to this program that modifies itself we have to add something else. A stream of information from the environment, such as temperature data from a sensor, or images from a camera could enter the computer running the program in such a way that the modifications of its program depend on the incoming data. The result will be that the computer program running on this computer will not be fixed, but instead will depend on the information it receives from the environment. We tend to think of a program as a rigid set of rules that cannot change: now we see that the rules can change and even that the rules themselves can respond to the external environment. What the computer does is then not what the programmer wrote in code in the first place, it does something that is the result of its adaptation to its own  environment.

Such self-rewriting programs can be contrived by computer scientists, but do they exist for real? The answer to this question lies in all of us. Indeed it lies in all living things, because this adaptation of a program is an essential feature of life itself.





  • Back to Philosophy Theme