On 2025-09-03 22:03, Stefan wrote:
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>


We (stikonas and I) reached a similar conclusion when working on RISC-V for live-bootstrap. Musl is way simpler and it's easy to compile.

The main issue it has is it doesn't support the Hurd, and porting it to the Hurd is not obvious. It's a shame, but I think the move to Musl at least for the bootstrapping is the best we can do right now, specially on RISC-V.

Cheers,
Ekaitz

Reply via email to