From mboxrd@z Thu Jan 1 00:00:00 1970 From: Ricardo Wurmus Subject: Re: bootstrap: i686-linux now builds without binutils, gcc seeds Date: Mon, 17 Sep 2018 23:55:02 +0200 Message-ID: <87pnxb4wnd.fsf@elephly.net> References: <87h8jats4r.fsf@gnu.org> <87k1nlfdp7.fsf@gnu.org> <8736u752k6.fsf@gnu.org> Mime-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable Return-path: Received: from eggs.gnu.org ([2001:4830:134:3::10]:53703) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1g21UR-0005Bm-O8 for guix-devel@gnu.org; Mon, 17 Sep 2018 17:55:32 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1g21UQ-0003l8-Lm for guix-devel@gnu.org; Mon, 17 Sep 2018 17:55:31 -0400 In-reply-to: <8736u752k6.fsf@gnu.org> List-Id: "Development of GNU Guix and the GNU System distribution." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: guix-devel-bounces+gcggd-guix-devel=m.gmane.org@gnu.org Sender: "Guix-devel" To: Jan Nieuwenhuizen Cc: guix-devel@gnu.org Hi janneke! > I have added this text to wip-bootstrap, image not shown inline here, > WDYT? [=E2=80=A6] > +@node Reduced Binary Seed Bootstrap > +@section The Reduced Binary Seed Bootstrap > + > +Guix---like other GNU/Linux distributions---is traditionally bootstrappe= d from > +from a set of bootstrap binaries: Bourne shell, command-line tools provi= ded by ^=E2=80=94 this is an extra =E2=80=9Cfrom=E2=80=9D. > +GNU Coreutils, Awk, Findutils, `sed', and `grep' and Guile, GCC, Binutil= s, and > +the GNU C Library (@pxref{Bootstrapping}). Usually, these bootstrap-bin= aries =E2=80=9Cbootstrap binaries=E2=80=9D > +are ``taken for granted.'' > + > +What does this mean, really? By taking these binaries for granted, trus= ting > +Guix depends on the trusting these binaries to be correct and clean. Th= erein How about this instead of the second sentence: =E2=80=9CTaking these binaries for granted means that we consider them to b= e a correct and trustworthy =E2=80=98seed=E2=80=99 for building the complete sy= stem.=E2=80=9D > +lies a problem: the current combined size of these bootstrap-binaries is= about =E2=80=9Cbootstrap binaries=E2=80=9D > +250MB (@pxref{Bootstrappable Builds,,, mes, Mes Reference Manual}). Aud= iting > +or even inspecting these is next to impossible. > + > +For @code{i686-linux}, Guix now features a ``Reduced Binary Seed'' boots= trap > +@footnote{We would like to say: ``Full Source Bootstrap'' and while we a= re > +working towards that it would be a hyperbole to use that term for what w= e do > +now.}. =E2=80=9Cwould be hyperbole=E2=80=9D (no =E2=80=9Ca=E2=80=9D) > +The Reduced Binary Seed bootstrap removes the most critical tools---from= a > +trust perspective---from the bootstrap binaries: GCC, Binutils and the G= NU C > +Library are replaced by: @code{mescc-tools-seed} (a tiny assembler and l= inker) > +@code{mes-seed} (a small Scheme Interpreter and a C compiler writen in S= cheme) > +and @code{tinycc-seed} (the Mes C Library, built for TinyCC). Using the= se new > +binary seeds and a new set of > +@c > +package descriptions@footnote{@c I=E2=80=99d remove =E2=80=9Cdescriptions=E2=80=9D. > +mescc-tools-boot, > +nyacc-boot, > +mes-boot, > +tcc-boot0, > +tcc-boot, > +make-mesboot0, > +diffutils-mesboot, > +binutils-mesboot0, > +gcc-core-mesboot, > +mesboot-headers, > +glibc-mesboot0, > +gcc-mesboot0, > +binutils-mesboot, > +make-mesboot, > +gcc-mesboot1, > +gcc-mesboot1-wrapper, > +glibc-headers-mesboot, > +glibc-mesboot, > +gcc-mesboot, + =E2=80=9Cand=E2=80=9D > +gcc-mesboot-wrapper. > +} > +@c > +the ``missing'' Binutils, and the GNU C Library are built, from source. = From =E2=80=9C, from source=E2=80=9D =E2=80=93> =E2=80=9C from source=E2=80=9D. > +here on the more traditional bootstrap process resumes. This approach h= as > +reduced the bootstrap binaries in size to about 130MB. Work is ongoing = to > +reduce this further. If you are interested, join us on @code{#boottrapp= able} typo: #bootstrappable > +on the Freenode IRC network. > + > +@c ./pre-inst-env guix graph --type=3Dbag -e '(begin (use-modules (guix = packages)) (%current-system "i686-linux") (@@ (gnu packages commencement) g= cc-mesboot))' > doc/images/gcc-mesboot-bag-graph.dot > +@c dot -T png doc/images/gcc-mesboot-bag-graph.dot > doc/images/gcc-mesb= oot-bag-graph.png > + > +Below is the generated dependency graph to for @code{gcc-mesboot} that b= uilds > +the rest of GuixSD. =E2=80=9Cto for=E2=80=9D =E2=80=93> =E2=80=9Cfor=E2=80=9D How about this: Below is the generated dependency graph for @code{gcc-mesboot}, the bootstrap compiler used to build the rest of GuixSD. >> =E2=80=A2 I think all the =E2=80=9Cmesboot=E2=80=9D & co. packages in = commencement.scam can be >> made private=E2=80=93i.e., changing =E2=80=98define-public=E2=80=99 = to =E2=80=98define=E2=80=99. > > I agree; I kept gcc-mesboot (the final gcc) public, is that OK? If it isn=E2=80=99t referenced by other modules and would not be installed = by users I think it doesn=E2=80=99t need to be public, but I think either way = is fine. Thanks! -- Ricardo