From Fedora Project Wiki

Revision as of 16:33, 24 May 2008 by Ravidiip (talk | contribs) (1 revision(s))

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.