14a6c7b42SAlex Shi.. include:: ../disclaimer-zh_CN.rst 24a6c7b42SAlex Shi 34a6c7b42SAlex Shi:Original: :ref:`Documentation/process/1.Intro.rst <development_process_intro>` 4*72d85e3bSWu XiangCheng 5*72d85e3bSWu XiangCheng:Translator: 6*72d85e3bSWu XiangCheng 7*72d85e3bSWu XiangCheng 时奎亮 Alex Shi <alex.shi@linux.alibaba.com> 8*72d85e3bSWu XiangCheng 9*72d85e3bSWu XiangCheng:校译: 10*72d85e3bSWu XiangCheng 11*72d85e3bSWu XiangCheng 吴想成 Wu XiangCheng <bobwxc@email.cn> 124a6c7b42SAlex Shi 136c8d1355SAlex Shi.. _cn_development_process_intro: 146c8d1355SAlex Shi 15*72d85e3bSWu XiangCheng引言 166c8d1355SAlex Shi==== 176c8d1355SAlex Shi 18*72d85e3bSWu XiangCheng内容提要 196c8d1355SAlex Shi-------- 206c8d1355SAlex Shi 21*72d85e3bSWu XiangCheng本节的其余部分涵盖了内核开发的过程,以及开发人员及其雇主在这方面可能遇到的 22*72d85e3bSWu XiangCheng各种问题。有很多原因使内核代码应被合并到正式的(“主线”)内核中,包括对用户 23*72d85e3bSWu XiangCheng的自动可用性、多种形式的社区支持以及影响内核开发方向的能力。提供给Linux内核 24*72d85e3bSWu XiangCheng的代码必须在与GPL兼容的许可证下可用。 256c8d1355SAlex Shi 266c8d1355SAlex Shi:ref:`cn_development_process` 介绍了开发过程、内核发布周期和合并窗口的机制。 27*72d85e3bSWu XiangCheng涵盖了补丁开发、审查和合并周期中的各个阶段。还有一些关于工具和邮件列表的讨论? 28*72d85e3bSWu XiangCheng鼓励希望开始内核开发的开发人员跟踪并修复缺陷以作为初步练习。 296c8d1355SAlex Shi 306c8d1355SAlex Shi 31*72d85e3bSWu XiangCheng:ref:`cn_development_early_stage` 包括项目的早期规划,重点是尽快让开发社区 32*72d85e3bSWu XiangCheng参与进来。 336c8d1355SAlex Shi 34*72d85e3bSWu XiangCheng:ref:`cn_development_coding` 是关于编程过程的;介绍了其他开发人员遇到的几个 35*72d85e3bSWu XiangCheng陷阱。也涵盖了对补丁的一些要求,并且介绍了一些工具,这些工具有助于确保内核 366c8d1355SAlex Shi补丁是正确的。 376c8d1355SAlex Shi 38*72d85e3bSWu XiangCheng:ref:`cn_development_posting` 描述发布补丁以供评审的过程。为了让开发社区能 39*72d85e3bSWu XiangCheng认真对待,补丁必须被正确格式化和描述,并且必须发送到正确的地方。遵循本节中的 40*72d85e3bSWu XiangCheng建议有助于确保您的工作能被较好地接纳。 416c8d1355SAlex Shi 42*72d85e3bSWu XiangCheng:ref:`cn_development_followthrough` 介绍了发布补丁之后发生的事情;工作在这时 43*72d85e3bSWu XiangCheng还远远没有完成。与审阅者一起工作是开发过程中的一个重要部分;本节提供了一些 44*72d85e3bSWu XiangCheng关于如何在这个重要阶段避免问题的提示。当补丁被合并到主线中时,开发人员要注意 45*72d85e3bSWu XiangCheng不要假定任务已经完成。 466c8d1355SAlex Shi 47*72d85e3bSWu XiangCheng:ref:`cn_development_advancedtopics` 介绍了两个“高级”主题:使用Git管理补丁 48*72d85e3bSWu XiangCheng和查看其他人发布的补丁。 496c8d1355SAlex Shi 50*72d85e3bSWu XiangCheng:ref:`cn_development_conclusion` 总结了有关内核开发的更多信息,附带有相关资源 51*72d85e3bSWu XiangCheng链接。 526c8d1355SAlex Shi 53*72d85e3bSWu XiangCheng这个文档是关于什么的 546c8d1355SAlex Shi-------------------- 556c8d1355SAlex Shi 56*72d85e3bSWu XiangChengLinux内核有超过800万行代码,每个版本的贡献者超过1000人,是现存最大、最活跃的 57*72d85e3bSWu XiangCheng免费软件项目之一。从1991年开始,这个内核已经发展成为一个最好的操作系统组件, 58*72d85e3bSWu XiangCheng运行在袖珍数字音乐播放器、台式电脑、现存最大的超级计算机以及所有类型的系统上。 59*72d85e3bSWu XiangCheng它是一种适用于几乎任何情况的健壮、高效和可扩展的解决方案。 606c8d1355SAlex Shi 616c8d1355SAlex Shi随着Linux的发展,希望参与其开发的开发人员(和公司)的数量也在增加。硬件供应商 626c8d1355SAlex Shi希望确保Linux能够很好地支持他们的产品,使这些产品对Linux用户具有吸引力。嵌入 636c8d1355SAlex Shi式系统供应商使用Linux作为集成产品的组件,希望Linux能够尽可能地胜任手头的任务。 64*72d85e3bSWu XiangCheng分销商和其他基于Linux的软件供应商切实关心Linux内核的功能、性能和可靠性。最终 65*72d85e3bSWu XiangCheng用户也常常希望修改Linux,使之能更好地满足他们的需求。 666c8d1355SAlex Shi 676c8d1355SAlex ShiLinux最引人注目的特性之一是这些开发人员可以访问它;任何具备必要技能的人都可以 686c8d1355SAlex Shi改进Linux并影响其开发方向。专有产品不能提供这种开放性,这是自由软件的一个特点。 69*72d85e3bSWu XiangCheng如果有什么不同的话,那就是内核比大多数其他自由软件项目更开放。一个典型的三个 70*72d85e3bSWu XiangCheng月内核开发周期可以涉及1000多个开发人员,他们为100多个不同的公司(或者根本不 71*72d85e3bSWu XiangCheng隶属公司)工作。 726c8d1355SAlex Shi 73*72d85e3bSWu XiangCheng与内核开发社区合作并不是特别困难。但尽管如此,仍有许多潜在的贡献者在尝试做 74*72d85e3bSWu XiangCheng内核工作时遇到了困难。内核社区已经发展出自己独特的操作方式,使其能够在每天 756c8d1355SAlex Shi都要更改数千行代码的环境中顺利运行(并生成高质量的产品)。因此,Linux内核开发 76*72d85e3bSWu XiangCheng过程与专有的开发模式有很大的不同也就不足为奇了。 776c8d1355SAlex Shi 78*72d85e3bSWu XiangCheng对于新开发人员来说,内核的开发过程可能会让人感到奇怪和恐惧,但这背后有充分的 79*72d85e3bSWu XiangCheng理由和坚实的经验。一个不了解内核社区工作方式的开发人员(或者更糟的是,他们 80*72d85e3bSWu XiangCheng试图抛弃或规避之)会得到令人沮丧的体验。开发社区在帮助那些试图学习的人的同时, 81*72d85e3bSWu XiangCheng没有时间帮助那些不愿意倾听或不关心开发过程的人。 826c8d1355SAlex Shi 83*72d85e3bSWu XiangCheng希望阅读本文的人能够避免这种令人沮丧的经历。这些材料很长,但阅读它们时所做的 846c8d1355SAlex Shi努力会在短时间内得到回报。开发社区总是需要能让内核变更好的开发人员;下面的 85*72d85e3bSWu XiangCheng文字应该帮助您或为您工作的人员加入我们的社区。 866c8d1355SAlex Shi 876c8d1355SAlex Shi致谢 886c8d1355SAlex Shi---- 896c8d1355SAlex Shi 90*72d85e3bSWu XiangCheng本文档由Jonathan Corbet <corbet@lwn.net> 撰写。以下人员的建议使之更为完善: 916c8d1355SAlex ShiJohannes Berg, James Berry, Alex Chiang, Roland Dreier, Randy Dunlap, 926c8d1355SAlex ShiJake Edge, Jiri Kosina, Matt Mackall, Arthur Marsh, Amanda McPherson, 93*72d85e3bSWu XiangChengAndrew Morton, Andrew Price, Tsugikazu Shibata 和 Jochen Voß 。 946c8d1355SAlex Shi 9503f8264cSAlex Shi这项工作得到了Linux基金会的支持,特别感谢Amanda McPherson,他看到了这项工作 96*72d85e3bSWu XiangCheng的价值并将其变成现实。 976c8d1355SAlex Shi 986c8d1355SAlex Shi代码进入主线的重要性 996c8d1355SAlex Shi-------------------- 1006c8d1355SAlex Shi 1016c8d1355SAlex Shi有些公司和开发人员偶尔会想,为什么他们要费心学习如何与内核社区合作,并将代码 1026c8d1355SAlex Shi放入主线内核(“主线”是由Linus Torvalds维护的内核,Linux发行商将其用作基础)。 103*72d85e3bSWu XiangCheng在短期内,贡献代码看起来像是一种可以避免的开销;维护独立代码并直接支持用户 1046c8d1355SAlex Shi似乎更容易。事实上,保持代码独立(“树外”)是在经济上是错误的。 1056c8d1355SAlex Shi 106*72d85e3bSWu XiangCheng为了说明树外代码成本,下面给出内核开发过程的一些相关方面;本文稍后将更详细地 107*72d85e3bSWu XiangCheng讨论其中的大部分内容。请考虑: 1086c8d1355SAlex Shi 1096c8d1355SAlex Shi- 所有Linux用户都可以使用合并到主线内核中的代码。它将自动出现在所有启用它的 110*72d85e3bSWu XiangCheng 发行版上。无需驱动程序磁盘、额外下载,也不需要为多个发行版的多个版本提供 111*72d85e3bSWu XiangCheng 支持;这一切将方便所有开发人员和用户。并入主线解决了大量的分发和支持问题。 1126c8d1355SAlex Shi 113*72d85e3bSWu XiangCheng- 当内核开发人员努力维护一个稳定的用户空间接口时,内核内部API处于不断变化之中。 114*72d85e3bSWu XiangCheng 不维持稳定的内部接口是一个慎重的设计决策;它允许在任何时候进行基本的改进, 115*72d85e3bSWu XiangCheng 并产出更高质量的代码。但该策略导致结果是,若要使用新的内核,任何树外代码都 116*72d85e3bSWu XiangCheng 需要持续的维护。维护树外代码会需要大量的工作才能使代码保持正常运行。 1176c8d1355SAlex Shi 118*72d85e3bSWu XiangCheng 相反,位于主线中的代码不需要这样做,因为基本规则要求进行API更改的任何开发 119*72d85e3bSWu XiangCheng 人员也必须修复由于该更改而破坏的任何代码。因此,合并到主线中的代码大大降低 120*72d85e3bSWu XiangCheng 了维护成本。 1216c8d1355SAlex Shi 122*72d85e3bSWu XiangCheng- 除此之外,内核中的代码通常会被其他开发人员改进。您授权的用户社区和客户对您 123*72d85e3bSWu XiangCheng 产品的改进可能会令人惊喜。 1246c8d1355SAlex Shi 125*72d85e3bSWu XiangCheng- 内核代码在合并到主线之前和之后都要经过审查。无论原始开发人员的技能有多强, 1266c8d1355SAlex Shi 这个审查过程总是能找到改进代码的方法。审查经常发现严重的错误和安全问题。 127*72d85e3bSWu XiangCheng 对于在封闭环境中开发的代码尤其如此;这种代码从外部开发人员的审查中获益匪浅。 128*72d85e3bSWu XiangCheng 树外代码是低质量代码。 1296c8d1355SAlex Shi 1306c8d1355SAlex Shi- 参与开发过程是您影响内核开发方向的方式。旁观者的抱怨会被听到,但是活跃的 1316c8d1355SAlex Shi 开发人员有更强的声音——并且能够实现使内核更好地满足其需求的更改。 1326c8d1355SAlex Shi 1336c8d1355SAlex Shi- 当单独维护代码时,总是存在第三方为类似功能提供不同实现的可能性。如果发生 134*72d85e3bSWu XiangCheng 这种情况,合并代码将变得更加困难——甚至成为不可能。之后,您将面临以下令人 135*72d85e3bSWu XiangCheng 不快的选择:(1)无限期地维护树外的非标准特性,或(2)放弃代码并将用户迁移 136*72d85e3bSWu XiangCheng 到树内版本。 1376c8d1355SAlex Shi 138*72d85e3bSWu XiangCheng- 代码的贡献是使整个流程工作的根本。通过贡献代码,您可以向内核添加新功能,并 139*72d85e3bSWu XiangCheng 提供其他内核开发人员使用的功能和示例。如果您已经为Linux开发了代码(或者正在 140*72d85e3bSWu XiangCheng 考虑这样做),那么您显然对这个平台的持续成功感兴趣;贡献代码是确保成功的 141*72d85e3bSWu XiangCheng 最好方法之一。 1426c8d1355SAlex Shi 1436c8d1355SAlex Shi上述所有理由都适用于任何树外内核代码,包括以专有的、仅二进制形式分发的代码。 144*72d85e3bSWu XiangCheng然而,在考虑任何类型的纯二进制内核代码分布之前,还需要考虑其他因素。包括: 1456c8d1355SAlex Shi 146*72d85e3bSWu XiangCheng- 围绕专有内核模块分发的法律问题其实较为模糊;相当多的内核版权所有者认为, 147*72d85e3bSWu XiangCheng 大多数仅二进制的模块是内核的派生产品,因此,它们的分发违反了GNU通用公共 148*72d85e3bSWu XiangCheng 许可证(下面将详细介绍)。本文作者不是律师,本文档中的任何内容都不可能被 1496c8d1355SAlex Shi 视为法律建议。封闭源代码模块的真实法律地位只能由法院决定。但不管怎样,困扰 1506c8d1355SAlex Shi 这些模块的不确定性仍然存在。 1516c8d1355SAlex Shi 1526c8d1355SAlex Shi- 二进制模块大大增加了调试内核问题的难度,以至于大多数内核开发人员甚至都不会 1536c8d1355SAlex Shi 尝试。因此,只分发二进制模块将使您的用户更难从社区获得支持。 1546c8d1355SAlex Shi 155*72d85e3bSWu XiangCheng- 对于仅二进制的模块的发行者来说,支持也更加困难,他们必须为他们希望支持的 156*72d85e3bSWu XiangCheng 每个发行版和每个内核版本提供不同版本的模块。为了提供较为全面的覆盖范围, 1576c8d1355SAlex Shi 可能需要一个模块的几十个构建,并且每次升级内核时,您的用户都必须单独升级 158*72d85e3bSWu XiangCheng 这些模块。 1596c8d1355SAlex Shi 160*72d85e3bSWu XiangCheng- 上面提到的关于代码评审的所有问题都更加存在于封闭源代码中。由于该代码根本 161*72d85e3bSWu XiangCheng 不可得,因此社区无法对其进行审查,毫无疑问,它将存在严重问题。 1626c8d1355SAlex Shi 163*72d85e3bSWu XiangCheng尤其是嵌入式系统的制造商,可能会倾向于忽视本节中所说的大部分内容;因为他们 1646c8d1355SAlex Shi相信自己正在商用一种使用冻结内核版本的独立产品,在发布后不需要再进行开发。 1656c8d1355SAlex Shi这个论点忽略了广泛的代码审查的价值以及允许用户向产品添加功能的价值。但这些 166*72d85e3bSWu XiangCheng产品的商业寿命有限,之后必须发布新版本的产品。在这一点上,代码在主线上并得到 167*72d85e3bSWu XiangCheng良好维护的供应商将能够更好地占位,以使新产品快速上市。 1686c8d1355SAlex Shi 1696c8d1355SAlex Shi许可 1706c8d1355SAlex Shi---- 1716c8d1355SAlex Shi 1726c8d1355SAlex Shi代码是根据一些许可证提供给Linux内核的,但是所有代码都必须与GNU通用公共许可 1736c8d1355SAlex Shi证(GPLV2)的版本2兼容,该版本是覆盖整个内核分发的许可证。在实践中,这意味 1746c8d1355SAlex Shi着所有代码贡献都由GPLv2(可选地,语言允许在更高版本的GPL下分发)或3子句BSD 175*72d85e3bSWu XiangCheng许可(New BSD License,译者注)覆盖。任何不包含在兼容许可证中的贡献都不会 1766c8d1355SAlex Shi被接受到内核中。 1776c8d1355SAlex Shi 1786c8d1355SAlex Shi贡献给内核的代码不需要(或请求)版权分配。合并到主线内核中的所有代码都保留 1796c8d1355SAlex Shi其原始所有权;因此,内核现在拥有数千个所有者。 1806c8d1355SAlex Shi 181*72d85e3bSWu XiangCheng这种所有权结构也暗示着,任何改变内核许可的尝试都注定会失败。很少有实际情况 182*72d85e3bSWu XiangCheng可以获得所有版权所有者的同意(或者从内核中删除他们的代码)。因此,尤其是在 183*72d85e3bSWu XiangCheng可预见的将来,许可证不大可能迁移到GPL的版本3。 1846c8d1355SAlex Shi 185*72d85e3bSWu XiangCheng所有贡献给内核的代码都必须是合法的免费软件。因此,不接受匿名(或化名)贡献 186*72d85e3bSWu XiangCheng者的代码。所有贡献者都需要在他们的代码上“sign off(签发)”,声明代码可以 187*72d85e3bSWu XiangCheng在GPL下与内核一起分发。无法提供未被其所有者许可为免费软件的代码,或可能为 188*72d85e3bSWu XiangCheng内核造成版权相关问题的代码(例如,由缺乏适当保护的反向工程工作派生的代码) 189*72d85e3bSWu XiangCheng不能被接受。 1906c8d1355SAlex Shi 191*72d85e3bSWu XiangCheng有关版权问题的提问在Linux开发邮件列表中很常见。这样的问题通常会得到不少答案, 192*72d85e3bSWu XiangCheng但请记住,回答这些问题的人不是律师,不能提供法律咨询。如果您有关于Linux源代码 193*72d85e3bSWu XiangCheng的法律问题,没有什么可以代替咨询了解这一领域的律师。依赖从技术邮件列表中获得 194*72d85e3bSWu XiangCheng的答案是一件冒险的事情。 1956c8d1355SAlex Shi 196