The term derives from the phrase to pull oneself up by one's bootstraps
At one time this had a very specific meaning wrt computers:
- Normally the OperatingSystem was used to run any program you wanted off the non-volatile media.
- The OperatingSystem itself is a program stored on that non-volatile media.
If only the OperatingSystem
were in RAM, it would be easy to tell it to load and run the OperatingSystem
into memory and run it. But if the OperatingSystem
were already in RAM and running, then we wouldn't need to load and run it.
Originally people entered a (a "loader"?) program: 16 or so (?) instructions by hand, in binary, using switches, that were barely enough to load the OperatingSystem
off the first track of the disk and start running it.
- The number of instructions required depended very much on the cpu architecture; on some systems it was as few as three. The boot loader needed to loop, copying bytes or words from an input device to a location in memory, and then jump to the start of what had been loaded. The complexity of talking to the input device perhaps varied the most, but the other instructions of a loop vary a lot from one cpu to another as well.
Later those 16 or so instructions were stored in ReadOnlyMemory
, and people eventually threw in a few more utility routines into that ROM that became the BIOS ROM (BasicInputOutputSystem?
To load the loader, you needed a three instruction program. You would enter those instructions by hand in binary using switches and press the run button. The computer would load the loader, then the loader would load the OperatingSystem
and you were off.
The term "boot", as in to boot or reboot a computer, comes from bootstrap.
The other common usage of the term bootstrap is in describing the generating of a new compiler; the www.foldoc.org definition is terse (the quote from Foldoc is all in bold now, since there was ambiguity previously as to which part was quoted):
2. <compiler> (From "to pull oneself up by one's bootstraps") to use a compiler to compile itself.
The term also applies to the use of a compiler to compile itself. The usual process is to write an interpreter for a language, L, in an existing language, M. The compiler is then written in L and the interpreter is used to run it. This produces an executable for compiling programs in L from the source of the compiler in L.
This technique is often used to verify the correctness of a compiler. It was first used in the LISP community.
However the term "bootstrap" can apply to similar processes regardless of whether interpreters-only, compilers-only, or a mix, are used.
The widely used "rc" in Unix startup files such as .cshrc, .tcshrc, .bashrc, .exrc, .wgetrc, .xtalkrc, etc (a convention which began at Bell Labs in the 1970s, BTW), is often thought to abbreviate "Reboot Commands", but this was definitively refuted in the early 1980s; the "rc" stands for simply "Run Commands", a term which may have Multics roots; I've forgotten that part of the history.
I thought it meant "run control".
I'm using "Bootstrapping" to refer to coding similar to TestDrivenDevelopment
that one must do before one can figure out how to test anything relevant. TDD
calls this a LearnerTest?
. -- PhlIp
Yes - contrary to the narrower older definitions on Foldoc, for a long time "bootstrap" has been generalized to mean "to bring up new code/a project for the first time", although there are inherent connotations of ChickenAndEggProblem in such usages; it would be a mis-use to say "bootstrapping" in reference to something that is trivial to start up. For instance, one most definitely does not "bootstrap" when one starts a directory listing with command line "ls" or "dir". The "which came first, the chicken or the egg" paradox is at the heart of the meaning of "bootstrap" in all its usages. -- dm