Why Bootstrap?

Almost all programs depend on the existence of external shared libraries for much of their functionality. Some programs require only a few libraries while other programs need several. Building a complete system from source can be tricky, because there will be problems with any program linked to libraries that are either missing or the wrong version. A GNU/Linux system has many libraries and trying to match all of the versions between the development system and the target system can be a headache. To work around this problem, the system packages are divided into two groups, those with simple library dependencies and those with more complex dependencies.

Simple Library Requirements

Stage one packages have the simplest library requirements. These are either statically-linked binaries or binaries that link only to libraries that are part of the glibc package. Stage one packages can be built on the development system without worrying about whether or not they will function properly on the target system. As long as the target system has a version of glibc similar to the development system, everything should be fine.

Complex Library Requirements

The packages with complex library dependencies are grouped together in stage three. (Note: Stage two has not been forgotten, it's discussed in the next section.) Binaries in the stage three packages depend on libraries outside of the glibc package and include one or more of the following:

These packages will all be built on the target system. This ensures that they will be linked to the very same libraries that they will use at run-time.

Additional Libraries

All of the additional libraries required to build the stage three packages are built in stage two. These libraries include gettext for internationalization, ncurses for screen control, readline for command-line editing functions and zlib for compression. The C++ libraries are part of the gcc package and do not need to be installed separately.