Jonathan Corbet | 75b0214 | 2008-09-30 15:15:56 -0600 | [diff] [blame] | 1 | 1: A GUIDE TO THE KERNEL DEVELOPMENT PROCESS |
| 2 | |
| 3 | The purpose of this document is to help developers (and their managers) |
| 4 | work with the development community with a minimum of frustration. It is |
| 5 | an attempt to document how this community works in a way which is |
| 6 | accessible to those who are not intimately familiar with Linux kernel |
| 7 | development (or, indeed, free software development in general). While |
| 8 | there is some technical material here, this is very much a process-oriented |
| 9 | discussion which does not require a deep knowledge of kernel programming to |
| 10 | understand. |
| 11 | |
| 12 | |
| 13 | 1.1: EXECUTIVE SUMMARY |
| 14 | |
| 15 | The rest of this section covers the scope of the kernel development process |
| 16 | and the kinds of frustrations that developers and their employers can |
| 17 | encounter there. There are a great many reasons why kernel code should be |
| 18 | merged into the official ("mainline") kernel, including automatic |
| 19 | availability to users, community support in many forms, and the ability to |
| 20 | influence the direction of kernel development. Code contributed to the |
| 21 | Linux kernel must be made available under a GPL-compatible license. |
| 22 | |
| 23 | Section 2 introduces the development process, the kernel release cycle, and |
| 24 | the mechanics of the merge window. The various phases in the patch |
| 25 | development, review, and merging cycle are covered. There is some |
| 26 | discussion of tools and mailing lists. Developers wanting to get started |
| 27 | with kernel development are encouraged to track down and fix bugs as an |
| 28 | initial exercise. |
| 29 | |
| 30 | Section 3 covers early-stage project planning, with an emphasis on |
| 31 | involving the development community as soon as possible. |
| 32 | |
| 33 | Section 4 is about the coding process; several pitfalls which have been |
| 34 | encountered by other developers are discussed. Some requirements for |
| 35 | patches are covered, and there is an introduction to some of the tools |
| 36 | which can help to ensure that kernel patches are correct. |
| 37 | |
| 38 | Section 5 talks about the process of posting patches for review. To be |
| 39 | taken seriously by the development community, patches must be properly |
| 40 | formatted and described, and they must be sent to the right place. |
| 41 | Following the advice in this section should help to ensure the best |
| 42 | possible reception for your work. |
| 43 | |
| 44 | Section 6 covers what happens after posting patches; the job is far from |
| 45 | done at that point. Working with reviewers is a crucial part of the |
| 46 | development process; this section offers a number of tips on how to avoid |
| 47 | problems at this important stage. Developers are cautioned against |
| 48 | assuming that the job is done when a patch is merged into the mainline. |
| 49 | |
| 50 | Section 7 introduces a couple of "advanced" topics: managing patches with |
| 51 | git and reviewing patches posted by others. |
| 52 | |
| 53 | Section 8 concludes the document with pointers to sources for more |
| 54 | information on kernel development. |
| 55 | |
| 56 | |
| 57 | 1.2: WHAT THIS DOCUMENT IS ABOUT |
| 58 | |
Jonathan Corbet | 5c050fb | 2011-03-25 12:17:53 -0600 | [diff] [blame] | 59 | The Linux kernel, at over 8 million lines of code and well over 1000 |
| 60 | contributors to each release, is one of the largest and most active free |
| 61 | software projects in existence. Since its humble beginning in 1991, this |
| 62 | kernel has evolved into a best-of-breed operating system component which |
| 63 | runs on pocket-sized digital music players, desktop PCs, the largest |
| 64 | supercomputers in existence, and all types of systems in between. It is a |
| 65 | robust, efficient, and scalable solution for almost any situation. |
Jonathan Corbet | 75b0214 | 2008-09-30 15:15:56 -0600 | [diff] [blame] | 66 | |
| 67 | With the growth of Linux has come an increase in the number of developers |
| 68 | (and companies) wishing to participate in its development. Hardware |
| 69 | vendors want to ensure that Linux supports their products well, making |
| 70 | those products attractive to Linux users. Embedded systems vendors, who |
| 71 | use Linux as a component in an integrated product, want Linux to be as |
| 72 | capable and well-suited to the task at hand as possible. Distributors and |
| 73 | other software vendors who base their products on Linux have a clear |
| 74 | interest in the capabilities, performance, and reliability of the Linux |
| 75 | kernel. And end users, too, will often wish to change Linux to make it |
| 76 | better suit their needs. |
| 77 | |
| 78 | One of the most compelling features of Linux is that it is accessible to |
| 79 | these developers; anybody with the requisite skills can improve Linux and |
| 80 | influence the direction of its development. Proprietary products cannot |
| 81 | offer this kind of openness, which is a characteristic of the free software |
| 82 | process. But, if anything, the kernel is even more open than most other |
| 83 | free software projects. A typical three-month kernel development cycle can |
| 84 | involve over 1000 developers working for more than 100 different companies |
| 85 | (or for no company at all). |
| 86 | |
| 87 | Working with the kernel development community is not especially hard. But, |
| 88 | that notwithstanding, many potential contributors have experienced |
| 89 | difficulties when trying to do kernel work. The kernel community has |
| 90 | evolved its own distinct ways of operating which allow it to function |
| 91 | smoothly (and produce a high-quality product) in an environment where |
| 92 | thousands of lines of code are being changed every day. So it is not |
| 93 | surprising that Linux kernel development process differs greatly from |
| 94 | proprietary development methods. |
| 95 | |
| 96 | The kernel's development process may come across as strange and |
| 97 | intimidating to new developers, but there are good reasons and solid |
| 98 | experience behind it. A developer who does not understand the kernel |
| 99 | community's ways (or, worse, who tries to flout or circumvent them) will |
| 100 | have a frustrating experience in store. The development community, while |
| 101 | being helpful to those who are trying to learn, has little time for those |
| 102 | who will not listen or who do not care about the development process. |
| 103 | |
| 104 | It is hoped that those who read this document will be able to avoid that |
| 105 | frustrating experience. There is a lot of material here, but the effort |
| 106 | involved in reading it will be repaid in short order. The development |
| 107 | community is always in need of developers who will help to make the kernel |
| 108 | better; the following text should help you - or those who work for you - |
| 109 | join our community. |
| 110 | |
| 111 | |
| 112 | 1.3: CREDITS |
| 113 | |
| 114 | This document was written by Jonathan Corbet, corbet@lwn.net. It has been |
| 115 | improved by comments from Johannes Berg, James Berry, Alex Chiang, Roland |
| 116 | Dreier, Randy Dunlap, Jake Edge, Jiri Kosina, Matt Mackall, Arthur Marsh, |
| 117 | Amanda McPherson, Andrew Morton, Andrew Price, Tsugikazu Shibata, and |
Jonathan Corbet | 5c050fb | 2011-03-25 12:17:53 -0600 | [diff] [blame] | 118 | Jochen Voß. |
Jonathan Corbet | 75b0214 | 2008-09-30 15:15:56 -0600 | [diff] [blame] | 119 | |
| 120 | This work was supported by the Linux Foundation; thanks especially to |
| 121 | Amanda McPherson, who saw the value of this effort and made it all happen. |
| 122 | |
| 123 | |
| 124 | 1.4: THE IMPORTANCE OF GETTING CODE INTO THE MAINLINE |
| 125 | |
| 126 | Some companies and developers occasionally wonder why they should bother |
| 127 | learning how to work with the kernel community and get their code into the |
| 128 | mainline kernel (the "mainline" being the kernel maintained by Linus |
| 129 | Torvalds and used as a base by Linux distributors). In the short term, |
| 130 | contributing code can look like an avoidable expense; it seems easier to |
| 131 | just keep the code separate and support users directly. The truth of the |
| 132 | matter is that keeping code separate ("out of tree") is a false economy. |
| 133 | |
| 134 | As a way of illustrating the costs of out-of-tree code, here are a few |
| 135 | relevant aspects of the kernel development process; most of these will be |
| 136 | discussed in greater detail later in this document. Consider: |
| 137 | |
| 138 | - Code which has been merged into the mainline kernel is available to all |
| 139 | Linux users. It will automatically be present on all distributions which |
| 140 | enable it. There is no need for driver disks, downloads, or the hassles |
| 141 | of supporting multiple versions of multiple distributions; it all just |
| 142 | works, for the developer and for the user. Incorporation into the |
| 143 | mainline solves a large number of distribution and support problems. |
| 144 | |
| 145 | - While kernel developers strive to maintain a stable interface to user |
| 146 | space, the internal kernel API is in constant flux. The lack of a stable |
| 147 | internal interface is a deliberate design decision; it allows fundamental |
| 148 | improvements to be made at any time and results in higher-quality code. |
| 149 | But one result of that policy is that any out-of-tree code requires |
| 150 | constant upkeep if it is to work with new kernels. Maintaining |
| 151 | out-of-tree code requires significant amounts of work just to keep that |
| 152 | code working. |
| 153 | |
| 154 | Code which is in the mainline, instead, does not require this work as the |
| 155 | result of a simple rule requiring any developer who makes an API change |
| 156 | to also fix any code that breaks as the result of that change. So code |
| 157 | which has been merged into the mainline has significantly lower |
| 158 | maintenance costs. |
| 159 | |
| 160 | - Beyond that, code which is in the kernel will often be improved by other |
| 161 | developers. Surprising results can come from empowering your user |
| 162 | community and customers to improve your product. |
| 163 | |
| 164 | - Kernel code is subjected to review, both before and after merging into |
| 165 | the mainline. No matter how strong the original developer's skills are, |
| 166 | this review process invariably finds ways in which the code can be |
| 167 | improved. Often review finds severe bugs and security problems. This is |
| 168 | especially true for code which has been developed in a closed |
| 169 | environment; such code benefits strongly from review by outside |
| 170 | developers. Out-of-tree code is lower-quality code. |
| 171 | |
| 172 | - Participation in the development process is your way to influence the |
| 173 | direction of kernel development. Users who complain from the sidelines |
| 174 | are heard, but active developers have a stronger voice - and the ability |
| 175 | to implement changes which make the kernel work better for their needs. |
| 176 | |
| 177 | - When code is maintained separately, the possibility that a third party |
| 178 | will contribute a different implementation of a similar feature always |
| 179 | exists. Should that happen, getting your code merged will become much |
| 180 | harder - to the point of impossibility. Then you will be faced with the |
| 181 | unpleasant alternatives of either (1) maintaining a nonstandard feature |
| 182 | out of tree indefinitely, or (2) abandoning your code and migrating your |
| 183 | users over to the in-tree version. |
| 184 | |
| 185 | - Contribution of code is the fundamental action which makes the whole |
| 186 | process work. By contributing your code you can add new functionality to |
| 187 | the kernel and provide capabilities and examples which are of use to |
| 188 | other kernel developers. If you have developed code for Linux (or are |
| 189 | thinking about doing so), you clearly have an interest in the continued |
| 190 | success of this platform; contributing code is one of the best ways to |
| 191 | help ensure that success. |
| 192 | |
| 193 | All of the reasoning above applies to any out-of-tree kernel code, |
| 194 | including code which is distributed in proprietary, binary-only form. |
| 195 | There are, however, additional factors which should be taken into account |
| 196 | before considering any sort of binary-only kernel code distribution. These |
| 197 | include: |
| 198 | |
| 199 | - The legal issues around the distribution of proprietary kernel modules |
| 200 | are cloudy at best; quite a few kernel copyright holders believe that |
| 201 | most binary-only modules are derived products of the kernel and that, as |
| 202 | a result, their distribution is a violation of the GNU General Public |
| 203 | license (about which more will be said below). Your author is not a |
| 204 | lawyer, and nothing in this document can possibly be considered to be |
| 205 | legal advice. The true legal status of closed-source modules can only be |
| 206 | determined by the courts. But the uncertainty which haunts those modules |
| 207 | is there regardless. |
| 208 | |
| 209 | - Binary modules greatly increase the difficulty of debugging kernel |
| 210 | problems, to the point that most kernel developers will not even try. So |
| 211 | the distribution of binary-only modules will make it harder for your |
| 212 | users to get support from the community. |
| 213 | |
| 214 | - Support is also harder for distributors of binary-only modules, who must |
| 215 | provide a version of the module for every distribution and every kernel |
| 216 | version they wish to support. Dozens of builds of a single module can |
| 217 | be required to provide reasonably comprehensive coverage, and your users |
| 218 | will have to upgrade your module separately every time they upgrade their |
| 219 | kernel. |
| 220 | |
| 221 | - Everything that was said above about code review applies doubly to |
| 222 | closed-source code. Since this code is not available at all, it cannot |
| 223 | have been reviewed by the community and will, beyond doubt, have serious |
Jonathan Corbet | 5c050fb | 2011-03-25 12:17:53 -0600 | [diff] [blame] | 224 | problems. |
Jonathan Corbet | 75b0214 | 2008-09-30 15:15:56 -0600 | [diff] [blame] | 225 | |
| 226 | Makers of embedded systems, in particular, may be tempted to disregard much |
| 227 | of what has been said in this section in the belief that they are shipping |
| 228 | a self-contained product which uses a frozen kernel version and requires no |
| 229 | more development after its release. This argument misses the value of |
| 230 | widespread code review and the value of allowing your users to add |
| 231 | capabilities to your product. But these products, too, have a limited |
| 232 | commercial life, after which a new version must be released. At that |
| 233 | point, vendors whose code is in the mainline and well maintained will be |
| 234 | much better positioned to get the new product ready for market quickly. |
| 235 | |
| 236 | |
| 237 | 1.5: LICENSING |
| 238 | |
| 239 | Code is contributed to the Linux kernel under a number of licenses, but all |
| 240 | code must be compatible with version 2 of the GNU General Public License |
| 241 | (GPLv2), which is the license covering the kernel distribution as a whole. |
| 242 | In practice, that means that all code contributions are covered either by |
| 243 | GPLv2 (with, optionally, language allowing distribution under later |
| 244 | versions of the GPL) or the three-clause BSD license. Any contributions |
| 245 | which are not covered by a compatible license will not be accepted into the |
| 246 | kernel. |
| 247 | |
| 248 | Copyright assignments are not required (or requested) for code contributed |
| 249 | to the kernel. All code merged into the mainline kernel retains its |
| 250 | original ownership; as a result, the kernel now has thousands of owners. |
| 251 | |
| 252 | One implication of this ownership structure is that any attempt to change |
| 253 | the licensing of the kernel is doomed to almost certain failure. There are |
| 254 | few practical scenarios where the agreement of all copyright holders could |
| 255 | be obtained (or their code removed from the kernel). So, in particular, |
| 256 | there is no prospect of a migration to version 3 of the GPL in the |
| 257 | foreseeable future. |
| 258 | |
| 259 | It is imperative that all code contributed to the kernel be legitimately |
| 260 | free software. For that reason, code from anonymous (or pseudonymous) |
| 261 | contributors will not be accepted. All contributors are required to "sign |
| 262 | off" on their code, stating that the code can be distributed with the |
| 263 | kernel under the GPL. Code which has not been licensed as free software by |
| 264 | its owner, or which risks creating copyright-related problems for the |
| 265 | kernel (such as code which derives from reverse-engineering efforts lacking |
| 266 | proper safeguards) cannot be contributed. |
| 267 | |
| 268 | Questions about copyright-related issues are common on Linux development |
| 269 | mailing lists. Such questions will normally receive no shortage of |
| 270 | answers, but one should bear in mind that the people answering those |
| 271 | questions are not lawyers and cannot provide legal advice. If you have |
| 272 | legal questions relating to Linux source code, there is no substitute for |
| 273 | talking with a lawyer who understands this field. Relying on answers |
| 274 | obtained on technical mailing lists is a risky affair. |