Hello,
I thought I'd share this view since it could be a useful way to think
about the bootstrapping problem.
For a set of packages, you can consider the build inputs required to
compile each package. If we want to build everything in terms of one a
small set of core packages, then problem comes from "self-hosted"
packages whos output is required as an input.
If you only have one self-hosted package then it follows that everything
else is built by some chain that starts from that single core package.
What this means is that we just need to identify self-hosted packages
and provide an alternative way to build them in terms of "smaller"
packages. We don't need to carefully design a bootstrap path like
assembly -> forth -> lisp interpreter -> lisp compiler -> c compiler ->
... It will just fall in to place.
Along this line of reasoning I have started to collect data on language
implementations and which inputs they require:
* https://bootstrapping.miraheze.org/wiki/Descent_principle
* https://bootstrapping.miraheze.org/wiki/Build_Inputs
It would be useful to compile a list of the language implementations
which can be built without self hosting (a couple so far: amber, guile,
mes, the stage0 hex-assemblers). It's also important to consider the
tools used in the build process like ./configure.