Hi,
below are my current findings.
As of commit
87045f0982 (gnu: paritwine: Update to 0.2.1., 2025-01-17)
guile-rsvg depends on a version of guile-cairo different from the one I
get by simply building guile-cairo:
$ ./pre-inst-env guix build guile-cairo
⇒ /gnu/store/k4kglplg98098y78flnw0f9wjyyc9zk2-guile-cairo-1.11.2
whereas
$ guix gc --references "$(./pre-inst-env guix build guile-rsvg)" | grep
guile-cairo
⇒ /gnu/store/lz8cv73yzzrbwrhafzadixnwgmspz2cg-guile-cairo-1.11.2
(gnu build svg) loads both (rsvg) and (cairo) which causes two different
libguile-cairo.so's to be loaded (interestingly enough the order
matters: loading (cairo) first would hide the issue):
--8<---------------cut here---------------start------------->8---
./pre-inst-env guix shell --no-cwd -C guile guile-cairo guile-rsvg -- \
guile -s /dev/stdin <<EOF | grep libguile-cairo
(begin
(use-modules (ice-9 textual-ports)
;; order matters!
(rsvg)
(cairo))
(display (call-with-input-file "/proc/self/maps" get-string-all)))
EOF
--8<---------------cut here---------------end--------------->8---
shows two different libguile-cairo.so's. The only difference between
the two guile-cairo derivation is that they graft cairo to different
derivations, which in turn differ only in grafting fontconfig-minimal to
different versions which finally only graft glibc and expat in different
order.
All this confirms the hypothesis Mark expressed in [0].
My guess is that the change to rust-ring somehow changes how it
interacts with grafting. Perhaps it is added / not added to some
hashtable, causing iteration order to change?
0: https://issues.guix.gnu.org/47115#23