After an evaluation, GNOME has moved from Bugzilla to GitLab. Learn more about GitLab.
No new issues can be reported in GNOME Bugzilla anymore.
To report an issue in a GNOME project, go to GNOME GitLab.
Do not go to GNOME Gitlab for: Bluefish, Doxygen, GnuCash, GStreamer, java-gnome, LDTP, NetworkManager, Tomboy.
Bug 777171 - Latest version is effectively x86-only
Latest version is effectively x86-only
Status: RESOLVED WONTFIX
Product: librsvg
Classification: Core
Component: general
2.41.x
Other Linux
: Normal major
: ---
Assigned To: librsvg maintainers
librsvg maintainers
Depends on:
Blocks:
 
 
Reported: 2017-01-12 12:09 UTC by John Paul Adrian Glaubitz
Modified: 2017-03-03 05:45 UTC
See Also:
GNOME target: ---
GNOME version: ---



Description John Paul Adrian Glaubitz 2017-01-12 12:09:42 UTC
Hello!

The latest version of librvg has been partially rewritten in Rust. This means, that librvg has now a hard-dependency on rustc, the Rust compiler.

Unfortunately, rustc is really supported on x86 (32 and 64 bits) only [1], all other architectures have either just Tier2 support or aren't supported at all. How bad the current situation with Rust on non-x86 architectures is, shows this discussion started by one of the rustc maintainers in Debian [2].

Basically, since Rust does not deliver prime support for non-x86 architectures, the Debian Rust maintainers are constantly busy with fixing regressions on the other architectures. This has eventually led to the situation that rustc was dropped for all architectures except arm64, i386 and amd64 in Debian.

Now, OTOH, librsvg (up to 2.40.16) used to be very portable and was supported on all 22 targets that Debian currently ships [3]. However, if we were to update librsvg to the latest upstream version in Debian now, we would limit librsvg and consequently all packages that have a reverse dependency on librsvg to merely i386, amd64 and arm64. Thus, affected packages would no longer be able to run on platforms like the Raspberry Pi, any MIPS-based machine or targets like PowerPC64 (POWER8) or IBM zSeries (s390x). This doesn't even include the many architectures in Debian Ports.

As you can imagine, the number of packages that directly or indirectly depend on librsvg is not small - pasting a list below - and hence updating to the latest version of librsvg would introduce such a massive breakage that Debian will not be able to the latest upstream version in the near future. This will most likely result in Debian carrying a forked version of librsvg in the future.

As a solution, I suggest making the Rust codepath optional or revert the Rustification of librsvg until Rust upstream has caught up with architecture and platform support with other languages and compilers.

Thanks,
Adrian

> [1] https://forge.rust-lang.org/platform-support.html
> [2] https://buildd.debian.org/status/package.php?p=rustc&suite=sid
> [3] https://buildd.debian.org/status/package.php?p=librsvg&suite=sid

===============================================================================

The following packages would no longer be usable on anything but i386, amd64 or arm64 if we were to update librsvg to the latest upstream in Debian now:

# Broken Depends:
abiword: libabiword-3.0
         libabiword-3.0-dev
accerciser: accerciser
adwaita-icon-theme: adwaita-icon-theme
afterstep: libafterimage-dev
           libafterimage0
aisleriot: aisleriot
appstream-generator: appstream-generator [amd64 armhf i386]
auto-multiple-choice: auto-multiple-choice-common
bauble: bauble
blueman: blueman [amd64 arm64 armel armhf i386 mips mips64el mipsel powerpc ppc64el s390x]
blueproximity: blueproximity
bluewho: bluewho
cairo-5c: libcairo-5c0
cairo-clock: cairo-clock
cairo-dock: cairo-dock-core
cairo-dock-plug-ins: cairo-dock-alsamixer-plug-in [amd64 arm64 armel armhf i386 mips mips64el mipsel powerpc ppc64el s390x]                     
                     cairo-dock-animated-icons-plug-in
                     cairo-dock-cairo-penguin-plug-in
                     cairo-dock-clipper-plug-in
                     cairo-dock-clock-plug-in
                     cairo-dock-dbus-plug-in
                     cairo-dock-desklet-rendering-plug-in
                     cairo-dock-dialog-rendering-plug-in
                     cairo-dock-dnd2share-plug-in
                     cairo-dock-drop-indicator-plug-in
                     cairo-dock-dustbin-plug-in
                     cairo-dock-folders-plug-in
                     cairo-dock-gmenu-plug-in
                     cairo-dock-gnome-integration-plug-in
                     cairo-dock-icon-effect-plug-in
                     cairo-dock-illusion-plug-in
                     cairo-dock-impulse-plug-in
                     cairo-dock-kde-integration-plug-in
                     cairo-dock-keyboard-indicator-plug-in
                     cairo-dock-logout-plug-in
                     cairo-dock-mail-plug-in
                     cairo-dock-messaging-menu-plug-in
                     cairo-dock-motion-blur-plug-in
                     cairo-dock-musicplayer-plug-in
                     cairo-dock-netspeed-plug-in
                     cairo-dock-powermanager-plug-in
                     cairo-dock-quick-browser-plug-in
                     cairo-dock-recent-events-plug-in
                     cairo-dock-remote-control-plug-in
                     cairo-dock-rendering-plug-in
                     cairo-dock-rssreader-plug-in
                     cairo-dock-shortcuts-plug-in
                     cairo-dock-showdesktop-plug-in
                     cairo-dock-showmouse-plug-in
                     cairo-dock-slider-plug-in
                     cairo-dock-stack-plug-in
                     cairo-dock-switcher-plug-in
                     cairo-dock-system-monitor-plug-in
                     cairo-dock-systray-plug-in
                     cairo-dock-terminal-plug-in
                     cairo-dock-tomboy-plug-in
                     cairo-dock-toons-plug-in
                     cairo-dock-weather-plug-in
                     cairo-dock-weblets-plug-in
                     cairo-dock-wifi-plug-in
                     cairo-dock-xfce-integration-plug-in
                     cairo-dock-xgamma-plug-in
cellwriter: cellwriter
colorhug-client: colorhug-client [amd64 arm64 armel armhf i386 mips mips64el mipsel powerpc ppc64el s390x]
compiz: compiz-plugins [amd64 arm64 i386 mips mips64el mipsel powerpc ppc64el s390x]
conky: conky-all [amd64 arm64 armhf i386 kfreebsd-amd64 kfreebsd-i386 mips mips64el mipsel powerpc ppc64el s390x]
darktable: darktable [amd64 arm64 hurd-i386 i386 kfreebsd-amd64 kfreebsd-i386]
debian-design: design-desktop-graphics
deluge: deluge-gtk
denemo: denemo
desktop-base: desktop-base
emacs24: emacs24 [amd64 arm64 armel armhf i386 kfreebsd-amd64 kfreebsd-i386 mips mips64el mipsel powerpc ppc64el s390x]
         emacs24-lucid [amd64 arm64 armel armhf i386 kfreebsd-amd64 kfreebsd-i386 mips mips64el mipsel powerpc ppc64el s390x]
emacs25: emacs25 [amd64 arm64 armel armhf i386 kfreebsd-amd64 kfreebsd-i386 mips mips64el mipsel powerpc ppc64el s390x]
         emacs25-lucid [amd64 arm64 armel armhf i386 kfreebsd-amd64 kfreebsd-i386 mips mips64el mipsel powerpc ppc64el s390x]
eog: eog
eom: eom
epoptes: epoptes
         epoptes-client
evas-loaders: libevas-loaders
fbpanel: fbpanel
five-or-more: five-or-more
florence: florence
flowblade: flowblade
fvwm: fvwm
gambas3: gambas3-gb-gtk
         gambas3-gb-gtk-opengl
         gambas3-gb-gtk3
gartoon: gnome-icon-theme-gartoon
gbrainy: gbrainy
gcompris: gcompris
gdesklets: gdesklets
gdm3: gdm3 [amd64 arm64 armel armhf i386 mips mips64el mipsel powerpc ppc64el s390x]
gegl: libgegl-0.3-0
gespeaker: gespeaker
gextractwinicons: gextractwinicons
gimp: gimp
glabels: glabels
gnome-btdownload: gnome-btdownload
gnome-chess: gnome-chess
gnome-do: gnome-do [amd64 arm64 armel armhf i386 kfreebsd-amd64 kfreebsd-i386 mipsel powerpc ppc64el s390x]
gnome-hearts: gnome-hearts
gnome-icon-theme: gnome-icon-theme
gnome-klotski: gnome-klotski
gnome-mahjongg: gnome-mahjongg
gnome-panel: gnome-panel
gnome-python-desktop: python-rsvg
gnome-robots: gnome-robots
gnome-settings-daemon: gnome-settings-daemon [amd64 arm64 armel armhf i386 mips mips64el mipsel powerpc ppc64el]
gnome-system-monitor: gnome-system-monitor
goffice: libgoffice-0.10-10
         libgoffice-0.10-dev
gpxviewer: gpxviewer
gramps: gramps
gscan2pdf: gscan2pdf
gst-plugins-bad1.0: gstreamer1.0-plugins-bad
gthumb: gthumb
gwakeonlan: gwakeonlan
gweled: gweled
gxine: gxine
hippo-canvas: libhippocanvas-1-0
              python-hippocanvas
iagno: iagno
ibus: ibus
imagemagick: libmagickcore-6.q16-dev
             libmagickcore-6.q16hdri-dev
java-gnome: libjava-gnome-jni
jwm: jwm
lablgtk2: liblablgtk2-gnome-ocaml
          liblablgtk2-gnome-ocaml-dev
libavg: python-libavg [amd64 arm64 armel armhf i386 mips mips64el mipsel powerpc ppc64el s390x]
libccss: libccss-1-5
         libccss-dev
         libccss-tools
libimage-librsvg-perl: libimage-librsvg-perl
links2: links2
lxappearance-obconf: lxappearance-obconf
lxdm: lxdm [amd64 arm64 armel armhf i386 mips mips64el mipsel powerpc ppc64el s390x]
mapserver: cgi-mapserver
           libmapscript-java
           libmapscript-perl
           libmapserver2
           mapserver-bin
           python-mapscript
           ruby-mapscript
mate-control-center: libmate-slab0
mate-icon-theme: mate-icon-theme
mate-icon-theme-faenza: mate-icon-theme-faenza
mate-panel: mate-panel
mate-system-monitor: mate-system-monitor
mate-themes: mate-themes
mediawiki2latex: mediawiki2latex
mldonkey: mldonkey-gui
moblin-icon-theme: moblin-icon-theme
nagstamon: nagstamon
navit: navit-graphics-gtk-drawing-area
netsurf: netsurf-gtk [amd64 arm64 armel armhf i386 kfreebsd-amd64 kfreebsd-i386 mips mips64el mipsel powerpc ppc64el s390x]
obconf: obconf
onboard: onboard
openbox: libobrender32v5
         openbox-dev
openscenegraph: libopenscenegraph100v5
openscenegraph-3.4: libopenscenegraph-3.4-130 [amd64 arm64 armhf hurd-i386 i386 kfreebsd-amd64 kfreebsd-i386 mips mips64el mipsel powerpc ppc64el s390x]
openshot: openshot
performous: performous
pida: pida
pike7.8: pike7.8-svg
pike8.0: pike8.0-svg [amd64 arm64 armel armhf hurd-i386 i386 mips mips64el mipsel powerpc ppc64el s390x]
pioneers: pioneers
publican: publican
pychess: pychess
quarry: quarry
rapid-photo-downloader: rapid-photo-downloader
ruby-gnome2: ruby-rsvg2
shogivar: shogivar
shotwell: shotwell [amd64 arm64 armel armhf i386 mips mips64el mipsel powerpc ppc64el s390x]
shutter: shutter
smuxi: smuxi-frontend-gnome
specto: specto
sugar-browse-activity: sugar-browse-activity
sugar-chat-activity: sugar-chat-activity
sugar-imageviewer-activity: sugar-imageviewer-activity
sugar-toolkit-gtk3: libsugarext-dev [amd64 arm64 armel armhf i386 mips mips64el mipsel powerpc ppc64el s390x]
                    libsugarext0 [amd64 arm64 armel armhf i386 mips mips64el mipsel powerpc ppc64el s390x]
                    python-sugar3
swami: libswami0
       swami
t4kcommon: libt4k-common0
           libt4k-common0-dev
tenace: tenace
tint2: tint2 [amd64 arm64 armel armhf i386 kfreebsd-amd64 kfreebsd-i386 mips mips64el mipsel powerpc ppc64el s390x]
tryton-client: tryton-client
tuxpaint: tuxpaint
tuxtype: tuxtype [amd64 arm64 armel armhf i386 kfreebsd-amd64 kfreebsd-i386 mips mips64el mipsel powerpc ppc64el s390x]
vagalume: vagalume
vips: libvips-dev
      libvips-tools
      libvips42
      python-vipscc
virt-manager: virt-manager
vlc: vlc [kfreebsd-amd64 kfreebsd-i386]
     vlc-plugin-base [amd64 arm64 armel armhf hurd-i386 i386 mips mips64el mipsel powerpc ppc64el s390x]
     vlc-plugin-svg
xboard: xboard
xfce4-xkb-plugin: xfce4-xkb-plugin

# Broken Build-Depends:
abiword: librsvg2-dev
adwaita-icon-theme: librsvg2-bin
afterstep: librsvg2-dev (>= 2.14)
aisleriot: librsvg2-dev (>= 2.32.0)
altos: librsvg2-bin
appstream-generator: librsvg2-dev
aptitude: librsvg2-bin
audacious: librsvg2-bin
auralquiz: librsvg2-bin
auto-multiple-choice: librsvg2-bin
cairo-5c: librsvg2-dev
cairo-clock: librsvg2-dev (>= 2.14.0)
cairo-dock: librsvg2-dev
cairo-dock-plug-ins: librsvg2-dev
cheese: librsvg2-dev (>= 2.32.0)
chemical-mime-data: librsvg2-bin
cinnamon-screensaver: librsvg2-bin
cinnamon-settings-daemon: librsvg2-dev
colobot: librsvg2-bin
comixcursors: librsvg2-bin
compiz: librsvg2-dev
conky: librsvg2-dev
cups-filters: librsvg2-bin
daisy-player: librsvg2-bin
darktable: librsvg2-dev
darnwdl: librsvg2-bin
debian-edu-artwork: librsvg2-bin
debian-installer: librsvg2-bin
denemo: librsvg2-dev
desktop-base: librsvg2-bin
djview4: librsvg2-bin
dozzaqueux: librsvg2-bin
ebook-speaker: librsvg2-bin
emacs24: librsvg2-dev
emacs25: librsvg2-dev
enblend-enfuse: librsvg2-bin
eog: librsvg2-dev (>= 2.36.2)
eom: librsvg2-dev (>= 2.36.2)
etoys/non-free: librsvg2-bin
evas-loaders: librsvg2-dev
firefox-branding-iceweasel: librsvg2-bin
five-or-more: librsvg2-dev (>= 2.32.0)
flare-game: librsvg2-bin
florence: librsvg2-dev
four-in-a-row: librsvg2-dev (>= 2.32.0)
freeplane: librsvg2-bin
fvwm: librsvg2-dev (>= 2.13.92)
gambas3: librsvg2-dev
gbrainy: librsvg2-dev
gcompris: librsvg2-dev
gdesklets: librsvg2-dev (>= 2.8.0)
gegl: librsvg2-dev (>= 2.14.0)
gimp: librsvg2-dev (>= 2.14.0)
glabels: librsvg2-dev (>= 2.32.0)
gnome-chess: librsvg2-dev (>= 2.32.0)
gnome-hearts: librsvg2-dev (>= 2.7)
gnome-icon-theme: librsvg2-bin
gnome-klotski: librsvg2-dev (>= 2.32.0)
gnome-mahjongg: librsvg2-dev (>= 2.32.0)
gnome-mines: librsvg2-dev (>= 2.32.0)
gnome-nibbles: librsvg2-dev (>= 2.32.0)
gnome-panel: librsvg2-dev (>= 2.36.2)
gnome-python-desktop: librsvg2-dev (>= 2.13.93)
gnome-robots: librsvg2-dev (>= 2.36.2)
gnome-settings-daemon: librsvg2-dev (>= 2.36.2)
gnome-system-monitor: librsvg2-dev (>= 2.35.0)
gnome-taquin: librsvg2-dev (>= 2.32.0)
gnome-themes-standard: librsvg2-dev
gnupg2: librsvg2-bin
goffice: librsvg2-dev
greybird-gtk-theme: librsvg2-dev
gst-plugins-bad1.0: librsvg2-dev (>= 2.36.2)
gthumb: librsvg2-dev (>= 2.34.0)
gweled: librsvg2-dev
hippo-canvas: librsvg2-dev (>= 2.16)
human-icon-theme/non-free: librsvg2-dev (>= 2.12.3)
iagno: librsvg2-dev (>= 2.32.0)
imagemagick: librsvg2-bin
             librsvg2-dev
iso-flags-svg: librsvg2-bin
java-gnome: librsvg2-dev (>= 2.32)
jwm: librsvg2-dev
k3d: librsvg2-bin
kwave: librsvg2-bin
lablgtk2: librsvg2-dev
laditools: librsvg2-bin
ldm-themes: librsvg2-bin
libavg: librsvg2-dev
libccss: librsvg2-dev
libimage-librsvg-perl: librsvg2-dev
librecad: librsvg2-bin
libwacom: librsvg2-dev
lightsoff: librsvg2-dev (>= 2.32.0)
links2: librsvg2-dev
mangler: librsvg2-common
mapcache: librsvg2-dev
mapserver: librsvg2-dev
mate-control-center: librsvg2-dev
mate-icon-theme: librsvg2-bin
mate-icon-theme-faenza: librsvg2-bin
mate-panel: librsvg2-dev
mate-system-monitor: librsvg2-dev
miceamaze: librsvg2-bin
midori: librsvg2-bin
mlton: librsvg2-bin
mokomaze: librsvg2-bin
          librsvg2-common
navit: librsvg2-bin
netsurf: librsvg2-dev
open-infrastructure-apache-icons: librsvg2-bin
openbox: librsvg2-dev
openscenegraph: librsvg2-dev
openscenegraph-3.4: librsvg2-dev
optgeo: librsvg2-bin
password-gorilla: librsvg2-bin
performous: librsvg2-dev
pidgin-skype/contrib: librsvg2-bin
pike7.8: librsvg2-dev (>= 2.7)
pike8.0: librsvg2-dev (>= 2.7)
pioneers: librsvg2-bin
pycorrfit: librsvg2-bin
pyscanfcs: librsvg2-bin
pyscrabble: librsvg2-bin
pysdl2: librsvg2-bin
quadrapassel: librsvg2-dev (>= 2.32.0)
quarry: librsvg2-dev
rootskel-gtk: librsvg2-bin
ruby-gnome2: librsvg2-dev (>= 2.8.0)
sabnzbdplus/contrib: librsvg2-bin
sctk: librsvg2-bin
shogivar: librsvg2-dev
simple-scan: librsvg2-dev
solfege: librsvg2-bin
sudoku: librsvg2-bin
sugar-toolkit-gtk3: librsvg2-dev
svxlink: librsvg2-bin
swami: librsvg2-dev (>= 2.8)
sympy: librsvg2-bin
t4kcommon: librsvg2-dev
tali: librsvg2-dev (>= 2.32.0)
tangerine-icon-theme/non-free: librsvg2-dev (>= 2.12.3)
teg: librsvg2-dev
tint2: librsvg2-dev
totem: librsvg2-dev (>= 2.16.0-2)
tuxmath: librsvg2-dev
tuxpaint: librsvg2-dev
tuxtype: librsvg2-dev
udj-desktop-client: librsvg2-bin
uim: librsvg2-bin
unison: librsvg2-bin (>= 2.18.2)
vips: librsvg2-dev (>= 2.40.0)
vlc: librsvg2-dev
vlfeat: librsvg2-bin
win32-loader: librsvg2-bin
wine: librsvg2-bin
wine-development: librsvg2-bin
x4d-icons: librsvg2-bin
xboard: librsvg2-dev
xfce4-xkb-plugin: librsvg2-dev
xine-lib-1.2: librsvg2-bin
Comment 1 Christian Persch′ 2017-01-12 16:17:41 UTC
I don't think we should give much, if any, weight to this. As can be seen on http://popcon.debian.org/ and esp. this graph [http://popcon.debian.org/stat/submission-1year.png] (note: log scale) all architectures other than x64 and i386 are marginal.
Comment 2 John Paul Adrian Glaubitz 2017-01-12 16:21:01 UTC
Popcon is not a usable measure as it is opt-in, not opt-out.

And the majority of Linux boxes run on ARM, not x86. We're not talking about a desktop application here, we're talking about a core library with a massive amount of reverse dependencies.

Claiming that anything but x86 doesn't matter is therefore a bit naive.
Comment 3 Federico Mena Quintero 2017-03-02 22:42:09 UTC
Short answer: I am not going to de-rustify librsvg :)

Long answer:  This has been a recurring problem with Debian, not only for librsvg.  I don't have a good solution.  I would ask questions like

1. Is Debian worried that (just to pick something) shotwell doesn't run on mips or powerpc?

2. What would be the value of making Rust work on these platforms?

3. Would Debian be better off appointing a maintainer of the librsvg 2.40.x series, the pre-Rust version?

I'll happily mentor someone who wants to tackle (3).  I don't have answers to the other two.
Comment 4 John Paul Adrian Glaubitz 2017-03-03 05:45:29 UTC
I have been involved with Linux since 1998, so I think I can claim I can talk from experience here. So, let me tell you one thing: I have seen stunts like this one here before where a single GNOME developer thought a certain design decision was a good idea and ignoring the rest of the community was the right thing to do. In the end, projects like MATE or Cinnamon were born and users left GNOME. And there are many other non-GNOME projects which suffered in a similar way like XFree86 and cdrecord because upstream ignored the community and their users.

Another experience in this regard was a long standing bug in one of the GNOME components that was reported to the GNOME developers who kept claiming there was no bug and they continued closing the bug again. At some point, there was a big customer of RedHat's RHEL distribution that ran into the same issue and he reported the bug to the RHEL bug tracker, which was immediately cloned as a private bug. All of a sudden, the issue was fixed within two weeks and I assume the GNOME maintainer in question had a nice long talk with their manager.

Look, I understand that you are probably very exciting about Rust and you just love being able to rewrite librsvg in Rust because you are very much convinced that Rust is definitely the future now, after realizing that apparently Vala isn't hip anymore.

However, you have to understand that your software has users in the end and what you are doing here is effectively completely ignoring your users. You assume that librsvg is used on certain configurations only, namely people running GNOME on x86_64 machines. Heck, you even just mention shotwell as the only potential candidate using it, even though I actually send you a very long list of affected packages. And this isn't specific to Debian only either. I think you have heard of the Raspberry Pi and you probably know it is not an x86 machine. The current version of librsvg won't be able to run on the Pi, despite what the Rust upstream developers claim, at least not in a stable fashion.

Mozilla isn't Google, they don't have the resources to maintain something like Rust in the foreseeable future. None of the other big companies in the industry have picked up the language yet and there is so far only one actual implementation which can't even claim yet to have achieved a stable API, lots of projects written in Rust still need to use nightly versions of the Rust compiler. If you look around, you'll see that there are hardly any large projects written in Rust - except for Mozilla's own projects.

Starting to port a core library to such a language when it's neither mature nor has gained enough traction and is supported by enough ISVs is not a wise decision and I'm pretty confident this will result a lot of headache in the future and potentially result in a fork or abandoning of librsvg in the community.

Ignoring the community and your end users has never worked out in the history of open source software and Linux.

Think about that.