KernelDriverPolicy

= Getting out of tree drivers included in the Fedora kernel. =

The simplest method by far, is for the driver to get merged upstream in Linus Torvalds kernel. Fedora constantly rebases to newer upstream releases, so inherits these changes "for free" with little overhead for the Fedora kernel maintainers.

Adding external drivers to the Fedora kernel that aren't accepted upstream requires an ongoing effort for the Fedora kernel team, so where possible, we try to avoid doing so. In the few situations where it makes sense to do so, there are several criteria that must be met.

- Adding an EXPORT_SYMBOL to export something that previously wasn't exported - Changing an EXPORT_SYMBOL_GPL to EXPORT_SYMBOL - Changing an EXPORT_SYMBOL to EXPORT_SYMBOL_GPL
 * There must be reasonable demand for the feature for us taking on the burden of carrying the code until it gets upstream.
 * Passes basic sanity checks (has been reviewed by at least one Fedora kernel maintainer)
 * Has an upstream developer actively trying to get their code merged into Linus' tree.
 * Has a Fedora developer responsible for keeping it up to date, improved etc in Fedora.
 * Causes no discernible overhead for Fedora kernel maintainers. Code that must be continually fixed up tends to end up getting dropped. (Bonus points if the code is clearly 'on its way' upstream, via -mm or linux-next)
 * Doesn't add new system calls or similar ABI defining characteristics. (To avoid a situation where we could end up with incompatibilities between distros/upstream)
 * How a symbol is exported needs to be accepted upstream first. This includes:
 * In the rare case where we add exports that aren't upstream, we err on the side of caution and use EXPORT_SYMBOL_GPL to export them. This is done partly as a deterrent for 3rd-party modules not to use them. (As they may go away in the future). The only exception to all of the above is in new not-yet-merged upstream code that's being added. New symbols get to be exported however the author intended.