Policies Regarding Modules in Fedora, Fedora ELN and EPEL
Requirements for All Module Streams
-
The module maintainer MUST have explicit commit privileges to all packages included in the module stream. The provenpackager privilege in Fedora is not sufficient.[1]
-
Components built into a module MUST be associated with a reachable commit in Fedora dist-git.[2]
-
If a stream of a module has build-time-only components, all such components MUST be marked as
buildonly: True
in the module metadata to avoid shipping them to users and polluting their repository.
Requirements for Default Streams in Fedora ELN
-
Default streams are not permitted in Fedora or EPEL 8. Fedora ELN permits defaults streams that adhere to the policy below.
-
All RPMs in default module streams are required to conform to the same requirements around Conflicts as non-modular RPMs.
-
Packages provided at runtime by the default stream of a module MUST depend only on packages provided by packages from default module streams or the non-modular package set. By extension, default streams of a module MUST NOT have a dependency on any non-default stream.[3]
-
Packages provided from default streams MAY depend on content from other default streams. If they do so, this dependency MUST be encoded in the module metadata.[4]
-
All packages provided at runtime by the default stream of a module MUST provide all the same functionality that a downstream consumer would expect from a package in the non-modular package set.[5]
-
The default stream of a module MUST NOT change to a different stream within a released Fedora version.[6] The default stream MAY be changed in Rawhide or during Fedora upgrades. Changes to default streams MUST be approved via a Fedora Change proposal.
-
Packages MAY convert from a non-modular package to a modular default stream (or the reverse) only in Rawhide or during Fedora upgrades.
-
Default streams MUST NOT provide a binary RPM with the same package name as a non-modular RPM in the same release except in the case of a transition from one to the other.[7]
-
Default streams MUST NOT provide a binary RPM with the same package name as an RPM in a default stream of another module in the same release.[8]
-
Multiple default streams MUST NOT provide the same binary package names at runtime.[9]
-
Default streams MUST NOT provide a package that overrides a package of the same name in the non-modular content except in approved cases of migration between modular and non-modular delivery.
-
Default streams MUST NOT use the
data.buildopts.rpm.macros
metadata section without approval by FESCo.[10]
alternatives
system or virtual Provides
for capabilities.