5.15 The Architecture Triplet
A package whose architecture is not noarch MUST install all of the
following under /usr/lib/<triplet>/, where <triplet> is the
architecture triplet of §5.8:
- shared libraries (
.so,.so.*) - static libraries (
.a) - loadable modules — plugin shared objects, and kernel modules outside
/usr/lib/modules/ - architecture-dependent helper binaries not on the user's search path
- any other arch-dependent file that is not a user-facing binary
Architecture-independent helper executables — a shell script run by
another program, say — go under /usr/libexec/ instead, which carries
no triplet rule because the rule is scoped to /usr/lib/.
A package whose architecture is noarch MUST NOT install any file under
/usr/lib/<triplet>/. A noarch package containing any of the
categories above is invalid.
5.15.1 Exemptions #
Three arch-dependent payload categories are exempt from the triplet path, because each is addressed by something other than the host triplet:
| Category | Path | Addressed by |
|---|---|---|
| Kernel content | /usr/lib/modules/<release>/ | kernel release |
| Device firmware | /usr/lib/firmware/ | device |
| Separated debug information | /usr/lib/debug/ | the install path of the file it describes |
A noarch package MUST NOT install under /usr/lib/modules/ or under
/usr/lib/debug/: kernel content and debug information are both
arch-dependent. /usr/lib/firmware/ carries no such restriction,
firmware being opaque data rather than host-architecture content.
Debug files mirror the full install path of what they describe. The
debug information for /usr/bin/foo is
/usr/lib/debug/usr/bin/foo.debug; for /usr/lib/<triplet>/libfoo.so.1
it is /usr/lib/debug/usr/lib/<triplet>/libfoo.so.1.debug. Debug files
MAY additionally be indexed by build ID under
/usr/lib/debug/.build-id/.
The freedesktop os-release file is a fourth exemption of a different
kind: it installs at exactly /usr/lib/os-release, a fixed external
contract path the ecosystem hard-codes. Unlike debug information it is
arch-independent, so a noarch package — the OS-identity package —
MAY ship it. It is conventionally paired with a /usr/etc/os-release
symlink, which the /etc merge projects to /etc/os-release.
5.15.2 Source #
The debugger source files that debug information references install
under /usr/src/debug/, not under /usr/lib/. Source is
architecture-independent, so /usr/src/debug/ carries neither a triplet
rule nor the noarch restriction: it is a plain permitted destination
that both arch-specific and noarch packages MAY use. The same applies
to /usr/src/dist/, the home of corresponding-source packages.
5.15.3 Architecture-independent data #
/usr/share/ holds architecture-independent files shared across every
architecture of a system: documentation, man pages, locales,
configuration templates, and static data such as icons, images, and
fonts.
Both noarch and arch-specific packages MAY install under
/usr/share/. A file installed there by an arch-specific package MUST
be byte-identical across every architecture build of the same upstream
version.