News:ABI X86 64 and 32

From Funtoo
Jump to navigation Jump to search

ABI X86 64 and 32

Funtoo Linux has new 32-bit compatibility libraries inherited from Gentoo. Learn about them here.

By Drobbins / June 18, 2015

Hey everyone,

Many of you have noticed a change in 32-bit compatibility support in Funtoo Linux, which is being inherited from Gentoo Linux.

In the past, Gentoo Linux has provided 32-bit support on regular 64-bit Funtoo Linux systems (which have "multilib" support by default) by providing pre-built binary 32-bit versions of various libraries. These ebuilds have had names started with app-emulation/emul-linux-x86*. This has been a long-standing feature of Gentoo Linux, since about 2005 when multilib support was integrated into Gentoo. These 32-bit compatibility libraries are useful for pre-built binary 32-bit applications like Skype and other things, which depend on them.

Recently, Gentoo has switched away from these pre-built binary compatibility libraries. Instead of having pre-built binary 32-bit libraries, certain ebuilds have been upgraded so that they have the ability to install two versions of themselves at once -- a 64-bit version and a 32-bit version. Thus, rather than use the pre-built binaries, an ebuild can build these 32-bit libraries from source, even on 64-bit systems.

This feature is controlled in certain ebuilds by the use of the abi_x86_32 USE variable. This USE flag can be enabled on a per-package basis, or you can simply enable all 32-bit compatibility for any ebuilds that support it by adding the following to /etc/make.conf:

ABI_X86="32 64"

This is one of those handy USE-expand variables, which will result in abi_x86_32 and abi_x86_64 USE flags being enabled globally. Note that this will only work on "regular" Funtoo 64-bit installs, i.e. x86-64bit, not pure64 builds, which do not have any 32-bit compatibility to begin with.

I really apologize that I have not been on top of this issue as much as I would have liked. I really wanted to provide the Funtoo community with a seamless transition to the new system. Unfortunately, I can't control what happens in Gentoo land, and I also happened to get extremely busy in real life at the moment when all these changes started happening. On my TODO list is an imminent overhaul of a lot of the guts of Gentoo in order to make issues like this more manageable in the future.

In the mean time, many of you have systems that are using the emul-linux-x86 packages. Unfortunately, some manual intervention is required in order to upgrade a system to the new way of doing things. This is covered in this news item, but I will repeat here. First, you will need to unmerge all emul-linux-x86 packages:

root # emerge -C 'app-emulation/emul-linux-x86*'

This will remove all 32-bit binary libraries and tools, and thus temporarily break support for things like Skype and other 32-bit apps.

Once this is done, enable ABI_X86 in /etc/make.conf, and rebuild system:

root # emerge -auDN @system

This should result in a lot of ebuilds being rebuilt with 32-bit support included, which you should notice in the USE variable changes in the merge list.

Then, update world to catch anything else you may need:

root # emerge -auDN @world

At this point, your 32-bit apps will work again using freshly built 32-bit compatibility libraries.

Note that one quick and dirty way to get a particular 32-bit app running happily again is to just rebuild all deps for that particular app after unmerging the emul stuff, like so:

root # emerge -auDN skype

Many apologies for the sloppy handling of this by Gentoo (upstream) that affected Funtoo systems, and my unavailability to help guide the Funtoo community through the transition.