€•AŒsphinx.addnodes”Œdocument”“”)”}”(Œ rawsource”Œ”Œchildren”]”(Œ translations”Œ LanguagesNode”“”)”}”(hhh]”(hŒ pending_xref”“”)”}”(hhh]”Œdocutils.nodes”ŒText”“”ŒChinese (Simplified)”…””}”Œparent”hsbaŒ attributes”}”(Œids”]”Œclasses”]”Œnames”]”Œdupnames”]”Œbackrefs”]”Œ refdomain”Œstd”Œreftype”Œdoc”Œ reftarget”Œ)/translations/zh_CN/process/3.Early-stage”Œmodname”NŒ classname”NŒ refexplicit”ˆuŒtagname”hhh ubh)”}”(hhh]”hŒChinese (Traditional)”…””}”hh2sbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ)/translations/zh_TW/process/3.Early-stage”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)”}”(hhh]”hŒItalian”…””}”hhFsbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ)/translations/it_IT/process/3.Early-stage”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)”}”(hhh]”hŒJapanese”…””}”hhZsbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ)/translations/ja_JP/process/3.Early-stage”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)”}”(hhh]”hŒKorean”…””}”hhnsbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ)/translations/ko_KR/process/3.Early-stage”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)”}”(hhh]”hŒSpanish”…””}”hh‚sbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ)/translations/sp_SP/process/3.Early-stage”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubeh}”(h]”h ]”h"]”h$]”h&]”Œcurrent_language”ŒEnglish”uh1h hhŒ _document”hŒsource”NŒline”NubhŒtarget”“”)”}”(hŒ.. _development_early_stage:”h]”h}”(h]”h ]”h"]”h$]”h&]”Œrefid”Œdevelopment-early-stage”uh1h¡h KhhhžhhŸŒC/var/lib/git/docbuild/linux/Documentation/process/3.Early-stage.rst”ubhŒsection”“”)”}”(hhh]”(hŒtitle”“”)”}”(hŒEarly-stage planning”h]”hŒEarly-stage planning”…””}”(hh·hžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hµhh²hžhhŸh¯h KubhŒ paragraph”“”)”}”(hXFWhen contemplating a Linux kernel development project, it can be tempting to jump right in and start coding. As with any significant project, though, much of the groundwork for success is best laid before the first line of code is written. Some time spent in early planning and communication can save far more time later on.”h]”hXFWhen contemplating a Linux kernel development project, it can be tempting to jump right in and start coding. As with any significant project, though, much of the groundwork for success is best laid before the first line of code is written. Some time spent in early planning and communication can save far more time later on.”…””}”(hhÇhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÅhŸh¯h Khh²hžhubh±)”}”(hhh]”(h¶)”}”(hŒSpecifying the problem”h]”hŒSpecifying the problem”…””}”(hhØhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hµhhÕhžhhŸh¯h KubhÆ)”}”(hXbLike any engineering project, a successful kernel enhancement starts with a clear description of the problem to be solved. In some cases, this step is easy: when a driver is needed for a specific piece of hardware, for example. In others, though, it is tempting to confuse the real problem with the proposed solution, and that can lead to difficulties.”h]”hXbLike any engineering project, a successful kernel enhancement starts with a clear description of the problem to be solved. In some cases, this step is easy: when a driver is needed for a specific piece of hardware, for example. In others, though, it is tempting to confuse the real problem with the proposed solution, and that can lead to difficulties.”…””}”(hhæhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÅhŸh¯h KhhÕhžhubhÆ)”}”(hXûConsider an example: some years ago, developers working with Linux audio sought a way to run applications without dropouts or other artifacts caused by excessive latency in the system. The solution they arrived at was a kernel module intended to hook into the Linux Security Module (LSM) framework; this module could be configured to give specific applications access to the realtime scheduler. This module was implemented and sent to the linux-kernel mailing list, where it immediately ran into problems.”h]”hXûConsider an example: some years ago, developers working with Linux audio sought a way to run applications without dropouts or other artifacts caused by excessive latency in the system. The solution they arrived at was a kernel module intended to hook into the Linux Security Module (LSM) framework; this module could be configured to give specific applications access to the realtime scheduler. This module was implemented and sent to the linux-kernel mailing list, where it immediately ran into problems.”…””}”(hhôhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÅhŸh¯h KhhÕhžhubhÆ)”}”(hXÔTo the audio developers, this security module was sufficient to solve their immediate problem. To the wider kernel community, though, it was seen as a misuse of the LSM framework (which is not intended to confer privileges onto processes which they would not otherwise have) and a risk to system stability. Their preferred solutions involved realtime scheduling access via the rlimit mechanism for the short term, and ongoing latency reduction work in the long term.”h]”hXÔTo the audio developers, this security module was sufficient to solve their immediate problem. To the wider kernel community, though, it was seen as a misuse of the LSM framework (which is not intended to confer privileges onto processes which they would not otherwise have) and a risk to system stability. Their preferred solutions involved realtime scheduling access via the rlimit mechanism for the short term, and ongoing latency reduction work in the long term.”…””}”(hjhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÅhŸh¯h KhhÕhžhubhÆ)”}”(hX6The audio community, however, could not see past the particular solution they had implemented; they were unwilling to accept alternatives. The resulting disagreement left those developers feeling disillusioned with the entire kernel development process; one of them went back to an audio list and posted this:”h]”hX6The audio community, however, could not see past the particular solution they had implemented; they were unwilling to accept alternatives. The resulting disagreement left those developers feeling disillusioned with the entire kernel development process; one of them went back to an audio list and posted this:”…””}”(hjhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÅhŸh¯h K&hhÕhžhubhŒ block_quote”“”)”}”(hXThere are a number of very good Linux kernel developers, but they tend to get outshouted by a large crowd of arrogant fools. Trying to communicate user requirements to these people is a waste of time. They are much too "intelligent" to listen to lesser mortals. ”h]”hÆ)”}”(hXThere are a number of very good Linux kernel developers, but they tend to get outshouted by a large crowd of arrogant fools. Trying to communicate user requirements to these people is a waste of time. They are much too "intelligent" to listen to lesser mortals.”h]”hX There are a number of very good Linux kernel developers, but they tend to get outshouted by a large crowd of arrogant fools. Trying to communicate user requirements to these people is a waste of time. They are much too “intelligent†to listen to lesser mortals.”…””}”(hj$hžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÅhŸh¯h K,hj ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhŸh¯h K,hhÕhžhubhÆ)”}”(hŒ#(https://lwn.net/Articles/131776/).”h]”(hŒ(”…””}”(hj8hžhhŸNh NubhŒ reference”“”)”}”(hŒ https://lwn.net/Articles/131776/”h]”hŒ https://lwn.net/Articles/131776/”…””}”(hjBhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”Œrefuri”jDuh1j@hj8ubhŒ).”…””}”(hj8hžhhŸNh Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÅhŸh¯h K1hhÕhžhubhÆ)”}”(hXThe reality of the situation was different; the kernel developers were far more concerned about system stability, long-term maintenance, and finding the right solution to the problem than they were with a specific module. The moral of the story is to focus on the problem - not a specific solution - and to discuss it with the development community before investing in the creation of a body of code.”h]”hXThe reality of the situation was different; the kernel developers were far more concerned about system stability, long-term maintenance, and finding the right solution to the problem than they were with a specific module. The moral of the story is to focus on the problem - not a specific solution - and to discuss it with the development community before investing in the creation of a body of code.”…””}”(hj[hžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÅhŸh¯h K3hhÕhžhubhÆ)”}”(hŒkSo, when contemplating a kernel development project, one should obtain answers to a short set of questions:”h]”hŒkSo, when contemplating a kernel development project, one should obtain answers to a short set of questions:”…””}”(hjihžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÅhŸh¯h K:hhÕhžhubj)”}”(hŒÛ- What, exactly, is the problem which needs to be solved? - Who are the users affected by this problem? Which use cases should the solution address? - How does the kernel fall short in addressing that problem now? ”h]”hŒ bullet_list”“”)”}”(hhh]”(hŒ list_item”“”)”}”(hŒ8What, exactly, is the problem which needs to be solved? ”h]”hÆ)”}”(hŒ7What, exactly, is the problem which needs to be solved?”h]”hŒ7What, exactly, is the problem which needs to be solved?”…””}”(hj†hžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÅhŸh¯h K=hj‚ubah}”(h]”h ]”h"]”h$]”h&]”uh1j€hj}ubj)”}”(hŒZWho are the users affected by this problem? Which use cases should the solution address? ”h]”hÆ)”}”(hŒYWho are the users affected by this problem? Which use cases should the solution address?”h]”hŒYWho are the users affected by this problem? Which use cases should the solution address?”…””}”(hjžhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÅhŸh¯h K?hjšubah}”(h]”h ]”h"]”h$]”h&]”uh1j€hj}ubj)”}”(hŒ?How does the kernel fall short in addressing that problem now? ”h]”hÆ)”}”(hŒ>How does the kernel fall short in addressing that problem now?”h]”hŒ>How does the kernel fall short in addressing that problem now?”…””}”(hj¶hžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÅhŸh¯h KBhj²ubah}”(h]”h ]”h"]”h$]”h&]”uh1j€hj}ubeh}”(h]”h ]”h"]”h$]”h&]”Œbullet”Œ-”uh1j{hŸh¯h K=hjwubah}”(h]”h ]”h"]”h$]”h&]”uh1jhŸh¯h K=hhÕhžhubhÆ)”}”(hŒEOnly then does it make sense to start considering possible solutions.”h]”hŒEOnly then does it make sense to start considering possible solutions.”…””}”(hjØhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÅhŸh¯h KDhhÕhžhubeh}”(h]”Œspecifying-the-problem”ah ]”h"]”Œspecifying the problem”ah$]”h&]”uh1h°hh²hžhhŸh¯h Kubh±)”}”(hhh]”(h¶)”}”(hŒEarly discussion”h]”hŒEarly discussion”…””}”(hjñhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hµhjîhžhhŸh¯h KHubhÆ)”}”(hŒÑWhen planning a kernel development project, it makes great sense to hold discussions with the community before launching into implementation. Early communication can save time and trouble in a number of ways:”h]”hŒÑWhen planning a kernel development project, it makes great sense to hold discussions with the community before launching into implementation. Early communication can save time and trouble in a number of ways:”…””}”(hjÿhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÅhŸh¯h KJhjîhžhubj)”}”(hX¬- It may well be that the problem is addressed by the kernel in ways which you have not understood. The Linux kernel is large and has a number of features and capabilities which are not immediately obvious. Not all kernel capabilities are documented as well as one might like, and it is easy to miss things. Your author has seen the posting of a complete driver which duplicated an existing driver that the new author had been unaware of. Code which reinvents existing wheels is not only wasteful; it will also not be accepted into the mainline kernel. - There may be elements of the proposed solution which will not be acceptable for mainline merging. It is better to find out about problems like this before writing the code. - It's entirely possible that other developers have thought about the problem; they may have ideas for a better solution, and may be willing to help in the creation of that solution. ”h]”j|)”}”(hhh]”(j)”}”(hX+It may well be that the problem is addressed by the kernel in ways which you have not understood. The Linux kernel is large and has a number of features and capabilities which are not immediately obvious. Not all kernel capabilities are documented as well as one might like, and it is easy to miss things. Your author has seen the posting of a complete driver which duplicated an existing driver that the new author had been unaware of. Code which reinvents existing wheels is not only wasteful; it will also not be accepted into the mainline kernel. ”h]”hÆ)”}”(hX*It may well be that the problem is addressed by the kernel in ways which you have not understood. The Linux kernel is large and has a number of features and capabilities which are not immediately obvious. Not all kernel capabilities are documented as well as one might like, and it is easy to miss things. Your author has seen the posting of a complete driver which duplicated an existing driver that the new author had been unaware of. Code which reinvents existing wheels is not only wasteful; it will also not be accepted into the mainline kernel.”h]”hX*It may well be that the problem is addressed by the kernel in ways which you have not understood. The Linux kernel is large and has a number of features and capabilities which are not immediately obvious. Not all kernel capabilities are documented as well as one might like, and it is easy to miss things. Your author has seen the posting of a complete driver which duplicated an existing driver that the new author had been unaware of. Code which reinvents existing wheels is not only wasteful; it will also not be accepted into the mainline kernel.”…””}”(hjhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÅhŸh¯h KNhjubah}”(h]”h ]”h"]”h$]”h&]”uh1j€hjubj)”}”(hŒ®There may be elements of the proposed solution which will not be acceptable for mainline merging. It is better to find out about problems like this before writing the code. ”h]”hÆ)”}”(hŒ­There may be elements of the proposed solution which will not be acceptable for mainline merging. It is better to find out about problems like this before writing the code.”h]”hŒ­There may be elements of the proposed solution which will not be acceptable for mainline merging. It is better to find out about problems like this before writing the code.”…””}”(hj0hžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÅhŸh¯h KWhj,ubah}”(h]”h ]”h"]”h$]”h&]”uh1j€hjubj)”}”(hŒµIt's entirely possible that other developers have thought about the problem; they may have ideas for a better solution, and may be willing to help in the creation of that solution. ”h]”hÆ)”}”(hŒ´It's entirely possible that other developers have thought about the problem; they may have ideas for a better solution, and may be willing to help in the creation of that solution.”h]”hŒ¶It’s entirely possible that other developers have thought about the problem; they may have ideas for a better solution, and may be willing to help in the creation of that solution.”…””}”(hjHhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÅhŸh¯h K[hjDubah}”(h]”h ]”h"]”h$]”h&]”uh1j€hjubeh}”(h]”h ]”h"]”h$]”h&]”jÐjÑuh1j{hŸh¯h KNhj ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhŸh¯h KNhjîhžhubhÆ)”}”(hXœYears of experience with the kernel development community have taught a clear lesson: kernel code which is designed and developed behind closed doors invariably has problems which are only revealed when the code is released into the community. Sometimes these problems are severe, requiring months or years of effort before the code can be brought up to the kernel community's standards. Some examples include:”h]”hXžYears of experience with the kernel development community have taught a clear lesson: kernel code which is designed and developed behind closed doors invariably has problems which are only revealed when the code is released into the community. Sometimes these problems are severe, requiring months or years of effort before the code can be brought up to the kernel community’s standards. Some examples include:”…””}”(hjhhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÅhŸh¯h K_hjîhžhubj)”}”(hXø- The Devicescape network stack was designed and implemented for single-processor systems. It could not be merged into the mainline until it was made suitable for multiprocessor systems. Retrofitting locking and such into code is a difficult task; as a result, the merging of this code (now called mac80211) was delayed for over a year. - The Reiser4 filesystem included a number of capabilities which, in the core kernel developers' opinion, should have been implemented in the virtual filesystem layer instead. It also included features which could not easily be implemented without exposing the system to user-caused deadlocks. The late revelation of these problems - and refusal to address some of them - has caused Reiser4 to stay out of the mainline kernel. - The AppArmor security module made use of internal virtual filesystem data structures in ways which were considered to be unsafe and unreliable. This concern (among others) kept AppArmor out of the mainline for years. ”h]”j|)”}”(hhh]”(j)”}”(hXQThe Devicescape network stack was designed and implemented for single-processor systems. It could not be merged into the mainline until it was made suitable for multiprocessor systems. Retrofitting locking and such into code is a difficult task; as a result, the merging of this code (now called mac80211) was delayed for over a year. ”h]”hÆ)”}”(hXPThe Devicescape network stack was designed and implemented for single-processor systems. It could not be merged into the mainline until it was made suitable for multiprocessor systems. Retrofitting locking and such into code is a difficult task; as a result, the merging of this code (now called mac80211) was delayed for over a year.”h]”hXPThe Devicescape network stack was designed and implemented for single-processor systems. It could not be merged into the mainline until it was made suitable for multiprocessor systems. Retrofitting locking and such into code is a difficult task; as a result, the merging of this code (now called mac80211) was delayed for over a year.”…””}”(hjhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÅhŸh¯h Kfhj}ubah}”(h]”h ]”h"]”h$]”h&]”uh1j€hjzubj)”}”(hX«The Reiser4 filesystem included a number of capabilities which, in the core kernel developers' opinion, should have been implemented in the virtual filesystem layer instead. It also included features which could not easily be implemented without exposing the system to user-caused deadlocks. The late revelation of these problems - and refusal to address some of them - has caused Reiser4 to stay out of the mainline kernel. ”h]”hÆ)”}”(hXªThe Reiser4 filesystem included a number of capabilities which, in the core kernel developers' opinion, should have been implemented in the virtual filesystem layer instead. It also included features which could not easily be implemented without exposing the system to user-caused deadlocks. The late revelation of these problems - and refusal to address some of them - has caused Reiser4 to stay out of the mainline kernel.”h]”hX¬The Reiser4 filesystem included a number of capabilities which, in the core kernel developers’ opinion, should have been implemented in the virtual filesystem layer instead. It also included features which could not easily be implemented without exposing the system to user-caused deadlocks. The late revelation of these problems - and refusal to address some of them - has caused Reiser4 to stay out of the mainline kernel.”…””}”(hj™hžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÅhŸh¯h Klhj•ubah}”(h]”h ]”h"]”h$]”h&]”uh1j€hjzubj)”}”(hŒÚThe AppArmor security module made use of internal virtual filesystem data structures in ways which were considered to be unsafe and unreliable. This concern (among others) kept AppArmor out of the mainline for years. ”h]”hÆ)”}”(hŒÙThe AppArmor security module made use of internal virtual filesystem data structures in ways which were considered to be unsafe and unreliable. This concern (among others) kept AppArmor out of the mainline for years.”h]”hŒÙThe AppArmor security module made use of internal virtual filesystem data structures in ways which were considered to be unsafe and unreliable. This concern (among others) kept AppArmor out of the mainline for years.”…””}”(hj±hžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÅhŸh¯h Kthj­ubah}”(h]”h ]”h"]”h$]”h&]”uh1j€hjzubeh}”(h]”h ]”h"]”h$]”h&]”jÐjÑuh1j{hŸh¯h Kfhjvubah}”(h]”h ]”h"]”h$]”h&]”uh1jhŸh¯h KfhjîhžhubhÆ)”}”(hŒŠIn each of these cases, a great deal of pain and extra work could have been avoided with some early discussion with the kernel developers.”h]”hŒŠIn each of these cases, a great deal of pain and extra work could have been avoided with some early discussion with the kernel developers.”…””}”(hjÑhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÅhŸh¯h Kyhjîhžhubeh}”(h]”Œearly-discussion”ah ]”h"]”Œearly discussion”ah$]”h&]”uh1h°hh²hžhhŸh¯h KHubh±)”}”(hhh]”(h¶)”}”(hŒWho do you talk to?”h]”hŒWho do you talk to?”…””}”(hjêhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hµhjçhžhhŸh¯h K~ubhÆ)”}”(hXõWhen developers decide to take their plans public, the next question will be: where do we start? The answer is to find the right mailing list(s) and the right maintainer. For mailing lists, the best approach is to look in the MAINTAINERS file for a relevant place to post. If there is a suitable subsystem list, posting there is often preferable to posting on linux-kernel; you are more likely to reach developers with expertise in the relevant subsystem and the environment may be more supportive.”h]”hXõWhen developers decide to take their plans public, the next question will be: where do we start? The answer is to find the right mailing list(s) and the right maintainer. For mailing lists, the best approach is to look in the MAINTAINERS file for a relevant place to post. If there is a suitable subsystem list, posting there is often preferable to posting on linux-kernel; you are more likely to reach developers with expertise in the relevant subsystem and the environment may be more supportive.”…””}”(hjøhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÅhŸh¯h K€hjçhžhubhÆ)”}”(hX¤Finding maintainers can be a bit harder. Again, the MAINTAINERS file is the place to start. That file tends to not always be up to date, though, and not all subsystems are represented there. The person listed in the MAINTAINERS file may, in fact, not be the person who is actually acting in that role currently. So, when there is doubt about who to contact, a useful trick is to use git (and "git log" in particular) to see who is currently active within the subsystem of interest. Look at who is writing patches, and who, if anybody, is attaching Signed-off-by lines to those patches. Those are the people who will be best placed to help with a new development project.”h]”hX¨Finding maintainers can be a bit harder. Again, the MAINTAINERS file is the place to start. That file tends to not always be up to date, though, and not all subsystems are represented there. The person listed in the MAINTAINERS file may, in fact, not be the person who is actually acting in that role currently. So, when there is doubt about who to contact, a useful trick is to use git (and “git log†in particular) to see who is currently active within the subsystem of interest. Look at who is writing patches, and who, if anybody, is attaching Signed-off-by lines to those patches. Those are the people who will be best placed to help with a new development project.”…””}”(hjhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÅhŸh¯h KˆhjçhžhubhÆ)”}”(hŒŒThe task of finding the right maintainer is sometimes challenging enough that the kernel developers have added a script to ease the process:”h]”hŒŒThe task of finding the right maintainer is sometimes challenging enough that the kernel developers have added a script to ease the process:”…””}”(hjhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÅhŸh¯h K“hjçhžhubhŒ literal_block”“”)”}”(hŒ.../scripts/get_maintainer.pl”h]”hŒ.../scripts/get_maintainer.pl”…””}”hj$sbah}”(h]”h ]”h"]”h$]”h&]”Œ xml:space”Œpreserve”uh1j"hŸh¯h K˜hjçhžhubhÆ)”}”(hX?This script will return the current maintainer(s) for a given file or directory when given the "-f" option. If passed a patch on the command line, it will list the maintainers who should probably receive copies of the patch. This is the preferred way (unlike "-f" option) to get the list of people to Cc for your patches. There are a number of options regulating how hard get_maintainer.pl will search for maintainers; please be careful about using the more aggressive options as you may end up including developers who have no real interest in the code you are modifying.”h]”hXGThis script will return the current maintainer(s) for a given file or directory when given the “-f†option. If passed a patch on the command line, it will list the maintainers who should probably receive copies of the patch. This is the preferred way (unlike “-f†option) to get the list of people to Cc for your patches. There are a number of options regulating how hard get_maintainer.pl will search for maintainers; please be careful about using the more aggressive options as you may end up including developers who have no real interest in the code you are modifying.”…””}”(hj4hžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÅhŸh¯h KšhjçhžhubhÆ)”}”(hŒ|If all else fails, talking to Andrew Morton can be an effective way to track down a maintainer for a specific piece of code.”h]”hŒ|If all else fails, talking to Andrew Morton can be an effective way to track down a maintainer for a specific piece of code.”…””}”(hjBhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÅhŸh¯h K£hjçhžhubeh}”(h]”Œwho-do-you-talk-to”ah ]”h"]”Œwho do you talk to?”ah$]”h&]”uh1h°hh²hžhhŸh¯h K~ubh±)”}”(hhh]”(h¶)”}”(hŒ When to post?”h]”hŒ When to post?”…””}”(hj[hžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hµhjXhžhhŸh¯h K¨ubhÆ)”}”(hX"If possible, posting your plans during the early stages can only be helpful. Describe the problem being solved and any plans that have been made on how the implementation will be done. Any information you can provide can help the development community provide useful input on the project.”h]”hX"If possible, posting your plans during the early stages can only be helpful. Describe the problem being solved and any plans that have been made on how the implementation will be done. Any information you can provide can help the development community provide useful input on the project.”…””}”(hjihžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÅhŸh¯h KªhjXhžhubhÆ)”}”(hXCOne discouraging thing which can happen at this stage is not a hostile reaction, but, instead, little or no reaction at all. The sad truth of the matter is (1) kernel developers tend to be busy, (2) there is no shortage of people with grand plans and little code (or even prospect of code) to back them up, and (3) nobody is obligated to review or comment on ideas posted by others. Beyond that, high-level designs often hide problems which are only revealed when somebody actually tries to implement those designs; for that reason, kernel developers would rather see the code.”h]”hXCOne discouraging thing which can happen at this stage is not a hostile reaction, but, instead, little or no reaction at all. The sad truth of the matter is (1) kernel developers tend to be busy, (2) there is no shortage of people with grand plans and little code (or even prospect of code) to back them up, and (3) nobody is obligated to review or comment on ideas posted by others. Beyond that, high-level designs often hide problems which are only revealed when somebody actually tries to implement those designs; for that reason, kernel developers would rather see the code.”…””}”(hjwhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÅhŸh¯h K°hjXhžhubhÆ)”}”(hX:If a request-for-comments posting yields little in the way of comments, do not assume that it means there is no interest in the project. Unfortunately, you also cannot assume that there are no problems with your idea. The best thing to do in this situation is to proceed, keeping the community informed as you go.”h]”hX:If a request-for-comments posting yields little in the way of comments, do not assume that it means there is no interest in the project. Unfortunately, you also cannot assume that there are no problems with your idea. The best thing to do in this situation is to proceed, keeping the community informed as you go.”…””}”(hj…hžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÅhŸh¯h K¹hjXhžhubeh}”(h]”Œ when-to-post”ah ]”h"]”Œ when to post?”ah$]”h&]”uh1h°hh²hžhhŸh¯h K¨ubh±)”}”(hhh]”(h¶)”}”(hŒGetting official buy-in”h]”hŒGetting official buy-in”…””}”(hjžhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hµhj›hžhhŸh¯h KÁubhÆ)”}”(hXýIf your work is being done in a corporate environment - as most Linux kernel work is - you must, obviously, have permission from suitably empowered managers before you can post your company's plans or code to a public mailing list. The posting of code which has not been cleared for release under a GPL-compatible license can be especially problematic; the sooner that a company's management and legal staff can agree on the posting of a kernel development project, the better off everybody involved will be.”h]”hXIf your work is being done in a corporate environment - as most Linux kernel work is - you must, obviously, have permission from suitably empowered managers before you can post your company’s plans or code to a public mailing list. The posting of code which has not been cleared for release under a GPL-compatible license can be especially problematic; the sooner that a company’s management and legal staff can agree on the posting of a kernel development project, the better off everybody involved will be.”…””}”(hj¬hžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÅhŸh¯h KÃhj›hžhubhÆ)”}”(hX˜Some readers may be thinking at this point that their kernel work is intended to support a product which does not yet have an officially acknowledged existence. Revealing their employer's plans on a public mailing list may not be a viable option. In cases like this, it is worth considering whether the secrecy is really necessary; there is often no real need to keep development plans behind closed doors.”h]”hXšSome readers may be thinking at this point that their kernel work is intended to support a product which does not yet have an officially acknowledged existence. Revealing their employer’s plans on a public mailing list may not be a viable option. In cases like this, it is worth considering whether the secrecy is really necessary; there is often no real need to keep development plans behind closed doors.”…””}”(hjºhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÅhŸh¯h KËhj›hžhubhÆ)”}”(hXKThat said, there are also cases where a company legitimately cannot disclose its plans early in the development process. Companies with experienced kernel developers may choose to proceed in an open-loop manner on the assumption that they will be able to avoid serious integration problems later. For companies without that sort of in-house expertise, the best option is often to hire an outside developer to review the plans under a non-disclosure agreement. The Linux Foundation operates an NDA program designed to help with this sort of situation; more information can be found at:”h]”hXKThat said, there are also cases where a company legitimately cannot disclose its plans early in the development process. Companies with experienced kernel developers may choose to proceed in an open-loop manner on the assumption that they will be able to avoid serious integration problems later. For companies without that sort of in-house expertise, the best option is often to hire an outside developer to review the plans under a non-disclosure agreement. The Linux Foundation operates an NDA program designed to help with this sort of situation; more information can be found at:”…””}”(hjÈhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÅhŸh¯h KÒhj›hžhubj)”}”(hŒ%https://www.linuxfoundation.org/nda/ ”h]”hÆ)”}”(hŒ$https://www.linuxfoundation.org/nda/”h]”jA)”}”(hjÜh]”hŒ$https://www.linuxfoundation.org/nda/”…””}”(hjÞhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”Œrefuri”jÜuh1j@hjÚubah}”(h]”h ]”h"]”h$]”h&]”uh1hÅhŸh¯h KÜhjÖubah}”(h]”h ]”h"]”h$]”h&]”uh1jhŸh¯h KÜhj›hžhubhÆ)”}”(hŒzThis kind of review is often enough to avoid serious problems later on without requiring public disclosure of the project.”h]”hŒzThis kind of review is often enough to avoid serious problems later on without requiring public disclosure of the project.”…””}”(hjøhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÅhŸh¯h KÞhj›hžhubeh}”(h]”Œgetting-official-buy-in”ah ]”h"]”Œgetting official buy-in”ah$]”h&]”uh1h°hh²hžhhŸh¯h KÁubeh}”(h]”(Œearly-stage-planning”h®eh ]”h"]”(Œearly-stage planning”Œdevelopment_early_stage”eh$]”h&]”uh1h°hhhžhhŸh¯h KŒexpect_referenced_by_name”}”jh£sŒexpect_referenced_by_id”}”h®h£subeh}”(h]”h ]”h"]”h$]”h&]”Œsource”h¯uh1hŒcurrent_source”NŒ current_line”NŒsettings”Œdocutils.frontend”ŒValues”“”)”}”(hµNŒ generator”NŒ datestamp”NŒ source_link”NŒ source_url”NŒ toc_backlinks”Œentry”Œfootnote_backlinks”KŒ sectnum_xform”KŒstrip_comments”NŒstrip_elements_with_classes”NŒ strip_classes”NŒ report_level”KŒ halt_level”KŒexit_status_level”KŒdebug”NŒwarning_stream”NŒ traceback”ˆŒinput_encoding”Œ utf-8-sig”Œinput_encoding_error_handler”Œstrict”Œoutput_encoding”Œutf-8”Œoutput_encoding_error_handler”j>Œerror_encoding”Œutf-8”Œerror_encoding_error_handler”Œbackslashreplace”Œ language_code”Œen”Œrecord_dependencies”NŒconfig”NŒ id_prefix”hŒauto_id_prefix”Œid”Œ dump_settings”NŒdump_internals”NŒdump_transforms”NŒdump_pseudo_xml”NŒexpose_internals”NŒstrict_visitor”NŒ_disable_config”NŒ_source”h¯Œ _destination”NŒ _config_files”]”Œ7/var/lib/git/docbuild/linux/Documentation/docutils.conf”aŒfile_insertion_enabled”ˆŒ raw_enabled”KŒline_length_limit”M'Œpep_references”NŒ pep_base_url”Œhttps://peps.python.org/”Œpep_file_url_template”Œpep-%04d”Œrfc_references”NŒ rfc_base_url”Œ&https://datatracker.ietf.org/doc/html/”Œ tab_width”KŒtrim_footnote_reference_space”‰Œsyntax_highlight”Œlong”Œ smart_quotes”ˆŒsmartquotes_locales”]”Œcharacter_level_inline_markup”‰Œdoctitle_xform”‰Œ docinfo_xform”KŒsectsubtitle_xform”‰Œ image_loading”Œlink”Œembed_stylesheet”‰Œcloak_email_addresses”ˆŒsection_self_link”‰Œenv”NubŒreporter”NŒindirect_targets”]”Œsubstitution_defs”}”Œsubstitution_names”}”Œrefnames”}”Œrefids”}”h®]”h£asŒnameids”}”(jh®jjjëjèjäjájUjRj˜j•j juŒ nametypes”}”(jˆj‰jë‰jä‰jU‰j˜‰j ‰uh}”(h®h²jh²jèhÕjájîjRjçj•jXjj›uŒ footnote_refs”}”Œ citation_refs”}”Œ autofootnotes”]”Œautofootnote_refs”]”Œsymbol_footnotes”]”Œsymbol_footnote_refs”]”Œ footnotes”]”Œ citations”]”Œautofootnote_start”KŒsymbol_footnote_start”KŒ id_counter”Œ collections”ŒCounter”“”}”…”R”Œparse_messages”]”Œtransform_messages”]”hŒsystem_message”“”)”}”(hhh]”hÆ)”}”(hhh]”hŒ=Hyperlink target "development-early-stage" is not referenced.”…””}”hj¨sbah}”(h]”h ]”h"]”h$]”h&]”uh1hÅhj¥ubah}”(h]”h ]”h"]”h$]”h&]”Œlevel”KŒtype”ŒINFO”Œsource”h¯Œline”Kuh1j£ubaŒ transformer”NŒ include_log”]”Œ decoration”Nhžhub.