| ============================================ | |
| Kernel Guidelines for Tool-Generated Content | |
| ============================================ | |
| Purpose | |
| ======= | |
| Kernel contributors have been using tooling to generate contributions | |
| for a long time. These tools can increase the volume of contributions. | |
| At the same time, reviewer and maintainer bandwidth is a scarce | |
| resource. Understanding which portions of a contribution come from | |
| humans versus tools is helpful to maintain those resources and keep | |
| kernel development healthy. | |
| The goal here is to clarify community expectations around tools. This | |
| lets everyone become more productive while also maintaining high | |
| degrees of trust between submitters and reviewers. | |
| Out of Scope | |
| ============ | |
| These guidelines do not apply to tools that make trivial tweaks to | |
| preexisting content. Nor do they pertain to tooling that helps with | |
| menial tasks. Some examples: | |
| - Spelling and grammar fix ups, like rephrasing to imperative voice | |
| - Typing aids like identifier completion, common boilerplate or | |
| trivial pattern completion | |
| - Purely mechanical transformations like variable renaming | |
| - Reformatting, like running Lindent, ``clang-format`` or | |
| ``rust-fmt`` | |
| Even whenever your tool use is out of scope, you should still always | |
| consider if it would help reviewing your contribution if the reviewer | |
| knows about the tool that you used. | |
| In Scope | |
| ======== | |
| These guidelines apply when a meaningful amount of content in a kernel | |
| contribution was not written by a person in the Signed-off-by chain, | |
| but was instead created by a tool. | |
| Detection of a problem and testing the fix for it is also part of the | |
| development process; if a tool was used to find a problem addressed by | |
| a change, that should be noted in the changelog. This not only gives | |
| credit where it is due, it also helps fellow developers find out about | |
| these tools. | |
| Some examples: | |
| - Any tool-suggested fix such as ``checkpatch.pl --fix`` | |
| - Coccinelle scripts | |
| - A chatbot generated a new function in your patch to sort list entries. | |
| - A .c file in the patch was originally generated by a coding | |
| assistant but cleaned up by hand. | |
| - The changelog was generated by handing the patch to a generative AI | |
| tool and asking it to write the changelog. | |
| - The changelog was translated from another language. | |
| If in doubt, choose transparency and assume these guidelines apply to | |
| your contribution. | |
| Guidelines | |
| ========== | |
| First, read the Developer's Certificate of Origin: | |
| Documentation/process/submitting-patches.rst. Its rules are simple | |
| and have been in place for a long time. They have covered many | |
| tool-generated contributions. Ensure that you understand your entire | |
| submission and are prepared to respond to review comments. | |
| Second, when making a contribution, be transparent about the origin of | |
| content in cover letters and changelogs. You can be more transparent | |
| by adding information like this: | |
| - What tools were used? | |
| - The input to the tools you used, like the Coccinelle source script. | |
| - If code was largely generated from a single or short set of | |
| prompts, include those prompts. For longer sessions, include a | |
| summary of the prompts and the nature of resulting assistance. | |
| - Which portions of the content were affected by that tool? | |
| - How is the submission tested and what tools were used to test the | |
| fix? | |
| As with all contributions, individual maintainers have discretion to | |
| choose how they handle the contribution. For example, they might: | |
| - Treat it just like any other contribution. | |
| - Reject it outright. | |
| - Treat the contribution specially, for example, asking for extra | |
| testing, reviewing with extra scrutiny, or reviewing at a lower | |
| priority than human-generated content. | |
| - Ask for some other special steps, like asking the contributor to | |
| elaborate on how the tool or model was trained. | |
| - Ask the submitter to explain in more detail about the contribution | |
| so that the maintainer can be assured that the submitter fully | |
| understands how the code works. | |
| - Suggest a better prompt instead of suggesting specific code changes. | |
| If tools permit you to generate a contribution automatically, expect | |
| additional scrutiny in proportion to how much of it was generated. | |
| As with the output of any tooling, the result may be incorrect or | |
| inappropriate. You are expected to understand and to be able to defend | |
| everything you submit. If you are unable to do so, then do not submit | |
| the resulting changes. | |
| If you do so anyway, maintainers are entitled to reject your series | |
| without detailed review. |