Translation(s): Brasileiro - English - Español - Français - Русский

Debian multiarch support

About

Multiarch is the term being used to refer to the capability of a system to install and run applications of multiple different binary targets on the same system. For example running a i386-linux-gnu application on an amd64-linux-gnu system. This example is the most common case, but many other working combinations are possible, such as armel and armhf.

Multiarch also simplifies cross-building, where foreign-architecture libraries and headers are needed on a system during building.

The existing proposals allow for the co-installation of libraries and headers for different architectures, but not (yet) binaries. So you can have either the i386 version of a binary, or the amd64 version, but not both (using conventional /bin paths). All the dependencies will be installed and available for the corresponding binary.

Multiarch is a significant and powerful development, and affects many processes and aspects of the system. The immediate practical effects are getting rid of the ia32-libs package, and allowing proper cross-architecture dependencies for cross-building.

It was first working in Ubuntu Natty and Debian Wheezy as well as used for the arm64 and mips64el port bootstraps.

Documentation

These documents define the implementation and should contain everything you need to know.

The case for multiarch
Why are we putting ourselves through all this pain? Isn't lib64 good enough for everyone?

Multiarch package manager specification
Main spec, detailing how files are laid out, how dependencies are defined, and how it works in combination with apt and dpkg

Multiarch/Tuples. The tuple schema used for multiarch paths (instead of GNU triplets).

Multiarch HOWTO for users
User-oriented info on how to use multiarch: configuration, installation, cross-building.

Multiarch conversion howto
A maintainer-oriented document detailing how you can convert your library package over for multiarch paths.

Bootstrapping The process/ordering/timeline for getting Debian unstable multiarched.

Issues for tools The conversion process can produce problems for tools using apt or dpkg and these can be documented here.

Multiarch Cross-building Specification
How multiarch is used for cross-building, including the extensions to support cross- build-dependencies

Linker and multilib behaviour
Explanatory details on the linker, gcc, libc and multilib. Not strictly speaking part of the multiarch spec, but it explains why it works, and clarifies discussion on future developments.

There are many other now-superceded documents. Links exist below for anyone who cares about the history of development.

Resources

IRC channel: #multiarch on irc.debian.org (OFTC).

There is no specific mailing list. Discussion is on lists/channels of affected packages and tools, such as dpkg, apt, gcc and general development lists (e.g. debian-devel)

Current Status

Debuting in Ubuntu Natty and Debian Wheezy.

Apt support is in Debian Squeeze and Ubuntu Maverick

Patches for gcc, eglibc, and a number of base libraries are available in Ubuntu natty.ch

Dpkg support is available starting from version 1.16.2.

Tuple tool: https://code.launchpad.net/~vorlon/+junk/multiarch-tools

Future development

Adding support for co-installable binaries is a probable future extension, but is not part of the scope of the current multiarch work (in order for it only to take 7 years, not 15).

Multiarch makes various things possible or even easy: cross architecture dependencies, cross-compilers in the archive, partial architectures. A meeting held at debconf11 discussed these issues. Multiarch/Debconf11MultiarchRelatedMinutes

History

The genesis of Multiarch has been (very!) long, and the proposal has changed significantly along the way. Here are some of the dates when things happened, with links to the documents written at the time. These have all been superceded by the docs reference above.

Old Resources