Hi Ludo’!
Out of curiosity, how does musl help on the path? I’m guessing the fact
that it doesn’t used nested functions (from GNU C) makes it more
amenable to compilation with a simpler compiler, but maybe there’s
something else?
I took inspiration by the live-bootstap project, it seemed easier to use musl.
And compare the dependencies of musl and glibc.
musl¹
(native-inputs (inputs-with-shell GASH-bootstrap
MAKE-MES-bootstrap
GASH-UTILS-bootstrap
BOOTAR-bootstrap))
glibc²
(native-inputs (inputs-with-shell BASH-bootstrap
GZIP-bootstrap
GREP-bootstrap
GAWK-bootstrap
PYTHON-bootstrap
GCC-15-bootstrap
TAR-bootstrap
BINUTILS-bootstrap
BISON-bootstrap
GETCONF-bootstrap
COREUTILS-bootstrap
SED-bootstrap
MAKE-bootstrap))
and $LINUX-HEADERS-bootstrap
True, some tools may be replaceable, like tar and gzip with Bootar and
Gash-Utils. But already sed from Gash-Utils is not sufficient, neither awk.
And Python is a real blocker, static builds seem not to be supported anymore in
3.13.7. All these dependencies need a C library (even dynamic linking) and the
one from Mes is really limited.
Make still builds with Mes, but I remember that I ran into issues related to
stubs in the Mes C library with some next package – I think it was bash.
It doesn't seem meaningful to me to travel back in time for every package,
looking for an old version, which may still build with the Mes C library. Any
such old package could force the next package in the chain to be downgraded as
well, just because of missing functionality. That could become kind of a
downgrade loop, increasing the total number of packages. And any problem on
the way could be related to too old package versions with a missing
functionality or a bug – recursively down the chain to a stub or bug in the Mes
C library.
I'm convinced that a mature C library with least possible dependencies is the
key for a short bootstrap chain.
So no, the nested functions haven’t even had a chance to become an obstacle.
By the way, there is one such downgrade case³: GCC 4 (newer versions require a
C++ compiler) produces object files, which let ld of Binutils 2.43 crash. So
because of GCC 4, Binutils is downgraded to 2.42. (Hm, that's already a while
ago, I should recheck this with 2.45.)
Bye
Stefan
¹
<https://git.pub.solar/stefan/embedded-channel/src/commit/597fcbec2332c7b1f9a568ba4ccf53a12384d8ac/gcc-bootstrap.scm#L2713>
²
<https://git.pub.solar/stefan/embedded-channel/src/commit/597fcbec2332c7b1f9a568ba4ccf53a12384d8ac/gcc-bootstrap.scm#L5513>
³
<https://git.pub.solar/stefan/embedded-channel/src/commit/597fcbec2332c7b1f9a568ba4ccf53a12384d8ac/gcc-bootstrap.scm#L3533>