| 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. |