From 93b8512eede7232c53a9ac92d7459b13826d4e79 Mon Sep 17 00:00:00 2001 From: Zbigniew Jędrzejewski-Szmek Date: Sep 09 2020 08:34:25 +0000 Subject: Merge #34 `3rd party repo policy — alternative approach` --- diff --git a/fesco/modules/ROOT/pages/Third_Party_Repository_Policy.adoc b/fesco/modules/ROOT/pages/Third_Party_Repository_Policy.adoc index 1a6f438..72cb987 100644 --- a/fesco/modules/ROOT/pages/Third_Party_Repository_Policy.adoc +++ b/fesco/modules/ROOT/pages/Third_Party_Repository_Policy.adoc @@ -1,109 +1,83 @@ -= Third Party Repository Policy += Third-Party Repository Policy -A third party repository is any software repository which isn't officially maintained by the Fedora project, including Coprs that are hosted on Fedora infrastructure, as well as repositories that are hosted outside of Fedora. +A third-party repository is any software repository that the Fedora Project does not officially maintain, including link:https://copr.fedorainfracloud.org/[Copr repositories], as well as repositories that are hosted outside of the Fedora Project. -This policy sets out the conditions under which Fedora editions and spins can include these third party repositories and make them available to their users. It also describes requirements for how they must be managed, and guidelines for decisions that might need to be made about them. +This policy sets out the conditions under which Fedora editions and spins can include repository definitions that make the contents from those third party repositories available to users. +It applies to **repository definitions integrated with the usual package installation mechanisms** like `dnf` or GNOME Software. Unless such integration exists, this policy does **not** cover the packaging of: +* Language-specific tools (`pip`, `maven`, `cargo`, `go`, …). +* Tools that primarily exist to access external software packaging ecosystems (`snap`, `apt`, `pacman`, …). +* Tools that provide images of other systems (`docker`, `podman`, `machinectl`, …). +These tools can use third-party repositories without the restrictions described below. -== Background & goals +This policy is intended to ensure quality and legal protections for the most critical and visible software mechanisms used by Fedora, while allowing special-purpose software management tools to function as expected. The policy also aims to ensure that software provided under its terms is clearly labeled, so users are fully informed about the origin of the software they are installing. -Fedora is an important participant in the world of free software, but for Fedora to have more impact we need to significantly grow our user base relative to its current size. By making Fedora easier to use, and lowering the threshold for users to get the software they need, we can accelerate the growth of the Fedora community. This will ensure that we are in the best possible position to spread the values and goals of the Fedora project. +Software from third-party repositories cannot be used when creating Fedora images. -This policy is motivated by: +== Third-party repository distribution -* Recurring negative points when Fedora is reviewed, particularly but not exclusively regarding Fedora Workstation -* Feedback exercises such as link:https://blogs.gnome.org/uraeus/2015/04/20/fedora-workstation-more-than-the-sum-of-its-parts/[this blog post], which have asked users why they have not switched to Fedora -* Evidence that a large proportion of our users link:https://eischmann.wordpress.com/2015/07/31/most-popular-web-browsers-among-fedora-users/[run third party software] on Fedora +Third-party repositories should be distributed in descriptively named rpm packages. +Each third-party repository should be defined once through a separate (binary) package. -The policy aims to make a wide range of software available to Fedora users in a easily consumable format, while ensuring that that software is clearly labelled, so users are fully informed about the software that they are installing. +Traditionally, definitions for multiple repositories were combined into one package (for example, Fedora Workstation edition installs a package called `fedora-workstation-repositories`), but this is discouraged and should not be done in new cases. -== Third party repository distribution +Repositories can be configured with either `enabled_metadata=0` or `enabled_metadata=1` (or equivalent), +at the discretion of the relevant working group or SIG. -Third party repositories should only be distributed in a clearly named RPM package that includes the third party repository definitions. As an example, in the Fedora Workstation edition, this package is called `fedora-workstation-repositories`. To minimize the risk of install conflicts, there should only be one third party repository package. +If they fulfill the requirements set out in this policy, +a Fedora edition or spin install media can include third party repository definitions. -If they fulfill the requirements set out in this policy, third party repository definitions can be included in an edition or spin's install media. However, all repository files must be configured with the `enabled=0` and `enabled_metadata=0` (or equivalent) settings. Each user must explicitly enable third-party repositories in order to view their contents and install from them. The third-party nature of the repository must be clear to the user when they enable it, as should the non-free status of its content, if relevant. +The third-party nature of the repository must be apparent to the user when they enable it, +as should the non-free status of its content, if such. +To ensure this, repository files must initially include the `enabled=0` (or equivalent) setting, +and the user must explicitly enable third-party repositories to install from them. +FESCo may grant an exception to waive this requirement. -An edition or spin is free to include the third party repository definitions of one of the other editions if preferred. +Reuse of repository definitions among editions or spins is encouraged. == Key requirements for third-party repositories -Third party repositories must be approved by an active Fedora working group or SIG, or by FESCo. Groups who approve the inclusion of third party repositories must have a documented process which allows for community input, and which produces a traceable history for each decision (for example, a ticket or other record). +Third-party repositories must be approved by an active Fedora working group or SIG, or by FESCo. +Groups who approve the inclusion of third party repositories must have a documented process which allows for community input, +which produces a traceable history for each decision (for example, a ticket or other record). -Additionally, repositories that are included in an edition or spin's third-party repository list must conform to the following requirements: +Additionally, repositories included in an edition or spin's third-party repository list must conform to the following requirements: -* Just as with any software hosted by Fedora, third party repositories must not contain material that poses undue legal risk for the Fedora Project or its sponsors. This includes, but is not limited to, software with known patent issues, copyright issues or software tailored for conducting illegal activities. Fedora working groups should evaluate if a proposed addition or provider poses a significant risk, and if in doubt confer with Fedora Legal for advice. -* Working groups should ensure that the software included in any third party repository is reliable. While a formal SLA (Service Level Agreement) may not exist, the repository is expected to be something Fedora can rely upon. Working groups should be informed of changes in ownership of third party repositories. -* Changes should not impact on other Fedora editions or spins. For example, Fedora Workstation will populate the `fedora-workstation-repositories` package and include it in the workstation's comps group, but that doesn't mean that other editions or spins must do the same. -* Working groups and SIGs should maintain close control over the software that is made available through third party repositories, in order to prevent unvetted software being made available to Fedora users. As part of this, third party repositories should be managed in such a way that Fedora Legal can easily audit them at any time. This implies that third party repositories should be limited to including small numbers of packages, or that measures should be put in place to limit which packages are made available from a particular repository. +* Just as with any software hosted by Fedora, third party repositories must not contain material that poses an undue legal risk for the Fedora Project or its sponsors. This risk includes, but is not limited to, software with known patent issues, copyright issues, or software tailored for conducting illegal activities. Fedora working groups should evaluate if a proposed addition or provider poses a significant risk, and if in doubt, confer with Fedora Legal for advice. +* Changes made by one Edition or spin should not impact other Fedora editions or spins. +* Working groups and SIGs should maintain oversight over the software that is made available through third-party repositories, to prevent unvetted software being made available to Fedora users. As part of this, third-party repositories should allow easy auditing by Fedora Legal. This requirement implies that third-party repositories should limit themselves to a small number of packages, or that measures should be put in place to define which packages are made available from a particular repository by default. -A working group must regularly review the repositories included in its third party repository list, in order to identify and correct issues that might arise. +=== Software labeling and metadata -=== Software labelling and metadata +Third-party and non-free software should be identifiable to users through software management tools before installation. +In general, this requirement applies to the primary software management tools used in a given edition or spin. +For Fedora Workstation, this is GNOME Software, the primary software installer for the desktop. -Third party and non-free software should be clearly identifiable to users through software management tools, prior to installation. For Fedora Workstation, this requirement applies to GNOME Software, the primary software installer for the desktop. For other editions and tools, the maintainers of the primary software management tools should work with FESCo to decide how to ensure adequate software labelling. +== Third-party software requirements -== Third party software requirements - -The software that is included in each third-party repository must conform to the following requirements. +Software included in each third-party repository must conform to the following requirements. === Software packaged as RPMs -Requirements for software packaged using RPM: +Requirements for software packaged as RPMs: -* Applications that ship as RPMs should conform with link:https://docs.fedoraproject.org/en-US/packaging-guidelines/[Fedora's RPM guidelines] as closely as possible. However, while this is best practice, it is not a hard requirement. (This more relaxed approach to RPM packaging is intended to allow software to be included for whom it is difficult to conform to Fedora's packaging guidelines.) -* Software must be included in a DNF repository as described in the link:https://docs.fedoraproject.org/en-US/fedora/rawhide/system-administrators-guide/package-management/DNF/[Fedora System Administrators Guide]. -* Repository can contain multiple applications. However, third parties are strongly recommended to ship their software in single application repositories as it will greatly increase chances of repository being accepted for inclusion. This minimizes the risk of "collateral damage" if one piece of software must be de-listed from Fedora temporarily or permanently for legal or other reasons. -* Repositories that mix types of software or applications are strongly discouraged. For example, a mixture of desktop and server software. -* RPM packages must not require or recommend packages containing a .desktop file, unless they are add-ons for that package with appropriate AppStream data. Amongst other things, this is intended to prevent application stacks being dragging into the system in a way that confuses users. -* RPM packages in a third party repository must replace packages provided by official Fedora repositories, nor should the break dependencies between those packages. +* Applications that ship as RPMs should conform with link:https://docs.fedoraproject.org/en-US/packaging-guidelines/[Fedora's RPM guidelines]. However, while this is the best practice, it is not a hard requirement. (This more relaxed approach to RPM packaging allows the inclusion of software for which it is difficult to conform to Fedora's packaging guidelines.) +* Software must be included in an RPM repository as described in the link:https://docs.fedoraproject.org/en-US/fedora/rawhide/system-administrators-guide/package-management/DNF/[Fedora System Administrators Guide]. +* RPM packages in a third-party repository must not replace packages provided by official Fedora repositories, nor break dependencies between those packages. === Software packaged using other formats -The Fedora project will likely want to offer software in formats beyond those mentioned above in the future. If those formats have special policy requirements, this policy document will require revision. However, requirements for these formats may be covered by the rules for registries below. - -=== Software management tools - -Third party repositories can include software which is itself a mechanism or system for installing further software packages. Potential examples include Steam and Chrome. When a software management tool is provided by a third party repositoriy, it must conform to the following requirements: - -* The software they provide must conform to the legal requirements outlined above. -* Their software should not interfere with normal operation of the system. This means that the software should not overwrite parts of the system or cause issues with the core functionality of the system. -* If a third party repo provides a software management tool which installs desktop applications, it should be possible for the desktop software management app to track or remove those apps. For example, GNOME Software should be able to track and remove games installed using Steam. +* Applications in other packaging formats should conform with guidelines and best practices appropriate for those formats. == Duplicates and replacements -Third party repositories can be used to supplement official Fedora software and, in some limited cases, be used to replace software that is included in the official Fedora repositories. - -=== Duplicates - -A third party repository can include additional versions of software that is contained in the official Fedora repositories. This can be done to make a different version available or to make the software available in a different format. In each case, installing the version from the third party repository should not replace any installed version from the official repositories. - -In the case of graphical applications, approval must be given by a relevant working group in order for additional versions to be included. (This is in order to prevent the multiplication of versions of the same software.) If a package affects multiple working groups, FESCo can be asked to mediate. - -=== Replacements - -Software which is included in the official Fedora repositories can only be replaced by a third party repository, under the following circumstances: - -* The affected software must not form part of the system or critical features. The general expectation is that replacements will typically only happen for applications. -* Replacements should only take place when it is decided that the third party repository is to become the primary distribution mechanism for that piece of software. Typically this will involve the removal of the software from Fedora's official repositories. -* An effort should be made to ensure a smooth transition for existing users of the software, as the distribution channel is switched. - -The main example of replacement is providing a desktop application as a third party Flatpak as opposed to an RPM in the official repositories. - -==== Competing versions - -If there are different providers who disagree about which package should be the primary offering in Fedora (or a specific Edition), the new package's provider must file a ticket with FESCo asking to replace the previous package. FESCo will then try to mediate, and if no agreement is reached FESCo must decide which package to use. - -When deciding between different versions of a software package, it is suggested that preference be given to packages that: - -* are more closely aligned with Fedora the policies and goals (including those of specific editions) -* are from an upstream project or company -* are from experienced or long-term Fedora contributors -* are of greater technical quality +Third-party repositories can supplement official Fedora software. +In limited cases, they can be used to replace software included in the official Fedora repositories. Such situations require FESCo approval. == Maintaining a third-party repository -Those who are responsible for a repository which is included as a third party repository should notify the Fedora project if: +Those responsible for a repository included as a third party repository should notify the Fedora project if: -* the repository ceases to be maintained, or will cease to be maintained in the future -* the contents of the repository changes, either in terms of the software included, or how it is licensed +* repository maintenance ends or will end in the future +* the contents of the repository changes, either in terms of the software included or its licensing -Fedora may also define agreements with third-party maintainers. +Fedora working groups or FESCo may also define agreements with third-party maintainers.