| .. SPDX-License-Identifier: GPL-2.0 | |
| .. _researcher_guidelines: | |
| Researcher Guidelines | |
| +++++++++++++++++++++ | |
| The Linux kernel community welcomes transparent research on the Linux | |
| kernel, the activities involved in producing it, and any other byproducts | |
| of its development. Linux benefits greatly from this kind of research, and | |
| most aspects of Linux are driven by research in one form or another. | |
| The community greatly appreciates if researchers can share preliminary | |
| findings before making their results public, especially if such research | |
| involves security. Getting involved early helps both improve the quality | |
| of research and ability for Linux to improve from it. In any case, | |
| sharing open access copies of the published research with the community | |
| is recommended. | |
| This document seeks to clarify what the Linux kernel community considers | |
| acceptable and non-acceptable practices when conducting such research. At | |
| the very least, such research and related activities should follow | |
| standard research ethics rules. For more background on research ethics | |
| generally, ethics in technology, and research of developer communities | |
| in particular, see: | |
| * `History of Research Ethics <https://www.unlv.edu/research/ORI-HSR/history-ethics>`_ | |
| * `IEEE Ethics <https://www.ieee.org/about/ethics/index.html>`_ | |
| * `Developer and Researcher Views on the Ethics of Experiments on Open-Source Projects <https://arxiv.org/pdf/2112.13217.pdf>`_ | |
| The Linux kernel community expects that everyone interacting with the | |
| project is participating in good faith to make Linux better. Research on | |
| any publicly-available artifact (including, but not limited to source | |
| code) produced by the Linux kernel community is welcome, though research | |
| on developers must be distinctly opt-in. | |
| Passive research that is based entirely on publicly available sources, | |
| including posts to public mailing lists and commits to public | |
| repositories, is clearly permissible. Though, as with any research, | |
| standard ethics must still be followed. | |
| Active research on developer behavior, however, must be done with the | |
| explicit agreement of, and full disclosure to, the individual developers | |
| involved. Developers cannot be interacted with/experimented on without | |
| consent; this, too, is standard research ethics. | |
| Surveys | |
| ======= | |
| Research often takes the form of surveys sent to maintainers or | |
| contributors. As a general rule, though, the kernel community derives | |
| little value from these surveys. The kernel development process works | |
| because every developer benefits from their participation, even working | |
| with others who have different goals. Responding to a survey, though, is a | |
| one-way demand placed on busy developers with no corresponding benefit to | |
| themselves or to the kernel community as a whole. For this reason, this | |
| method of research is discouraged. | |
| Kernel community members already receive far too much email and are likely | |
| to perceive survey requests as just another demand on their time. Sending | |
| such requests deprives the community of valuable contributor time and is | |
| unlikely to yield a statistically useful response. | |
| As an alternative, researchers should consider attending developer events, | |
| hosting sessions where the research project and its benefits to the | |
| participants can be explained, and interacting directly with the community | |
| there. The information received will be far richer than that obtained from | |
| an email survey, and the community will gain from the ability to learn from | |
| your insights as well. | |
| Patches | |
| ======= | |
| To help clarify: sending patches to developers *is* interacting | |
| with them, but they have already consented to receiving *good faith | |
| contributions*. Sending intentionally flawed/vulnerable patches or | |
| contributing misleading information to discussions is not consented | |
| to. Such communication can be damaging to the developer (e.g. draining | |
| time, effort, and morale) and damaging to the project by eroding | |
| the entire developer community's trust in the contributor (and the | |
| contributor's organization as a whole), undermining efforts to provide | |
| constructive feedback to contributors, and putting end users at risk of | |
| software flaws. | |
| Participation in the development of Linux itself by researchers, as | |
| with anyone, is welcomed and encouraged. Research into Linux code is | |
| a common practice, especially when it comes to developing or running | |
| analysis tools that produce actionable results. | |
| When engaging with the developer community, sending a patch has | |
| traditionally been the best way to make an impact. Linux already has | |
| plenty of known bugs -- what's much more helpful is having vetted fixes. | |
| Before contributing, carefully read the appropriate documentation: | |
| * Documentation/process/development-process.rst | |
| * Documentation/process/submitting-patches.rst | |
| * Documentation/admin-guide/reporting-issues.rst | |
| * Documentation/process/security-bugs.rst | |
| Then send a patch (including a commit log with all the details listed | |
| below) and follow up on any feedback from other developers. | |
| When sending patches produced from research, the commit logs should | |
| contain at least the following details, so that developers have | |
| appropriate context for understanding the contribution. Answer: | |
| * What is the specific problem that has been found? | |
| * How could the problem be reached on a running system? | |
| * What effect would encountering the problem have on the system? | |
| * How was the problem found? Specifically include details about any | |
| testing, static or dynamic analysis programs, and any other tools or | |
| methods used to perform the work. | |
| * Which version of Linux was the problem found on? Using the most recent | |
| release or a recent linux-next branch is strongly preferred (see | |
| Documentation/process/howto.rst). | |
| * What was changed to fix the problem, and why it is believed to be correct? | |
| * How was the change build tested and run-time tested? | |
| * What prior commit does this change fix? This should go in a "Fixes:" | |
| tag as the documentation describes. | |
| * Who else has reviewed this patch? This should go in appropriate | |
| "Reviewed-by:" tags; see below. | |
| For example:: | |
| From: Author <author@email> | |
| Subject: [PATCH] drivers/foo_bar: Add missing kfree() | |
| The error path in foo_bar driver does not correctly free the allocated | |
| struct foo_bar_info. This can happen if the attached foo_bar device | |
| rejects the initialization packets sent during foo_bar_probe(). This | |
| would result in a 64 byte slab memory leak once per device attach, | |
| wasting memory resources over time. | |
| This flaw was found using an experimental static analysis tool we are | |
| developing, LeakMagic[1], which reported the following warning when | |
| analyzing the v5.15 kernel release: | |
| path/to/foo_bar.c:187: missing kfree() call? | |
| Add the missing kfree() to the error path. No other references to | |
| this memory exist outside the probe function, so this is the only | |
| place it can be freed. | |
| x86_64 and arm64 defconfig builds with CONFIG_FOO_BAR=y using GCC | |
| 11.2 show no new warnings, and LeakMagic no longer warns about this | |
| code path. As we don't have a FooBar device to test with, no runtime | |
| testing was able to be performed. | |
| [1] https://url/to/leakmagic/details | |
| Reported-by: Researcher <researcher@email> | |
| Fixes: aaaabbbbccccdddd ("Introduce support for FooBar") | |
| Signed-off-by: Author <author@email> | |
| Reviewed-by: Reviewer <reviewer@email> | |
| If you are a first time contributor it is recommended that the patch | |
| itself be vetted by others privately before being posted to public lists. | |
| (This is required if you have been explicitly told your patches need | |
| more careful internal review.) These people are expected to have their | |
| "Reviewed-by" tag included in the resulting patch. Finding another | |
| developer familiar with Linux contribution, especially within your own | |
| organization, and having them help with reviews before sending them to | |
| the public mailing lists tends to significantly improve the quality of the | |
| resulting patches, and there by reduces the burden on other developers. | |
| If no one can be found to internally review patches and you need | |
| help finding such a person, or if you have any other questions | |
| related to this document and the developer community's expectations, | |
| please reach out to the private Technical Advisory Board mailing list: | |
| <tech-board@groups.linuxfoundation.org>. |