Bootstrap
A term for the issue of, or for a specific technique for, bringing a system in a desired state by means of a (simple, rough, ad-hoc) subsystem which can perform the task with no external aid, and which is usually discarded as the global desired state has been reached.The most typical example of bootstrapping is about loading in memory the program loader of a conventional operating system. As the program loader cannot load itself (if it is not in memory it cannot run, if it is in memory it has no need to load itself as it already is arrived at its destination) a much simpler special-purpose loader hardcoded in memory is used. This loader brings, perhaps in more than one stage, the program loader in memory. Once loaded and executed, the program loader can load in memory any part of the operating system not already loaded by the bootstrap loader, which is no longer used.
Another example comes from compilers. Writing a compiler for a Turing-complete programming language L
in the same language L
has an advantage. If a new version x + 1
of the compiler becomes available, it can be compiled with its previous version x
a first time, and then the result can be used to compile it again. The resulting version x + 1
compiler for L
has the very desirable property that its features does not depend on those of the version x
compiler used to bootstrap its compilation. This two-step procedure is also used to build the version 0
compiler by means of a compiler for L
written in some other language, say L
, for which we have a third party compiler. As before, the features of the version 0
compiler do not depend neither on those of the third party L
compiler, nor on those of the bootstrap compiler for L
, given that both are semantically correct.
A third example is about learning a new (natural) language, a task which is usually performed first by using your mothertongue, until you know enough of the language to learn directly in it. The mothertongue must therefore be used as a bootstrap language, an issue which is closely related to that of establishing a common ontological committment (see the voice ontology).
The expression seemingly derives from "pulling yourself up by your own bootstraps", an expression meaning to leverage yourself to success from a small begin, at least according to whatis.com.
- Andrew W. Appel, Axiomatic Bootstrapping: A Guide for Compiler Hackers, ACM Trans. on Prog. Lang. and Systems 16(6) 1699-1718, November 1994.
AbstractThe Standard ML of New Jersey compiler is written in Standard ML. Thus, SML/NJ can compile itself. This should be simple and obvious. There are some complications. The compiler produces binary files that contain both {it executable code} and {it static environments} (mapping identifiers to structures, signatures, and types). Normal binary files are intended to be loaded into a running SML/NJ system, where the static environment enhances the environment already available in that system, and the code is loaded and run. Some new version of the compiler may make different assumptions about the format of static environments, and its executing code may not be compatible with the existing interactive system. Thus, there can be a severe ``bootstrap'' problem: how can the old version of the compiler compile and bootstrap the new version? Here I attempt an axiomatic clarification of the bootstrapping technique. This should be useful to implementors of any self-applicable compiler with nontrivial object-file and runtime-system compatibility problems.
- Personal Secure Booting.
- A Secure and Reliable Bootstrap Architecture.
Some refernces at ResearchIndex
This page is linked from: Java Kurt Gödel Non-Well-Founded Ontology Open Firmware