Archive:PackagingDrafts/StaticLibraryPolicy

This is an update to the existing sections in the Packaging/Guidelines.

Packaging Static Libraries

 * In general, packagers are strongly encouraged not to ship static libs unless a compelling reason exists.

1. Static libraries and shared libraries. In this case, the static libraries must be placed in a *-static subpackage. Separating the static libraries from the other development files in *-devel allow us to track this usage by checking which packages BuildRequire the *-static package. The intent is that whenever possible, packages will move away from using these static libraries, to the shared libraries. 2. Static libraries only. When a package only provides static libraries you can place all the static library files in the *-devel subpackage. When doing this you also must have a virtual Provide for the *-static package: %package devel Provides: foo-static = %{version}-%{release}
 * We want to be able to track which packages are using static libraries (so we can find which packages need to be rebuilt if a security flaw in a static library is fixed, for instance). There are two scenarios in which static libraries are packaged:

Packages which explicitly need to link against the static version must, so that the usage can be tracked.


 * If (and only if) a package has shared libraries which require static libraries to be functional, the static libraries can be included in the *-devel subpackage. The devel subpackage must have a virtual Provide for the *-static package, and packages dependent on it must BuildRequire the *-static package.

.....

Programs which don't need to notify FESCo

 * Programs written in OCaml do not normally link dynamically to OCaml libraries. Because of that this requirement is waived.  (OCaml code that calls out to libraries written in C should still link dynamically to the C libraries, however.)


 * If a library you depend on only provides a static version your package can link against it provided that you BuildRequire the *-static subpackage. Packagers in such a situation should be aware that if a shared library becomes available, that you should adjust your package to use the shared library.