NOTE: This is the a former draft proposal, the FPC has agreed up. It has been ratfied by FESCO and been merged into the FPG.
🔗 Motivation
Static libraries and statically linked applications introduce major problems to maintenance of a distro such as Fedora:
- Packages being linked against shared libs automatically receive updates, fixes etc. when these libs are being updated without recompilation.
Packages being statically linked would require explicit recompilation.
- Packages being linked against static libs are easy to miss to be updated when a library is being updated, because package dependencies on static libs are hidden from a package's dependencies.
- Static linkage increases the size of the distro, because
- Shipping static libraries consumes (disk-)space.
- Each statically linked application contains private copies of parts of static libs, which consumes further (disk-)space.
- Statically linked applications often consume more (run-time) memory than dynamically linked applications.
- The rebuilds (package updates, avoidable if applications were dynamically linked) statically linked applications introduce, cause additional network traffic.
- rpm/redhat-rpm-config (at least on Fedora 5) does not generate functional *-debuginfo*.rpms for static libs.
This prevents source-level debugging of static libs using *-debuginfo.rpms.
🔗 Proposal
- In general, packagers are strongly encouraged not to ship static libs nor statically linked applications, unless the packager can provide sufficently satisfactory reasons why a package should contain static libs or contain statically linked applications.
- Shipping static libs and static linkage should be considered special exceptions and should be decided upon case-by-case per package. Packager must provide rationale for a -static subpackage, including precedences where available, to the appropriate Steering Committee (FESCO for Fedora Extras, Secret Core Cabal for Fedora Core) for approval.
- Require static libs to be packaged in packages named *-static, instead of *-devel.
This allows tracking of packages dependending on static libs based on these packages BuildRequire'ing *-static packages.