This page contains design decision rationales that are not listed in specifications or package documentation. For other multiarch topics, see the multiarch category.

This page should eventually be folded into the multiarch.txt that will be added to dpkg, and to debian-policy, so a compatible license is expected. That would be GPL-2+, if you don't agree with that please avoid making modifications to this page.

Overarching rationale

The main theme among many of the following rationale entries is that backwards semantics should be preserved, and that using a packaged manager that does not support multiarch semantics (barring the arch-qualified syntax) should operate in the same way. This implies that a flag-day should never be required, ever.

Why are arch:all packages treated implicitly like arch:native?

(Context: arch:all packages have a dual nature, they represent packages that supposedly share their contents across all actual architectures (and as such help reducing archive duplication), and they represent packages with code that is architecture independent. But those meanings are not always true, and sometimes packages with only one of the meanings is used just out of convenience.)

It was thus considered that not all arch:all packages are truly architecture independent (see above), and might have architecture-specific assumptions in their code. Because the fact that the code is the same across multiple architectures does not imply that it works everywhere. The same applies to data, some is endian-specific. It was deemed better to require marking them explicitly so that we would preserve backwards semantics.

It was also considered that allowing to treat arch:all packages as truly architecture independent could cause resolvers to pull in undesirable mixes of arch:any packages which might not be even runnable on the local system. Because the arch:all boundaries in dependencies break the knowledge of the architecture chains (which should really not be a problem, except in the multiarch interpreter problem).

Pros:

Cons:

Suggested change:

Why not adopt the interpreter proposal?

Why are :any qualified dependencies only satisfied by M-A:allowed packages?

This kind of relationship was added in part so that packages could not start declaring wildcard relationship without cooperation and agreement from the packages providing such interfaces, because the semantics of this interfaces might not be clear to external parties.

Why do M-A:foreign packages not satisfy :native qualified dependencies in build-dependencies?

Pros:

Cons:

Why are arch:all packages in build dependencies not implicitly treated as M-A:foreign in Debian?

More arguments and examples of Architecture:all packages that cannot be M-A:foreign can be found in 666772


CategoryMultiarch