Community process for 32-bit compatibility

Based on our commitment to continue to support i386 userspace in Ubuntu, we have assembled a list of packages for which we have been able to determine there is user demand based on the feedback up to this point. The packages listed below are the ones we are committing to carry forward to 20.04 on parity with amd64. (We will also, necessarily, carry forward the various other packages that those in this list depend on or build-depend on.)

Are there other packages not on this list that you need for 32-bit compatibility? Please let us know!

Methodology
We started by collating the list of all binary packages that exist only on i386 and not on amd64 in Ubuntu, then filtered this list to exclude packages that duplicate functionality that is available under a different package name on amd64 systems, or which are specific to hardware which is not 64-bit-capable.

join -j1 -v1 <(sed -n -eā€™s/^Package: //pā€™ /var/lib/apt/lists/archive.ubuntu.com_ubuntu_dists_eoan_binary-i386_Packages | sort -u) <(sed -n -eā€™s/^Package: //pā€™ /var/lib/apt/lists/archive.ubuntu.com_ubuntu_dists_eoan_binary-amd64_Packages | sort -u) | grep -vE ā€˜^lib64|amd64$|linux-gnu|ia32$|signed-template$|mkl|sse|^strace64$|^xserver-xorgā€™

This gives us a list of 51 i386-only binary packages, including certain well-known ones such as wine and steam.

We then extended this list with the list of library dependencies of the third-party 32-bit-only programs known to us (unity3d; godot; SDL-based games; printer drivers), and those reported through feedback on this topic, giving us 130 runtime library packages.

List of packages we commit to maintaining
The resulting list of packages that we are committing to keep around through 20.04, as long as these packages also continue to be supported on 64-bit, is:

  • adlibtracker2
  • atitvout
  • carla-bridge-linux32
  • carla-bridge-win32
  • carla-bridge-wine32
  • dgen
  • digitools
  • dxvk-wine32-development
  • etqw
  • etqw-server
  • fenix
  • fenix-plugin-mpeg
  • fenix-plugins
  • fenix-plugins-system
  • fnfx-client
  • fnfxd
  • fp-units-i386
  • fp-units-i386-3.0.4
  • freeglut3
  • gatos
  • gogo
  • google-android-build-tools-installer
  • gstreamer1.0-plugins-bad
  • gstreamer1.0-plugins-base
  • gstreamer1.0-plugins-good
  • gstreamer1.0-libav
  • gstreamer1.0-plugins-ugly
  • gtk2-engines
  • gtk2-engines-murrine
  • gtk2-engines-oxygen
  • gtk2-engines-pixbuf
  • gvfs
  • i965-va-driver
  • i965-va-driver-shaders
  • intel-media-va-driver-non-free
  • ibus-gtk
  • libacl1
  • libaio1
  • libao4
  • libasound2
  • libasound2-plugins
  • libasyncns0
  • libattr1
  • libaudio2
  • libcanberra-gtk-module
  • libcap2
  • libcapi20-3
  • libcggl
  • libcrystalhd3
  • libcups2
  • libcupsimage2
  • libcurl3-gnutls
  • libcurl4
  • libd3dadapter9-mesa
  • libdbus-glib-1-2
  • libflac8
  • libfontconfig1
  • libfreetype6
  • libgail-common
  • libgamemode0
  • libgatos-dev
  • libgatos0
  • libgconf-2-4
  • libgettextpo0
  • libglapi-mesa
  • libgl1-mesa-dri
  • libgl1-mesa-glx
  • libgles2-mesa
  • libglib2.0-0
  • libglu1-mesa
  • libgphoto2-6
  • libgphoto2-port12
  • libgpm2
  • libgtk2.0-0
  • libjpeg62
  • libmpg123-0
  • libncurses5
  • libncursesw5
  • libnspr4
  • libnss-mdns
  • libnss-sss
  • libnss-winbind
  • libnss3
  • libnvidia*-418
  • libodbc1
  • libogg0
  • libopenal1
  • libosmesa6
  • libpangox-1.0-0
  • libpulse-mainloop-glib0
  • libpulse0
  • libpulsedsp
  • libqt4-dbus
  • libqt4-network
  • libqt4-opengl
  • libqt4-qt3support
  • libqt4-script
  • libqt4-scripttools
  • libqt4-sql
  • libqt4-svg
  • libqt4-test
  • libqt4-xml
  • libqt4-xmlpatterns
  • libqtcore4
  • libqtgui4
  • libqtwebkit4
  • librsvg2-common
  • libsane
  • libsane1
  • libsdl-console
  • libsdl-gfx1.2-5
  • libsdl-gst
  • libsdl-image1.2
  • libsdl-mixer1.2
  • libsdl-net1.2
  • libsdl-ocaml
  • libsdl-pango1
  • libsdl-sge
  • libsdl-sound1.2
  • libsdl-stretch-0-3
  • libsdl-ttf2.0-0
  • libsdl1.2debian
  • libsdl2-2.0-0
  • libsdl2-gfx-1.0-0
  • libsdl2-image-2.0-0
  • libsdl2-mixer-2.0-0
  • libsdl2-net-2.0-0
  • libsdl2-ttf-2.0-0
  • libsndfile1
  • libsqlite3-0
  • libstdc++5
  • libstdc++6
  • libtbb2
  • libtheora0
  • libv4l-0
  • libva-glx2
  • libvorbis0a
  • libvorbisenc2
  • libvorbisfile3
  • libwebp6
  • libwsbm-dev
  • libwsbm1
  • libxcursor1
  • libxaw7
  • libxft2
  • libxi6
  • libxinerama1
  • libxml2
  • libxrandr2
  • libxrender1
  • libxslt1.1
  • libxss1
  • libxtst6
  • lmms-vst-server
  • longrun
  • lphdisk
  • mac-fdisk-cross
  • mesa-vulkan-drivers
  • odbcinst1debian2
  • pcsx2
  • pforth
  • pixbros
  • pixfrogger
  • pmac-fdisk-cross
  • quake4
  • quake4-server
  • s3switch
  • sb16ctrl-bochs
  • sl-modem-daemon
  • smlsharp
  • speech-dispatcher-ibmtts
  • steam
  • steamcmd
  • va-driver-all
  • vdpau-driver-all
  • wine32
  • wine32-development
  • wine32-development-preloader
  • wine32-development-tools
  • wine32-preloader
  • wine32-tools
  • xaw3dg
  • zlib1g
  • zsnes
  • zsnes-dbg

Together with the binary dependencies of all of these packages, this gives us a list of 1568 source packages that we will ensure keep working on i386.

Note that a number of these library packages are deprecated and slated for removal on all architectures before the Ubuntu 20.04 release (in particular qt4), hence the caveat about them being supported on i386 only if they are also supported on amd64.

If you require other binary packages that are not included in this list, please tell us here what they are.

10 Likes

Hi Vorlon,

I use a HP 930c printer with the package

  • hpcups 3.19.1

AFAIK this is 32 Bit, but to be honest, I donā€™t know how to find out, if it really is 32 Bit.
Could you tell me how? Or if you already know, that it is 32 Bit, could you please add it to the list of supported 32 Bit libs?

Best regards
einherjar

Sorry for double posting, but I canā€™t modify my posting above.

Is the spotify client from the snap store 32 or 64 Bit?

Greets
einherjar

As you can see on the snapcraft store page Install spotify on Linux | Snap Store - they only publish 64-bit builds.

Some that Iā€™m not sure we should consider:

flashplugin-downloader is a transitional packageā€¦ (32 bit flash hasnā€™t been supported on linux for a whileā€¦)
google-android-build-tools-installer - is this used by anyone? Looks like a leftover from 2016

Did someone request the following?
pixbros/pixfrogger/fenix open source 2d pixel games
gogo - multiverse mp3 encoder
gatos - ATI All-in-Wonder TV capture software

Iā€™d love the full list of source packages (doesnā€™t have to be posted here).

Hi,

Under Ubuntu 18.04 Iā€™m using the following packages in order to get my multifunction device to work (Brother MFC-J265W, printer / scanner / fax):

lib32ncurses5 
lib32z1

Packages I install actually depend on ā€œia32-libsā€, but it seems to have been replaced by the two above.

19.10 currently has the 435 nvidia drivers, and 418 only as transitional packages to upgrade to newer.
Is the version only listed as kind of example since they where what 19.10 had when they where put on the list?
I hope it will always be the newest nvidia drivers available in amd64 in the distribution, and also the still supported legacy drivers for older GPUs.

Really need the 32-bit version of Timidity. I know of some old Windows games/programs that use midi files and of course if theyā€™re 32-bit they need 32-bit WINE and 32-bit timidity

Hi einherjar,

There is no package by this name in the Ubuntu archive. Can you please either give us the name of a .deb package installed from the Ubuntu archive on your system (from dpkg -l '*:i386'), or else a URL where the hpcups that youā€™re using can be downloaded?

There is a package named printer-driver-hpcups in the Ubuntu archive, but I see nothing that suggests it needs to be installed as a 32-bit package.

Hi Bryan,

Please see lp:~vorlon/+junk/get-i386/ for the scripts used to generate the list of source packages.

Regarding the packages you ask whether we should include them: by design we are trying to be conservative about dropping packages if thereā€™s any chance they might have a legitimate use as 32-bit. That certainly includes 32-bit-only packages from the archive, whether or not they have any known users. They at least have a Debian maintainer, and itā€™s a small number of packages to keep buildable, so I donā€™t think we should spend much effort trying to make this list even smaller.

Thanks, those are the ā€œmultilibā€ forms of the packages (amd64 .deb packages containing 32-bit libs). The regular package names would be libncurses5 and zlib1g; libncurses5 is already on our list, and we can add zlib1g explicitly (it is already included in practice because itā€™s a dependency of many other things).

1 Like

You say ā€œof courseā€, but this is not at all obvious. Timidity is a program, not a library, and 32-bit wine should be able to execute a 64-bit timidity from the host. Can you give more detail about why you need the 32-bit version?

Maybe I am wrong but a 32-bit windows program requires 32-bit WINE and I remember years ago with an old game that used midi files. I needed the 32-bit timidity. As mixing 32-bit WINE and 64-bit timidity would not work. If you can show that itā€™s not needed then fair enough. But Iā€™m 90% sure both have to be 32-bit.

2 Likes

Just out of curiosity regarding the advantages of this move:

this gives us a list of 199 source packages

How many packages are you filtering out? Which is the ratio?

Hi,
hterm is a quite useful tool when analyzing serial (UART) data streams.
Unfortunately it is proprietary and 32-bit only.

It would be nice if it kept working.

1 Like

Does this mean that multiarch will be maintained for i386 on amd64?

Wine also sometimes needs these:
gstreamer1.0-libav
gstreamer1.0-plugins-bad
gstreamer1.0-plugins-good
gstreamer1.0-plugins-ugly
Iā€™ll be soon adding them as recommends or suggests in src:wine and src:wine-development, see LP #1817244

1 Like

Thanks, thatā€™s useful information. Obviously the current source package count doesnā€™t include this; Iā€™m not concerned about their addition, but I am concerned that they get included before we start making any changes to the archive, since itā€™s much easier to include these now than to rebootstrap them later. How can we make sure this gets done in Ubuntu 19.10?

The driver for my Brother DCP-1610W needs lib32stdc++

Scratch that; Iā€™ve found that 19.10 has a functional printer driver.