From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mp1 ([2001:41d0:2:4a6f::]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) by ms0.migadu.com with LMTPS id kOjlLWCncmCJ1gAAgWs5BA (envelope-from ) for ; Sun, 11 Apr 2021 09:38:08 +0200 Received: from aspmx1.migadu.com ([2001:41d0:2:4a6f::]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)) by mp1 with LMTPS id AJqdJ2CncmDfbwAAbx9fmQ (envelope-from ) for ; Sun, 11 Apr 2021 07:38:08 +0000 Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by aspmx1.migadu.com (Postfix) with ESMTPS id 27C2B23449 for ; Sun, 11 Apr 2021 09:38:08 +0200 (CEST) Received: from localhost ([::1]:54008 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1lVUfW-0001pg-SO for larch@yhetil.org; Sun, 11 Apr 2021 03:38:06 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:37750) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1lVUey-0001pZ-76 for guix-devel@gnu.org; Sun, 11 Apr 2021 03:37:32 -0400 Received: from mail-pj1-x102d.google.com ([2607:f8b0:4864:20::102d]:56199) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1lVUeo-0007d7-Uq for guix-devel@gnu.org; Sun, 11 Apr 2021 03:37:31 -0400 Received: by mail-pj1-x102d.google.com with SMTP id s14so145509pjl.5 for ; Sun, 11 Apr 2021 00:37:22 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:references:date:in-reply-to:message-id :user-agent:mime-version; bh=K23ZiKP10P25HMeQYNwliASSw26CpX47xfdWnadYCGI=; b=S/sImOPRLXJhh9nYRzKlGi4MgG/NaI28siu+ludWLxinBENXce3zsHlmXXuXTZx2rh kRW2hs1kqkSXWT5RHyDemKuNk3n/5M/zQYy0nFvPrMaTdrwAU/tFOiM0FID7XkFzFO/V XKpZCi3/uLCFkvQ+H/M58K7o4EkosFaxq0egedJErjAMrttUCYKVOYpXdO6Y3AVW3eYa sD9or1l5tFta2SVqbqPtD9XT9oMtPpJvWv7aUN69cIYl5xXeJJ8PNBQkiwHd+MkhzDsa vB069dDeTNBC5iv5uuFeqjDt4pZ8Dd+3XNsIksqUIWdqNES/0EFvMpBgRMjJLrlmWUgz dDaA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:references:date:in-reply-to :message-id:user-agent:mime-version; bh=K23ZiKP10P25HMeQYNwliASSw26CpX47xfdWnadYCGI=; b=dFBaBbqiaGVfcTJnwL0bkOF7MJ2rPa5FeK8fMYKhzoK9r8Uq5Ytjl7HXsxe4V4gqRE MMyXjH1YMMGJwHmS5SxjO6O38snMofJncHW/Ox+Ol0qy4GwaRBTtGxCsSrjGwM6lgitK EZCq2YzQ2Qy2ubHxeajxzL9orO7VzhCStrG5ZTq28+8pJhSz6ApV7KXGs/fF+Ai90Dnr VyOOQj+GrpkN45mAOuAcdWgCnrRTgIkawX+TvigM7mwgmfuzcx0ofvTiFswU1ECnZGXu rz+q3rc+p/7qvdqmHup3puURFiRKx5kQJRmIknZoysxmnUEBWJ3QkDmB3Yrp3TR1miWF nYVw== X-Gm-Message-State: AOAM531iRVDcDFnphOg7FlDLWyEp4zOdd2MKTTOWPcRWER5XdDqJnZu4 ciuYEz4iq0mIb6UkIfIGzT4/4gQCOHXZSQ== X-Google-Smtp-Source: ABdhPJxleIfG7gGanfQnTL1nQgnH/Tl0CQjqkdWARAY0//K3dmsZRYYP8gZT1cU7fzbTdweRewbN/w== X-Received: by 2002:a17:902:bc89:b029:e9:2cd7:382e with SMTP id bb9-20020a170902bc89b02900e92cd7382emr20312390plb.68.1618126641008; Sun, 11 Apr 2021 00:37:21 -0700 (PDT) Received: from garuda-lan (c-24-18-44-142.hsd1.wa.comcast.net. [24.18.44.142]) by smtp.gmail.com with ESMTPSA id g21sm7153169pjl.28.2021.04.11.00.37.19 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 11 Apr 2021 00:37:19 -0700 (PDT) From: Chris Marusich To: guix-devel@gnu.org Subject: Re: Please review blog post draft: powerpc64le-linux support References: <87a6qbc28m.fsf@gmail.com> Date: Sun, 11 Apr 2021 00:37:18 -0700 In-Reply-To: <87a6qbc28m.fsf@gmail.com> (Chris Marusich's message of "Tue, 06 Apr 2021 00:15:53 -0700") Message-ID: <87mtu5xoep.fsf@gmail.com> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/27.1 (gnu/linux) MIME-Version: 1.0 Content-Type: multipart/signed; boundary="==-=-="; micalg=pgp-sha256; protocol="application/pgp-signature" Received-SPF: pass client-ip=2607:f8b0:4864:20::102d; envelope-from=cmmarusich@gmail.com; helo=mail-pj1-x102d.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: guix-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list 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+larch=yhetil.org@gnu.org Sender: "Guix-devel" X-Migadu-Flow: FLOW_IN ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=yhetil.org; s=key1; t=1618126688; h=from:from:sender:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:mime-version:mime-version: content-type:content-type:in-reply-to:in-reply-to: references:references:list-id:list-help:list-unsubscribe: list-subscribe:list-post:dkim-signature; bh=K23ZiKP10P25HMeQYNwliASSw26CpX47xfdWnadYCGI=; b=D0MmefmWuikiNt1YQnaFr5DZ48Oy/AUkomVXwYEo6Q5pi7YuCYv3/MTMxZMYyFmhqPs+iW re6e9MSEyHVFmjOzvDV1cUymmBsLt2zNuxT69exI90mfLMzENkNUF/MqZwZpJZON+7FGzy 1j72otIoFjCZXO8ApEs2vVBSYJoEhul8C7vy00ckz/Msj0Raq3LKDtXU7uF54GXhNmQZ60 GkbfEDGw6hUhUCWhboGo0/qNw5TU+KbeUelnaIdStZKK/nG1JHI4kmMXb6LsbGykc7lTuB msrL9UQ2Rg6WsKYJNgYJWciD+1+XK2uzqIMhOosielp0ihO5FmPANMioPMFcdQ== ARC-Seal: i=1; s=key1; d=yhetil.org; t=1618126688; a=rsa-sha256; cv=none; b=PvD0CLsH6nb4Yo2B2ZBjP+Pj5ge+adrtmYbJhEgfj4XUyKgsWR3jeLxtxoCd4ydgWBYNSJ 0v0Sl/zoRLsDFvetlYQxO2kaDp0C2qCNHcUUxIr2K+P96l9HrG534hGLWAWpfRKdrV43kw JM76UtD/VIFARLbWlpf131alq3rvAn5LH+4k8BUTvIZt9GvXytoONocpw3UWoFGColTOX5 Xo3aLLZWxvpgZ+bqLNB9f9YZf1ZkhQLi3Iqq+P9pkBlBWZNAc2AjaorT+RR1ZcxoqbMyC2 s74dXrvJE0MYWs9mhMQdS4y+FgvGd/+RZQ43QtEXHvE3FAVzpdb85CiMVE6TvA== ARC-Authentication-Results: i=1; aspmx1.migadu.com; dkim=fail ("headers rsa verify failed") header.d=gmail.com header.s=20161025 header.b="S/sImOPR"; dmarc=fail reason="SPF not aligned (relaxed)" header.from=gmail.com (policy=none); spf=pass (aspmx1.migadu.com: domain of guix-devel-bounces@gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=guix-devel-bounces@gnu.org X-Migadu-Spam-Score: -3.44 Authentication-Results: aspmx1.migadu.com; dkim=fail ("headers rsa verify failed") header.d=gmail.com header.s=20161025 header.b="S/sImOPR"; dmarc=fail reason="SPF not aligned (relaxed)" header.from=gmail.com (policy=none); spf=pass (aspmx1.migadu.com: domain of guix-devel-bounces@gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=guix-devel-bounces@gnu.org X-Migadu-Queue-Id: 27C2B23449 X-Spam-Score: -3.44 X-Migadu-Scanner: scn0.migadu.com X-TUID: +r+G60xwJP0m --==-=-= Content-Type: multipart/mixed; boundary="=-=-=" --=-=-= Content-Type: text/plain Content-Transfer-Encoding: quoted-printable Hi, This is the final draft, I think. I intend to commit it to the "posts" directory in guix-artwork on Monday morning, USA time, at which point I believe it will automatically show up on the blog. Thank you again for your help, everyone! If you see any last-minute typos, please do let me know. =2D-=20 Chris --=-=-= Content-Type: text/x-patch; charset=utf-8 Content-Disposition: attachment; filename=0001-website-drafts-Add-powerpc64le-linux-announcement.patch Content-Transfer-Encoding: quoted-printable From=20e4300631958b75d996b9b57c595e74539da5f938 Mon Sep 17 00:00:00 2001 From: Chris Marusich Date: Tue, 6 Apr 2021 00:10:35 -0700 Subject: [PATCH] website: drafts: Add powerpc64le-linux announcement. * website/drafts/new-system-powerpc64le-linux.md: New file. =2D-- .../drafts/new-system-powerpc64le-linux.md | 405 ++++++++++++++++++ 1 file changed, 405 insertions(+) create mode 100644 website/drafts/new-system-powerpc64le-linux.md diff --git a/website/drafts/new-system-powerpc64le-linux.md b/website/draft= s/new-system-powerpc64le-linux.md new file mode 100644 index 0000000..18f3fc4 =2D-- /dev/null +++ b/website/drafts/new-system-powerpc64le-linux.md @@ -0,0 +1,405 @@ +title: New Supported Platform: powerpc64le-linux +date: 2021-04-12 00:00 +author: Chris Marusich and L=C3=A9o Le Bouter +tags: porting, powerpc64le, bootstrapping, cross-compilation, reproducibil= ity +--- + +It is a pleasure to announce that support for powerpc64le-linux +(PowerISA v.2.07 and later) has now been +[merged](https://issues.guix.gnu.org/47182) to the master branch of +GNU Guix! + +This means that GNU Guix can be used immediately on this platform +[from a Git +checkout](https://guix.gnu.org/manual/en/html_node/Building-from-Git.html). +Starting with the next release (Guix v1.2.1), you will also be able to +[download a copy of Guix pre-built for +powerpc64le-linux](https://guix.gnu.org/manual/en/html_node/Binary-Install= ation.html#Binary-Installation). +Regardless of how you get it, you can run the new powerpc64le-linux +port of GNU Guix on top of any existing powerpc64le GNU/Linux +distribution. + +This new platform is available as a "technology preview". This means +that although it is supported, +[substitutes](https://guix.gnu.org/manual/en/html_node/Substitutes.html) +are not yet available from the build farm, and some packages may fail +to build. Although powerpc64le-linux support is nascent, the Guix +community is actively working on improving it, and this is a great +time to [get +involved](https://guix.gnu.org/manual/en/html_node/Contributing.html)! + +### Why Is This Important? + +This is important because it means that GNU Guix now works on the +[Talos II, Talos II Lite, and Blackbird +mainboards](https://www.raptorcs.com/content/base/products.html) sold +by [Raptor Computing Systems](https://www.raptorcs.com/). This +modern, performant hardware uses [IBM +POWER9](https://wiki.raptorcs.com/wiki/POWER9) processors, and it is +designed to respect your freedom. The Talos II and Talos II Lite have +[recently received Respects Your Freedom (RYF) +certification](https://www.fsf.org/news/talos-ii-mainboard-and-talos-ii-li= te-mainboard-now-fsf-certified-to-respect-your-freedom) +from the FSF, and Raptor Computing Systems is currently pursuing RYF +certification for the more affordable Blackbird, too. All of this +hardware [can run without any non-free +code](https://wiki.raptorcs.com/wiki/Platform_Comparison), even the +bootloader and firmware. In other words, this is a freedom-friendly +hardware platform that aligns well with GNU Guix's commitment to +software freedom. + +How is this any different from existing RYF hardware, you might ask? +One reason is performance. The existing RYF +[laptops](https://ryf.fsf.org/products?category=3D1&vendor=3DAll&sort_by= =3Dcreated&sort_order=3DDESC), +[mainboards](https://ryf.fsf.org/products?category=3D5&vendor=3DAll&sort_b= y=3Dcreated&sort_order=3DDESC), +and +[workstations](https://ryf.fsf.org/products?category=3D30&vendor=3DAll&sor= t_by=3Dcreated&sort_order=3DDESC) +can only really be used with Intel Core Duo or AMD Opteron processors. +Those processors were released over 15 years ago. Since then, +processor performance has increased drastically. People should not +have to choose between performance and freedom, but for many years +that is exactly what we were forced to do. However, the POWER9 +machines sold by Raptor Computing Systems have changed this: the free +software community now has an RYF-certified option that [can compete +with the performance of modern Intel and AMD +systems](https://www.phoronix.com/scan.php?page=3Darticle&item=3Dpower9-th= readripper-core9&num=3D1). + +Although the performance of POWER9 processors is competitive with +modern Intel and AMD processors, the real advantage of the Talos II, +Talos II Lite, and Blackbird is that they were designed from the start +to respect your freedom. Modern processors from [both Intel and AMD +include back +doors](https://www.fsf.org/blogs/sysadmin/the-management-engine-an-attack-= on-computer-users-freedom) +over which you are given no control. Even though the back doors can +be removed [with significant effort on older hardware in some +cases](https://www.fsf.org/news/libreboot-x200-laptop-now-fsf-certified-to= -respect-your-freedom), +this is an obstacle that nobody should have to overcome just to +control their own computer. Many of the existing RYF-certified +options (e.g., the venerable Lenovo x200) use hardware that can only +be considered RYF-certified after someone has gone through the extra +effort of removing those back doors. No such obstacles exist when +using the Talos II, Talos II Lite, or Blackbird. In fact, although +[Intel](https://arstechnica.com/gadgets/2020/10/in-a-first-researchers-ext= ract-secret-key-used-to-encrypt-intel-cpu-code/) +and +[AMD](https://www.extremetech.com/computing/292722-amds-secure-processor-f= irmware-is-now-explorable-thanks-to-new-tool) +both go out of their way to keep you from understanding what is going +on in your own computer, Raptor Computing Systems releases [all of the +software and firmware used in their +boards](https://git.raptorcs.com/git/) as free software. They even +include circuit diagrams when they ship you the machine! + +Compared to the existing options, the Talos II, Talos II Lite, and +Blackbird are a breath of fresh air that the free software community +really deserves. Raptor Computing Systems' commitment to software +freedom and owner control is an inspiring reminder that it **is** +possible to ship a great product while still respecting the freedom of +your customers. And going forward, the future looks bright for the +open, royalty-free Power ISA stewarded by the OpenPOWER Foundation, +[which is now a Linux Foundation +project](https://www.linuxfoundation.org/press-release/2019/08/the-linux-f= oundation-announces-new-open-hardware-technologies-and-collaboration/) +(see also: [the same announcement from the OpenPOWER +Foundation](https://openpowerfoundation.org/the-next-step-in-the-openpower= -foundation-journey/). + +In the rest of this blog post, we will discuss the steps we took to +port Guix to powerpc64le-linux, the issues we encountered, and the +steps we can take going forward to further solidify support for this +exciting new platform. + +### Bootstrapping powerpc64le-linux: A Journey + +To build software, you need software. How can one port Guix to a +platform before support for that platform exists? This is a +[bootstrapping +problem](https://guix.gnu.org/manual/en/html_node/Bootstrapping.html). + +In Guix, all software for a given platform (e.g., powerpc64le-linux) +is built starting from a small set of "bootstrap binaries". These are +binaries of Guile, GCC, Binutils, libc, and a few other packages, +pre-built for the relevant platform. It is intended that the +bootstrap binaries are the only pieces of software in the entire +package collection that Guix cannot build from source. In practice, +[additional bootstrap roots are +possible](https://lists.gnu.org/archive/html/guix-devel/2015-02/msg00814.h= tml), +but introducing them in Guix is highly discouraged, and our community +[actively](https://guix.gnu.org/en/blog/2019/guix-reduces-bootstrap-seed-b= y-50/) +[works](https://guix.gnu.org/en/blog/2020/guix-further-reduces-bootstrap-s= eed-to-25/) +to [reduce](https://guix.gnu.org/en/blog/2018/bootstrapping-rust/) our +overall bootstrap footprint. There is one set of bootstrap binaries +for each platform that Guix supports. + +This means that to port Guix to a new platform, you must first build +the bootstrap binaries for that platform. In theory, you can do this +in many ways. For example, you might try to manually compile them on +an existing system. However, Guix has [package +definitions](https://git.savannah.gnu.org/cgit/guix.git/tree/gnu/packages/= make-bootstrap.scm?id=3D5d8c2c00d60196c46a32b68c618ccbe2b3aa48f4) +that you can use to build them - using Guix, of course! + +Commonly, the first step in [porting Guix to a new +platform](https://guix.gnu.org/manual/en/html_node/Porting.html) is to +use Guix to cross-compile the bootstrap binaries for that new platform +from a platform on which Guix is already supported. This can be done +by running a command like the following on a system where Guix is +already installed: + +```scheme +guix build --target=3Dpowerpc64le-linux-gnu bootstrap-tarballs +``` + +This is the route that we took when building the powerpc64le-linux +bootstrap binaries, as described in commit +[8a1118a](https://git.savannah.gnu.org/cgit/guix.git/commit/?id=3D8a1118a9= 6c9ae128302c3d435ae77cb3dd693aea). +You might wonder why the target above is "powerpc64le-linux-gnu" even +though the new Guix platform is called "powerpc64le-linux". This is +because "powerpc64le-linux-gnu" is a GNU +[triplet](https://wiki.osdev.org/Target_Triplet) identifying the new +platform, but "powerpc64le-linux" is the name of a "system" (i.e., a +platform) in Guix. Guix contains code that converts between the two +as needed (see `nix-system->gnu-triplet` and `gnu-triplet->nix-system` +in +[`guix/utils.scm`](https://git.savannah.gnu.org/cgit/guix.git/tree/guix/ut= ils.scm?id=3D83991a34d5c1d4985e54dd029a81412277ad062a). +When cross-compiling, you only need to specify the GNU triplet. + +Note that before you can even do this, you must first update the +`glibc-dynamic-linker` and `system->linux-architecture` procedures in +Guix's code, as described in +[Porting](https://guix.gnu.org/manual/en/html_node/Porting.html). In +addition, the versions of packages in Guix that make up the GNU +toolchain (gcc, glibc, etc.) must already support the target platform. +This pre-existing toolchain support needs to be good enough so that +Guix can (1) build, on some already-supported platform, a +cross-compilation toolchain for the target platform, (2) use, on the +already-supported platform, the cross-compilation toolchain to +cross-compile the bootstrap binaries for the target platform, and (3) +use, on the target platform, the bootstrap binaries to natively build +the rest of the Guix package collection. The above [`guix +build`](https://guix.gnu.org/manual/en/html_node/Invoking-guix-build.html#= Invoking-guix-build) +command takes care of steps (1) and (2) automatically. + +Step (3) is a little more involved. Once the bootstrap binaries for +the target platform have been built, they must be published online for +anyone to download. After that, Guix's code must be updated so that +(a) it recognizes the "system" name (e.g., "powerpc64le-linux") that +will be used to identify the new platform and (b) it fetches the new +platform's bootstrap binaries from the right location. After all that +is done, you just have to try building things and see what breaks. +For example, you can run `./pre-inst-env guix build hello` from your +Git checkout to try building GNU Hello. + +The actual bootstrap binaries for powerpc64le-linux are stored on the +[alpha.gnu.org FTP +server](https://alpha.gnu.org/gnu/guix/bootstrap/powerpc64le-linux/2021010= 6/). +Chris Marusich built these bootstrap binaries in an x86_64-linux Guix +System VM which was running on hardware owned by L=C3=A9o Le Bouter. Chris +then signed the binaries and provided them to Ludovic Court=C3=A8s, who in +turn verified their authenticity, signed them, and [uploaded them to +alpha.gnu.org](https://debbugs.gnu.org/cgi/bugreport.cgi?bug=3D41669#125). +After that, we updated the code to use the newly published bootstrap +binaries in commit +[8a1118a](https://git.savannah.gnu.org/cgit/guix.git/commit/?id=3D8a1118a9= 6c9ae128302c3d435ae77cb3dd693aea). +Once all that was done, we could begin bootstrapping the rest of the +system - or trying to, at least. + +There were many stumbling blocks. For example, to resolve some test +failures, we had to update the code in Guix that enables it to make +[certain](https://git.savannah.gnu.org/cgit/guix.git/commit/?id=3Db57de27d= 0331198c9cafb09a1cf8a5fa4f691e36) +[syscalls](https://git.savannah.gnu.org/cgit/guix.git/commit/?id=3Dc29bfbf= c78ccd9e5c10d38faf3d269eafed12854) +from scheme. In another example, we had to [patch GCC so that it +looks for the 64-bit libraries in +/lib](https://debbugs.gnu.org/cgi/bugreport.cgi?bug=3D46253), rather +than /lib64, since that is where Guix puts its 64-bit libraries by +convention. In addition, some packages required in order to build +Guix failed to build, so we had to debug those build failures, too. + +For a list of all the changes, see [the patch +series](https://debbugs.gnu.org/cgi/bugreport.cgi?bug=3D47182) or the +actual commits, which are: + +``` +$ git log --oneline --no-decorate 8a1118a96c9ae128302c3d435ae77cb3dd693aea= ..65c46e79e0495fe4d32f6f2725d7233fff10fd70 +65c46e79e04 gnu: sed: Make it build on SELinux-enabled kernels. +93f21e1a35e utils: Fix target-64bit? on powerpc64le-linux. +8d9aece8c49 ci: %cross-targets: Add powerpc64le-linux-gnu. +c29bfbfc78c syscalls: Fix RNDADDTOENTCNT on powerpc64le-linux. +b57de27d033 syscalls: Fix clone on powerpc64le-linux. +a16eb6c5f97 Add powerpc64le-linux as a supported Guix architecture. +b50f4268035 gnu: libelf: Fix compilation for powerpc64le-linux. +1a0f4013d33 gnu: texlive-latex-base: Fix compilation on powerpc64le*. +e9938dc8f0e gnu: texlive-bin: Fix compilation on powerpc64le*. +69b3907adf6 gnu: guile-avahi: Fix compilation on powerpc64le-linux. +4cc2d2aa599 gnu: bdb-4.8: Fix configure on powerpc64le-linux. +be4b1cf53bd gnu: binutils-final: Support more Power architectures. +060478c32c9 gnu: binutils-final: Provide bash for binary on powerpc-linux. +b2135b5d576 gnu: gcc-boot0: Enable 128-bit long double for POWER9. +6e98e9ca923 gnu: glibc: Fix ldd path on powerpc*. +cac88b28b83 gnu: gcc-4.7: On powerpc64le, fix /lib64 references. +fc7cf0c1ecc utils: Add target-powerpc? procedure. +``` + +In the end, through the combined efforts of multiple people, we slowly +worked through the issues until we reached a point where we could do +all of the following things successfully: + +- Build Guix manually on a [Debian GNU/Linux + ppc64el](https://wiki.debian.org/ppc64el) machine (this is Debian's + name for a system using the powerpc64le-linux-gnu triplet), and + verify that its `make check` tests passed. +- Build GNU Hello using Guix and run it. +- Run [`guix + pull`](https://guix.gnu.org/manual/en/html_node/Invoking-guix-pull.html#= Invoking-guix-pull) + to build and install the most recent version of Guix, with + powerpc64le-linux support. +- Build a release binary tarball for powerpc64le-linux via: `make + guix-binary.powerpc64le-linux.tar.xz` +- Use that binary to install a version of Guix that could build/run + GNU Hello and run `guix pull` successfully. + +This was an exciting moment! But there was still more work to be +done. + +Originally, we did this work on the +[wip-ppc64le](https://git.savannah.gnu.org/cgit/guix.git/log/?h=3Dwip-ppc6= 4le) +branch, with the intent of merging it into core-updates. By +convention, the "core-updates" branch in Guix is [where changes are +made if they cause too many +rebuilds](https://guix.gnu.org/manual/en/html_node/Submitting-Patches.html= ). +Since we were updating package definitions so deep in the dependency +graph of the package collection, we assumed it wouldn't be possible to +avoid rebuilding the world. For this reason, we had based the +wip-ppc64le branch on core-updates. + +However, Efraim Flashner proved us wrong! He created a separate +branch, wip-ppc64le-for-master, where he adjusted some of the +wip-ppc64le commits to avoid rebuilding the world on other platforms. +Thanks to his work, we were able to merge the changes directly to +master! This meant that we would be able to include it in the next +release (Guix v.1.2.1). + +In short, the initial porting work is done, and it is now possible for +anyone to easily try out Guix on this new platform. Because `guix +pull` works, too, it is also easy to iterate on what we have and work +towards improving support for the platform. It took a lot of +cooperation and effort to get this far, but there are multiple people +actively contributing to this port in the Guix community who want to +see it succeed. We hope you will join us in exploring the limits of +this exciting new freedom-friendly platform! + +### Other Porting Challenges + +Very early in the porting process, there were some other problems that +stymied our work. + +First, we actually thought we would try to port to powerpc64-linux +(big-endian). However, this did not prove to be any easier than the +little-endian port. In addition, other distributions (e.g., +[Debian](https://www.debian.org/ports/) and +[Fedora](https://fedoraproject.org/wiki/Architectures)) have recently +dropped their big-endian powerpc64 ports, so the little-endian variant +is more likely to be tested and supported in the community. For these +reasons, we decided to focus our efforts on the little-endian variant, +and so far we haven't looked back. + +In both the big-endian and little-endian case, we were saddened to +discover that the bootstrap binaries are not entirely reproducible. +This fact is documented in [bug +41669](https://debbugs.gnu.org/cgi/bugreport.cgi?bug=3D41669), along +with our extensive investigations. + +In short, if you build the bootstrap binaries on two separate machines +without using any substitutes, you will find that the derivation which +cross-compiles %gcc-static (the bootstrap GCC, version 5.5.0) produces +different output on the two systems. However, if you build +%gcc-static twice on the same system, it builds reproducibly. This +suggests that something in the transitive closure of inputs of +%gcc-static is perhaps contributing to its non-reproducibility. There +is an interesting graph [toward the end of the bug +report](https://debbugs.gnu.org/cgi/bugreport.cgi?bug=3D41669#137), +shown below: + +![Differing +Derivations](https://debbugs.gnu.org/cgi/bugreport.cgi?att=3D1;msg=3D137;f= ilename=3Dnonreproducible-drvs-small.png;bug=3D41669) + +This graph shows the derivations that produce differing outputs across +two Guix System machines, when everything is built without +substitutes. It starts from the derivation that cross-compiles +%gcc-static for powerpc64-linux-gnu (from x86_64-linux) using Guix at +commit 1ced8379c7641788fa607b19b7a66d18f045362b. Then, it walks the +graph of derivation inputs, recording only those derivations which +produce differing output on the two different machines. If the +non-reproducibility (across systems) of %gcc-static is caused by a +non-reproducible input, then it is probably caused by one or more of +the derivations shown in this graph. + +At some point, you have to cut your losses and move on. After months +of investigation without resolving the reproducibility issue, we +finally decided to move forward with the bootstrap binaries produced +earlier. If necessary, we can always go back and try to fix this +issue. However, it seemed more important to get started with the +bootstrapping work. + +Anyone who is interested in solving this problem is welcome to comment +on the bug report and help us to figure out the mystery. We are very +interested in solving it, but at the moment we are more focused on +building the rest of the Guix package collection on the +powerpc64le-linux platform using the existing bootstrap binaries. + +### Next Steps + +It is now possible to install Guix on a powerpc64le-linux system and +use it to build some useful software - in particular, Guix itself. So +Guix is now "self-hosted" on this platform, which gives us a +comfortable place to begin further work. + +The following tasks still need to be done. Anyone can help, so please +get in touch if you want to contribute! + +- Solve [the GCC bootstrap binary reproducibility + issue](https://debbugs.gnu.org/cgi/bugreport.cgi?bug=3D41669) + described above. +- Get [Guix + System](https://guix.gnu.org/manual/en/html_node/System-Installation.htm= l) + to work on powerpc64le-linux. +- Get CI infrastructure to work + ([Cuirass](https://guix.gnu.org/en/cuirass/) (see also: [Cuirass in + the Guix + manual](https://guix.gnu.org/manual/en/html_node/Continuous-Integration.= html), + [guix-build-coordinator](https://git.cbaines.net/guix/build-coordinator/) + (see also: [Guix Build Coordinator in the Guix + manual](https://guix.gnu.org/manual/en/html_node/Guix-Services.html), + [substitutes](https://guix.gnu.org/manual/en/html_node/Substitutes.html), + etc.) +- Try to build your favorite packages using Guix, [report + problems](https://guix.gnu.org/manual/en/html_node/Tracking-Bugs-and-Pat= ches.html), + [try to fix + them](https://guix.gnu.org/manual/en/html_node/Contributing.html), + and [ask for help](https://guix.gnu.org/en/help/) if you're feeling + stuck or not sure how to start. +- Try building rust, and if it works, judiciously re-introduce the + librsvg dependency for powerpc64le-linux in gtk+ and gtk+-2, since + [it is currently + missing](https://git.savannah.gnu.org/cgit/guix.git/commit/?id=3D5d2863d= fe4613d5091e61800fcd5a48922c8ce4e). +- Upgrade the default GCC to 8 on core-updates, try to build guix + (e.g., `./pre-inst-env guix build guix`), and report/fix whatever + issues occur. We want to upgrade GCC to 8 because, on the + core-updates branch, glibc has been upgraded from 2.31 to 2.32. + Unfortunately, on powerpc64le-linux, upgrading glibc from 2.31 to + 2.32 without also upgrading the default GCC (it's currently 7.5.0) + causes a lot of problems. Right now, we believe the best path + forward is probably just to upgrade to GCC 8 on core-updates. +- Merge core-updates to master after that. + +#### About GNU Guix + +[GNU Guix](https://guix.gnu.org) is a transactional package manager and +an advanced distribution of the GNU system that [respects user +freedom](https://www.gnu.org/distros/free-system-distribution-guidelines.h= tml). +Guix can be used on top of any system running the Hurd or the Linux +kernel, or it can be used as a standalone operating system distribution +for i686, x86_64, ARMv7, and AArch64 machines. + +In addition to standard package management features, Guix supports +transactional upgrades and roll-backs, unprivileged package management, +per-user profiles, and garbage collection. When used as a standalone +GNU/Linux distribution, Guix offers a declarative, stateless approach to +operating system configuration management. Guix is highly customizable +and hackable through [Guile](https://www.gnu.org/software/guile) +programming interfaces and extensions to the +[Scheme](http://schemers.org) language. =2D-=20 2.30.2 --=-=-=-- --==-=-= Content-Type: application/pgp-signature; name="signature.asc" -----BEGIN PGP SIGNATURE----- iQJJBAEBCAAzFiEEy/WXVcvn5+/vGD+x3UCaFdgiRp0FAmBypy4VHGNtbWFydXNp Y2hAZ21haWwuY29tAAoJEN1AmhXYIkadNQEP+wSBnn26ZHrzi9L9FRK/1t4APGmx we/nn2+7lcv08Xlt9vSEXStAYwbFLGnEaRtoOtpJ/GM+X9dXDsCZpDETHMZWBTCK z9S1PypYorJJRQ5wojAx58V2sphXJEMSM4O0wPXBUWpVZOM0p/GcOscuz6YMHBqE KpoBJljkQarhinPcOUe+kh+ji1rPkH1+O77IB1+nWTOOuwQDembEG4Ve1tXz4Ceg xqwFWQETSZ1hvM7OK86UxywOnmCd6zEWU8wJZB0uKKm8nkX/m49EZqhpv08WOU3r WEf6Znc9TBtwH9u30nG0Wbj4WVr1nRospzxEniEgmVcPoip8ktkubExFHm7EsSxM bt0OFDTGBAZFvZUFuYsq4a+VXET5Lo6D3NR+58Fox1Q0wSg4u7T3VEzX/ESIazI2 1PlyEw1b2YZAwvJQiM04PG3+tzr+r4FeGe//Rbm9FsZfbFsr4Hu3ex9RWzYWlCCK +/c1PC73tVKl21w5zE1oQg6BObGS2zxslO/JQtUB28Kez0R0vgkyaFtNOZLZCQN3 1p1yUd6S+YCUUV9r2ZaHelJhKeYAKqVAAN8eZsluryBUWOvn3cl7r3Dh1hFl+9pg EFcdEoVMNKaKBCu8h8CkEMMIhf3zjjg73D26otP0yQ5ym3hbiPllkvesEqC2uFBj oEQMjAPfaMLKOn3G =59y7 -----END PGP SIGNATURE----- --==-=-=--