GNOME Bugzilla – Bug 777171
Latest version is effectively x86-only
Last modified: 2017-03-03 05:45:29 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
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.
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.
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.
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.