Descent principle

= Descent principle =

Context

 * The goal is to remove the dependency on precompiled binaries, or at least build everything in terms of some small core.
 * Each package has a set of **inputs** required to build it. (for example many projects require 'make' and 'gcc' and binutils 'ld').
 * If one of these inputs (directly or indirectly) is the output of building the project itself, then the package is **self-hosted**. (For example gcc is usually built using gcc)

Descent principle
In a set of packages, if there is only one self hosted package then you can trace the build process of any other package back down to that core.

Program

 * Identify self hosted packages.
 * Break their loop by creating a new set of inputs able to build them that is "smaller" and not self-hosted.

This can be done in parallel, there is no need to coordinate a specific bootstrap path. It will simply exist if each package can be built in terms of smaller parts.