= Fedora Third Party Software Packaging Policy =
= Fedora Third Party Software Packaging Policy =
Fedora's [https://docs.fedoraproject.org/en-US/fesco/Third_Party_Repository_Policy/ third party repository policy] allows Fedora editions and spins to make software available to install from third parties (ie. not from Fedora). This policy provides additional rules and guidance for using and applying this policy. It is intended to be used by FESCo, Fedora Working Groups and SIGs, and the maintainers of third party software and repositories.
[https://docs.fedoraproject.org/en-US/fesco/Third_Party_Repository_Policy/ Fedora's third party repository ] is hosted by . This page to an which by the Workstation . is for .
This policy cover topics such as which software can be included in third party repositories, and how that software should be managed in relation to the software from the official Fedora repositories. They also set out how this software should be presented to users, and the community processes that ought to be in place for decision making.
== Background & goals ==
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 possible the threshold for users to get the software they need, we can accelerate the growth of the Fedora community. Doing so also ensures that we are in the best position possible to spread the values and goals of the Fedora project as widely as possible.
This policy is motivated by:
* Recurring negative points when Fedora is reviewed, particularly but not exclusively regarding Fedora Workstation
* Feedback exercises such as [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 [https://eischmann.wordpress.com/2015/07/31/most-popular-web-browsers-among-fedora-users/ run third party software] on Fedora
The policy aims to make the widest possible range of software available to Fedora users in a easily consumable format, while ensuring the software has labels and metadata that allows users to decide on the software they install. It does this by allowing software from outside the traditional official Fedora repositories to be made available to our users, including software that is packaged using formats other than RPM.
== Software tiers ==
Under this policy, there are two tiers of software available in Fedora:
* '''Tier one''': software packaged and hosted by the Fedora Project. This is essentially the software today packaged as RPMs and used to build the various Fedora editions. The policy allows tier one software to be packaged using formats other than RPM; in particular, using Moby images and Flatpak images.
* '''Tier two''': software hosted and packaged outside of Fedora, but discoverable and installable through Fedora software tooling. This software might be hosted elsewhere due to the preference of an upstream maintainer, legal restrictions, or inability to comply with Fedora software policies. An example of software in the second tier is COPRs, which are FOSS and legally unencumbered, but for example may provide alternate builds of software that is included in tier one.
== Inclusion requirements for third-party software ==
To be included in Fedora's third party repositories, software must conform to the following requirements.
=== General requirements ===
* Just as with any software hosted by Fedora, third party software 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. The Fedora working groups will 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, the Workstation will populate the fedora-workstation-repositories package and include it in the Workstation's comps group, but that doesn't mean other editions or spins must do the same.
=== Software packaged as RPMs ===
Requirements for software packaged using RPM:
* Applications that ship as RPMs should conform with [https://fedoraproject.org/wiki/How_to_create_an_RPM_package 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 [Fedora System Administrators Guide https://docs.fedoraproject.org/en-US/fedora/rawhide/system-administrators-guide/package-management/DNF/]
* 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 not break dependencies or otherwise replace packages provided by official Fedora repositories.
=== Software packaged as Moby (aka Docker) images ===
TBD: rules for Moby images will be developed by the Fedora Server and Fedora Cloud working groups.
=== Software packaged as Flatpaks ===
Flatpaks hosted by Fedora (tier one) must be built using the official Fedora Flatpak runtime.
=== 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 ===
Software packages can contain mechanisms or systems for installing further software packages. Examples include Steam, Firefox, Chrome, Moby, Maven, NPM, PyPi, and Rubygems.org. Requirements for these include:
* 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.
* It should be possible for Fedora's main software management tools to track or remove the software that is installed with these third-party tools. For example, GNOME Software should be able to track and remove games installed using Steam.
== Procedures and processes ==
General procedures and requirements for those who are using the third party repositories policy, in particular Fedora working groups.
=== Third party repository packages ===
Each edition or spin that wishes to include third party repositories must create a clearly named RPM package to include those repository pointers. An edition or spin is free to include the repository definition of one of the other editions if preferred. There should only be one third party repository package, to minimize the risk of install conflicts. As an example, in the Fedora Workstation edition, this package is called ''fedora-workstation-repositories''.
Details on how third party repositories should be configured are included in the [https://docs.fedoraproject.org/en-US/fesco/Third_Party_Repository_Policy/ Fedora third party repository policy].
Guidelines for how to create these repositories can be found [https://fedoraproject.org/wiki/Workstation/Third_party_software_Workstation_Guidelines on this page ]
=== Adding repositories ===
Working groups or SIGs 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).
=== Monitoring of third party repositories ===
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.
=== Replacing a different package format ===
A package may replace a package that is provided in a different format. For instance, an Flatpak may replace an RPM or set of RPMS. If the both packages are supplied by the same provider, then this can be done at the provider's discretion, as long as a reasonable effort is made to provide a smooth transition for users.
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 preferred
* having greater technical quality
=== Adding duplicate packages ===
In some circumstances, it is possible to offer multiple varieties of the same software, such as to make different versions available, or make the software available in different package formats.
In the case of graphical applications, approval must be given by a relevant working group in order for duplicates 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.
=== Software labelling and metadata ===
Users should be able to decide what software to install via clear labelling of that software. In particular, 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.
== Maintaining a third-party repository ==
Those who are responsible for a repository which is included in a Fedora Edition 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
Fedora may also define agreements, to set out expectations for specific third party software providers.