GNU bug report logs - #75458
(guix platforms) & co. can end up loading incompatible modules

Please note: This is a static page, with minimal formatting, updated once a day.
Click here to see this page with the latest information and nicer formatting.

Package: guix; Reported by: Ludovic Courtès <ludovic.courtes@HIDDEN>; dated Thu, 9 Jan 2025 11:02:02 UTC; Maintainer for guix is bug-guix@HIDDEN.

Message received at submit <at> debbugs.gnu.org:


Received: (at submit) by debbugs.gnu.org; 9 Jan 2025 11:01:34 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Thu Jan 09 06:01:33 2025
Received: from localhost ([127.0.0.1]:50596 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1tVqI9-0000Vy-Ad
	for submit <at> debbugs.gnu.org; Thu, 09 Jan 2025 06:01:33 -0500
Received: from lists.gnu.org ([2001:470:142::17]:41742)
 by debbugs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.84_2) (envelope-from <ludovic.courtes@HIDDEN>)
 id 1tVqI7-0000Vc-Fc
 for submit <at> debbugs.gnu.org; Thu, 09 Jan 2025 06:01:32 -0500
Received: from eggs.gnu.org ([2001:470:142:3::10])
 by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.90_1) (envelope-from <ludovic.courtes@HIDDEN>)
 id 1tVqHx-0003er-V0
 for bug-guix@HIDDEN; Thu, 09 Jan 2025 06:01:22 -0500
Received: from mail3-relais-sop.national.inria.fr ([192.134.164.104])
 by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.90_1) (envelope-from <ludovic.courtes@HIDDEN>)
 id 1tVqHu-0000nu-Pg
 for bug-guix@HIDDEN; Thu, 09 Jan 2025 06:01:21 -0500
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=inria.fr; s=dc;
 h=from:to:subject:date:message-id:mime-version;
 bh=tnMDhT64X0AXnjPouPFWbqKqufGPj8slXyzDmdHfVsU=;
 b=pe2B5qc5TpqpudLvdMXTcFrwqunDmCot7SFGbax+bhssvmTfjnrRcwyA
 XeviTCvi4qZkWmITB3LQnwEATxbHLhZvwQa2uwvnU5kdPy5V0mwFJAMgS
 iMu7NTEKpWwAA1Ma+uYoX97rol6Jqx82huahMf7naxwkl1B2i/9SwmcVv k=;
Authentication-Results: mail3-relais-sop.national.inria.fr;
 dkim=none (message not signed) header.i=none;
 spf=SoftFail smtp.mailfrom=ludovic.courtes@HIDDEN;
 dmarc=fail (p=none dis=none) d=inria.fr
X-IronPort-AV: E=Sophos;i="6.12,301,1728943200"; d="scan'208";a="105892765"
Received: from 91-160-117-201.subs.proxad.net (HELO ribbon) ([91.160.117.201])
 by mail3-relais-sop.national.inria.fr with
 ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 09 Jan 2025 12:01:13 +0100
From: =?utf-8?Q?Ludovic_Court=C3=A8s?= <ludovic.courtes@HIDDEN>
To: bug-guix@HIDDEN
Subject: (guix platforms) & co. can end up loading incompatible modules
X-Debbugs-Cc: Florent Pruvost <florent.pruvost@HIDDEN>, "Romain GARBAGE"
 <romain.garbage@HIDDEN>
X-URL: http://www.fdn.fr/~lcourtes/
X-Revolutionary-Date: =?utf-8?Q?D=C3=A9cadi?= 20 =?utf-8?Q?Niv=C3=B4se?= an
 233 de la =?utf-8?Q?R=C3=A9volution=2C?= jour du Van
X-PGP-Key-ID: 0x090B11993D9AEBB5
X-PGP-Key: http://www.fdn.fr/~lcourtes/ludovic.asc
X-PGP-Fingerprint: 3CE4 6455 8A84 FDC6 9DB4  0CFB 090B 1199 3D9A EBB5
X-OS: x86_64-pc-linux-gnu
Date: Thu, 09 Jan 2025 12:01:12 +0100
Message-ID: <871pxcs13b.fsf@HIDDEN>
User-Agent: Gnus/5.13 (Gnus v5.13)
MIME-Version: 1.0
Content-Type: multipart/mixed; boundary="=-=-="
Received-SPF: pass client-ip=192.134.164.104;
 envelope-from=ludovic.courtes@HIDDEN;
 helo=mail3-relais-sop.national.inria.fr
X-Spam_score_int: -43
X-Spam_score: -4.4
X-Spam_bar: ----
X-Spam_report: (-4.4 / 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,
 RCVD_IN_DNSWL_MED=-2.3, RCVD_IN_MSPIKE_H3=0.001, RCVD_IN_MSPIKE_WL=0.001,
 RCVD_IN_VALIDITY_RPBL_BLOCKED=0.001, RCVD_IN_VALIDITY_SAFE_BLOCKED=0.001,
 SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no
X-Spam_action: no action
X-Spam-Score: 0.0 (/)
X-Debbugs-Envelope-To: submit
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -1.0 (-)

--=-=-=
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable

Hello,

A colleague reported this weird =E2=80=9Cunbound variable=E2=80=9D error me=
ssage, which
is ignored in this case but can be fatal in other cases (see below):

--8<---------------cut here---------------start------------->8---
$ guix time-machine -C /tmp/channels.scm -- shell emacs-elementaryx-ox-publ=
ish-as-default bash-minimal -n
error: #{ %make-platform-procedure/abi-check}#: unbound variable
hint: Did you forget a `use-modules' form?

14.4 MB would be downloaded
$ cat /tmp/channels.scm=20
(list (channel
        (name 'guix)
        (url "https://git.savannah.gnu.org/git/guix.git")
        (branch "master")
        (commit
          "5a95cf76e1d0f9fdff5b232b42337c657b76d1d4")
        (introduction
          (make-channel-introduction
            "9edb3f66fd807b096b48283debdcddccfea34bad"
            (openpgp-fingerprint
              "BBB0 2DDF 2CEA F6A8 0D1D  E643 A2A0 6DF2 A33A 54FA"))))
      (channel
        (name 'guix-hpc)
        (url "https://gitlab.inria.fr/guix-hpc/guix-hpc.git")
        (branch "master")
        (commit
          "b7608db6ecff32e2569ed8407d62ac1485e2856a")))
--8<---------------cut here---------------end--------------->8---

The crux of the problem is that =E2=80=98platforms=E2=80=99 happily browses=
 any
=E2=80=98guix/platforms=E2=80=99 it finds in the load path; in my case, aft=
er looking
for guix/platforms modules in this specific Guix instance, it goes on to
browse ~/.guix-home/profile/=E2=80=A6 and /run/current-system/profile/=E2=
=80=A6, both of
which being on GUILE_LOAD_PATH.  The modules it finds there, in this
case, are not ABI-compatible with those of the Guix instance, hence the
error message.

Reduced case:

--8<---------------cut here---------------start------------->8---
$ guix time-machine -C /tmp/channels.scm -- repl -q
GNU Guile 3.0.9
Copyright (C) 1995-2023 Free Software Foundation, Inc.

Guile comes with ABSOLUTELY NO WARRANTY; for details type `,show w'.
This program is free software, and you are welcome to redistribute it
under certain conditions; type `,show c' for details.

Enter `,help' for help.
scheme@(guix-user)> ,use(guix platform)
scheme@(guix-user)> (platform-modules)
error: #{ %make-platform-procedure/abi-check}#: unbound variable
hint: Did you forget a `use-modules' form?

$1 =3D (#<interface (guix platforms arm) 7f2929e0c8c0> #<interface (guix pl=
atforms avr) 7f2929e0c640> #<interface (guix platforms mips) 7f2929e0c3c0> =
#<interface (guix platforms or1k) 7f2929e0c140> #<interface (guix platforms=
 powerpc) 7f2929ebde60> #<interface (guix platforms riscv) 7f2929ebdbe0> #<=
interface (guix platforms x86) 7f2929ebd960> #<interface (guix platforms ar=
m) 7f2929e0c8c0> #<interface (guix platforms avr) 7f2929e0c640> #<interface=
 (guix platforms mips) 7f2929e0c3c0> #<interface (guix platforms or1k) 7f29=
29e0c140> #<interface (guix platforms powerpc) 7f2929ebde60> #<interface (g=
uix platforms riscv) 7f2929ebdbe0> #<interface (guix platforms x86) 7f2929e=
bd960>)
scheme@(guix-user)> %load-path
$2 =3D ("/gnu/store/n9xy5r1a0njyn8ml33p4mm8rxfn93drb-guix-module-union/shar=
e/guile/site/3.0" "/gnu/store/1gd9nsy4cps8fnrd1avkc9l01l7ywiai-guile-3.0.9/=
share/guile/3.0" "/gnu/store/1gd9nsy4cps8fnrd1avkc9l01l7ywiai-guile-3.0.9/s=
hare/guile/3.0" "/gnu/store/1gd9nsy4cps8fnrd1avkc9l01l7ywiai-guile-3.0.9/sh=
are/guile/site/3.0" "/gnu/store/1gd9nsy4cps8fnrd1avkc9l01l7ywiai-guile-3.0.=
9/share/guile/site" "/gnu/store/1gd9nsy4cps8fnrd1avkc9l01l7ywiai-guile-3.0.=
9/share/guile" "/home/ludo/.guix-home/profile/share/guile/site/3.0" "/home/=
ludo/.guix-home/profile/share/guile/site/3.0" "/run/current-system/profile/=
share/guile/site/3.0")
--8<---------------cut here---------------end--------------->8---

The same problem exists in:

  =E2=80=A2 =E2=80=98image-modules=E2=80=99 in (gnu system images);

  =E2=80=A2 =E2=80=98build-system-modules=E2=80=99 in (guix import utils);

  =E2=80=A2 =E2=80=98importer-modules=E2=80=99 in (guix upstream);

  =E2=80=A2 =E2=80=98bootloader-modules=E2=80=99 in (gnu bootloader).

One radical way to fix it would be to not use anything outside the
module union:


--=-=-=
Content-Type: text/x-patch
Content-Disposition: inline

diff --git a/guix/self.scm b/guix/self.scm
index 2652688c71..85fa3e1467 100644
--- a/guix/self.scm
+++ b/guix/self.scm
@@ -620,22 +620,20 @@ (define* (guix-command modules
                     (set! %load-extensions '(".scm"))
 
                     (set! %load-path
-                      (append (list (string-append #$module-directory
-                                                   "/share/guile/site/"
-                                                   (effective-version))
-                                    (string-append #$guile "/share/guile/"
-                                                   (effective-version)))
-                              %load-path))
+                          (list (string-append #$module-directory
+                                               "/share/guile/site/"
+                                               (effective-version))
+                                (string-append #$guile "/share/guile/"
+                                               (effective-version))))
 
                     (set! %load-compiled-path
-                      (append (list (string-append #$module-directory
-                                                   "/lib/guile/"
-                                                   (effective-version)
-                                                   "/site-ccache")
-                                    (string-append #$guile "/lib/guile/"
-                                                   (effective-version)
-                                                   "/ccache"))
-                              %load-compiled-path))
+                          (list (string-append #$module-directory
+                                               "/lib/guile/"
+                                               (effective-version)
+                                               "/site-ccache")
+                                (string-append #$guile "/lib/guile/"
+                                               (effective-version)
+                                               "/ccache")))
 
                     ;; To maximize the chances that locales are set up right
                     ;; out-of-the-box, bundle "common" UTF-8 locales.

--=-=-=
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable


That would make it impossible to use external Guile libraries from =E2=80=
=98guix
repl=E2=80=99, for example.

Another solution would be for all the =E2=80=98all-modules=E2=80=99 call si=
tes to limit
their search to (current-profile).  Probably better.

Thoughts?

Ludo=E2=80=99.

--=-=-=--




Acknowledgement sent to Ludovic Courtès <ludovic.courtes@HIDDEN>:
New bug report received and forwarded. Copy sent to florent.pruvost@HIDDEN, romain.garbage@HIDDEN, bug-guix@HIDDEN. Full text available.
Report forwarded to florent.pruvost@HIDDEN, romain.garbage@HIDDEN, bug-guix@HIDDEN:
bug#75458; Package guix. Full text available.
Please note: This is a static page, with minimal formatting, updated once a day.
Click here to see this page with the latest information and nicer formatting.
Last modified: Sun, 12 Jan 2025 05:45:02 UTC

GNU bug tracking system
Copyright (C) 1999 Darren O. Benham, 1997 nCipher Corporation Ltd, 1994-97 Ian Jackson.