From mboxrd@z Thu Jan 1 00:00:00 1970 From: ludo@gnu.org (Ludovic =?utf-8?Q?Court=C3=A8s?=) Subject: Re: Removing compilers that cannot be bootstrapped Date: Mon, 21 Mar 2016 23:48:40 +0100 Message-ID: <87twjz4fcn.fsf@gnu.org> References: 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]:40487) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1ai8cy-00009f-Ix for guix-devel@gnu.org; Mon, 21 Mar 2016 18:48:49 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1ai8ct-0007er-Oa for guix-devel@gnu.org; Mon, 21 Mar 2016 18:48:48 -0400 In-Reply-To: (David Thompson's message of "Mon, 21 Mar 2016 13:54:24 -0400") 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-bounces+gcggd-guix-devel=m.gmane.org@gnu.org To: "Thompson, David" Cc: guix-devel "Thompson, David" skribis: > Haskell, OCaml, Chicken, and other compilers that we package have a > serious issue that many of us are aware of: they cannot be built from > source! (And GCC, but let=E2=80=99s put it aside for now.) > They rely upon pre-built binaries of the same compiler. I understand > that it's very inconvenient to not have these compilers available to > us, and all of the software that is written in their respective > languages, but I feel like all of our work is undermined by making > exceptions for them. I would like to remove compilers that don't have > a bunch of dependent packages yet such as Chicken until upstream fixes > the issue. But we have tons of Haskell packages and a handful of > OCaml packages and it would be heartbreaking to some to remove all of > that hard work. I definitely sympathize with your concerns, and also in the case of whole-distro bootstrapping. However, removing things seems really harsh, and also sidestepping the problem (not to mention that once we=E2=80=99d done that, we couldn=E2=80= =99t ignore GCC=E2=80=99s bootstrapping.) taylanbayirli@gmail.com (Taylan Ulrich "Bay=C4=B1rl=C4=B1/Kammer") skribis: > A while back Mark raised the idea of hosting one pre-compiled bootstrap > version of each such compiler, and use that to compile further versions. > > This way the number of blobs is one per such compiler, instead of one > for every new version of each such compiler. > > It seemed like a good medium-term solution to me. I'm not sure how it > would be implemented. I like the idea. Often, in their implementation history, compilers are boostrapped from something else initially, and only later to they become self-hosted and unbootstrappable. So in theory, it=E2=80=99d be possible to find, say, an old-enough GHC that= only requires a C compiler (?), and use that to build the next version and so on, until we reach the latest version. I suspect the same applies to many compilers. This is technically possible. The main difficulty is to find what exact chain of compiler versions will work, and then to make sure that the super-old compilers can build. The risk, as Andreas suggests, is that maintaining those old versions will require dragging a whole graph of old dependencies, recursively. But really, we won=E2=80=99t know until we=E2=80=99ve actually tried ;-), a= nd it=E2=80=99ll be different for each compiler. I would suggest that people pick a compiler they=E2=80=99re more or less familiar with, and give it a try. MIT/GNU Scheme might be a good start, since we should be able to talk with the folks behind it and reach mutual understanding. ;-) For GCC, an idea discussed at would be to build GCC=C2=A04.7 (the last version written in plain C) with somethi= ng more auditable like TinyCC, and then use this g++=C2=A04.7 to build whatever GCC version we want. Again, sounds like it should work, but we need to actually try. Thoughts? BTW, the =E2=80=9Cgood news=E2=80=9D is that more and more compilers build = upon LLVM, and for those there=E2=80=99s no bootstrapping problem if we take the C++ compiler for granted. Ludo=E2=80=99.