7sphinx.addnodesdocument)}( rawsourcechildren]( translations LanguagesNode)}(hhh](h pending_xref)}(hhh]docutils.nodesTextEnglish}parenthsba attributes}(ids]classes]names]dupnames]backrefs] refdomainstdreftypedoc reftarget/process/howtomodnameN classnameN refexplicitutagnamehhh ubh)}(hhh]hChinese (Simplified)}hh2sbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget!/translations/zh_CN/process/howtomodnameN classnameN refexplicituh1hhh ubh)}(hhh]hItalian}hhFsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget!/translations/it_IT/process/howtomodnameN classnameN refexplicituh1hhh ubh)}(hhh]hJapanese}hhZsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget!/translations/ja_JP/process/howtomodnameN classnameN refexplicituh1hhh ubh)}(hhh]hKorean}hhnsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget!/translations/ko_KR/process/howtomodnameN classnameN refexplicituh1hhh ubh)}(hhh]hSpanish}hhsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget!/translations/sp_SP/process/howtomodnameN classnameN refexplicituh1hhh ubeh}(h]h ]h"]h$]h&]current_languageChinese (Traditional)uh1h hh _documenthsourceNlineNubhcomment)}(h SPDX-License-Identifier: GPL-2.0h]h SPDX-License-Identifier: GPL-2.0}hhsbah}(h]h ]h"]h$]h&] xml:spacepreserveuh1hhhhhhN/var/lib/git/docbuild/linux/Documentation/translations/zh_TW/process/howto.rsthKubhtarget)}(h.. _tw_process_howto:h]h}(h]h ]h"]h$]h&]refidtw-process-howtouh1hhKhhhhhhubhwarning)}(hX1此文件的目的是爲讓中文讀者更容易閱讀和理解,而不是作爲一個分支。因此, 如果您對此文件有任何意見或改動,請先嘗試更新原始英文文件。如果要更改或 修正某處翻譯文件,請將意見或補丁發送給維護者(聯繫方式見下)。h]h paragraph)}(hX1此文件的目的是爲讓中文讀者更容易閱讀和理解,而不是作爲一個分支。因此, 如果您對此文件有任何意見或改動,請先嘗試更新原始英文文件。如果要更改或 修正某處翻譯文件,請將意見或補丁發送給維護者(聯繫方式見下)。h]hX1此文件的目的是爲讓中文讀者更容易閱讀和理解,而不是作爲一個分支。因此, 如果您對此文件有任何意見或改動,請先嘗試更新原始英文文件。如果要更改或 修正某處翻譯文件,請將意見或補丁發送給維護者(聯繫方式見下)。}(hhhhhNhNubah}(h]h ]h"]h$]h&]uh1hh5Documentation/translations/zh_TW/disclaimer-zh_TW.rsthKhhubah}(h]h ]h"]h$]h&]uh1hhhhhhhhNubhnote)}(h如果您發現本文檔與原始文件有任何不同或者有翻譯問題,請聯繫該文件的譯者, 或者發送電子郵件給胡皓文以獲取幫助:<2023002089@link.tyut.edu.cn>。h]h)}(h如果您發現本文檔與原始文件有任何不同或者有翻譯問題,請聯繫該文件的譯者, 或者發送電子郵件給胡皓文以獲取幫助:<2023002089@link.tyut.edu.cn>。h](h如果您發現本文檔與原始文件有任何不同或者有翻譯問題,請聯繫該文件的譯者, 或者發送電子郵件給胡皓文以獲取幫助:<}(hhhhhNhNubh reference)}(h2023002089@link.tyut.edu.cnh]h2023002089@link.tyut.edu.cn}(hhhhhNhNubah}(h]h ]h"]h$]h&]refuri"mailto:2023002089@link.tyut.edu.cnuh1hhhubh>。}(hhhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhK hhubah}(h]h ]h"]h$]h&]uh1hhhhhhhhNubh field_list)}(hhh]hfield)}(hhh](h field_name)}(hOriginalh]hOriginal}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjhhhKubh field_body)}(h7:ref:`Documentation/process/howto.rst ` h]h)}(h6:ref:`Documentation/process/howto.rst `h]h)}(hj1h]hinline)}(hj1h]hDocumentation/process/howto.rst}(hj8hhhNhNubah}(h]h ](xrefstdstd-refeh"]h$]h&]uh1j6hj3ubah}(h]h ]h"]h$]h&]refdoc translations/zh_TW/process/howto refdomainjCreftyperef refexplicitrefwarn reftarget process_howtouh1hhhhKhj/ubah}(h]h ]h"]h$]h&]uh1hhhhKhj+ubah}(h]h ]h"]h$]h&]uh1j)hjubeh}(h]h ]h"]h$]h&]uh1jhhhKhjhhubah}(h]h ]h"]h$]h&]uh1jhhhhhhhKubh)}(h譯者::h]h譯者:}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK hhhhubh literal_block)}(hX英文版維護者: Greg Kroah-Hartman 中文版維護者: 李陽 Li Yang 中文版翻譯者: 李陽 Li Yang 時奎亮 Alex Shi 中文版校譯者: 鍾宇 TripleX Chung 陳琦 Maggie Chen 王聰 Wang Cong 胡皓文 Hu Haowen <2023002089@link.tyut.edu.cn>h]hX英文版維護者: Greg Kroah-Hartman 中文版維護者: 李陽 Li Yang 中文版翻譯者: 李陽 Li Yang 時奎亮 Alex Shi 中文版校譯者: 鍾宇 TripleX Chung 陳琦 Maggie Chen 王聰 Wang Cong 胡皓文 Hu Haowen <2023002089@link.tyut.edu.cn>}hjsbah}(h]h ]h"]h$]h&]hhuh1j}hhhK hhhhubhsection)}(hhh](htitle)}(h如何參與Linux內核開發h]h如何參與Linux內核開發}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjhhhhhKubh)}(hX=這是一篇將如何參與Linux內核開發的相關問題一網打盡的終極祕笈。它將指導你 成爲一名Linux內核開發者,並且學會如何同Linux內核開發社區合作。它儘可能不 包括任何關於內核編程的技術細節,但會給你指引一條獲得這些知識的正確途徑。h]hX=這是一篇將如何參與Linux內核開發的相關問題一網打盡的終極祕笈。它將指導你 成爲一名Linux內核開發者,並且學會如何同Linux內核開發社區合作。它儘可能不 包括任何關於內核編程的技術細節,但會給你指引一條獲得這些知識的正確途徑。}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjhhubh)}(hf如果這篇文章中的任何內容不再適用,請給文末列出的文件維護者發送補丁。h]hf如果這篇文章中的任何內容不再適用,請給文末列出的文件維護者發送補丁。}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjhhubj)}(hhh](j)}(h入門h]h入門}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjhhhhhK ubh)}(hXW你想了解如何成爲一名Linux內核開發者?或者老闆吩咐你「給這個設備寫個Linux 驅動程序」?這篇文章的目的就是教會你達成這些目標的全部訣竅,它將描述你需 要經過的流程以及給出如何同內核社區合作的一些提示。它還將試圖解釋內核社區 爲何這樣運作。h]hXW你想了解如何成爲一名Linux內核開發者?或者老闆吩咐你「給這個設備寫個Linux 驅動程序」?這篇文章的目的就是教會你達成這些目標的全部訣竅,它將描述你需 要經過的流程以及給出如何同內核社區合作的一些提示。它還將試圖解釋內核社區 爲何這樣運作。}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK"hjhhubh)}(hXLinux內核大部分是由C語言寫成的,一些體系結構相關的代碼用到了彙編語言。要 參與內核開發,你必須精通C語言。除非你想爲某個架構開發底層代碼,否則你並 不需要了解(任何體系結構的)彙編語言。下面列舉的書籍雖然不能替代紮實的C 語言教育和多年的開發經驗,但如果需要的話,做爲參考還是不錯的:h]hXLinux內核大部分是由C語言寫成的,一些體系結構相關的代碼用到了彙編語言。要 參與內核開發,你必須精通C語言。除非你想爲某個架構開發底層代碼,否則你並 不需要了解(任何體系結構的)彙編語言。下面列舉的書籍雖然不能替代紮實的C 語言教育和多年的開發經驗,但如果需要的話,做爲參考還是不錯的:}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK'hjhhubh block_quote)}(hX- "The C Programming Language" by Kernighan and Ritchie [Prentice Hall] 《C程序設計語言(第2版·新版)》(徐寶文 李志 譯)[機械工業出版社] - "Practical C Programming" by Steve Oualline [O'Reilly] 《實用C語言編程(第三版)》(郭大海 譯)[中國電力出版社] - "C: A Reference Manual" by Harbison and Steele [Prentice Hall] 《C語言參考手冊(原書第5版)》(邱仲潘 等譯)[機械工業出版社] h]h bullet_list)}(hhh](h list_item)}(h"The C Programming Language" by Kernighan and Ritchie [Prentice Hall] 《C程序設計語言(第2版·新版)》(徐寶文 李志 譯)[機械工業出版社]h]h)}(h"The C Programming Language" by Kernighan and Ritchie [Prentice Hall] 《C程序設計語言(第2版·新版)》(徐寶文 李志 譯)[機械工業出版社]h]h“The C Programming Language” by Kernighan and Ritchie [Prentice Hall] 《C程序設計語言(第2版·新版)》(徐寶文 李志 譯)[機械工業出版社]}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK,hjubah}(h]h ]h"]h$]h&]uh1jhjubj)}(h"Practical C Programming" by Steve Oualline [O'Reilly] 《實用C語言編程(第三版)》(郭大海 譯)[中國電力出版社]h]h)}(h"Practical C Programming" by Steve Oualline [O'Reilly] 《實用C語言編程(第三版)》(郭大海 譯)[中國電力出版社]h]h“Practical C Programming” by Steve Oualline [O’Reilly] 《實用C語言編程(第三版)》(郭大海 譯)[中國電力出版社]}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK.hjubah}(h]h ]h"]h$]h&]uh1jhjubj)}(h"C: A Reference Manual" by Harbison and Steele [Prentice Hall] 《C語言參考手冊(原書第5版)》(邱仲潘 等譯)[機械工業出版社] h]h)}(h"C: A Reference Manual" by Harbison and Steele [Prentice Hall] 《C語言參考手冊(原書第5版)》(邱仲潘 等譯)[機械工業出版社]h]h“C: A Reference Manual” by Harbison and Steele [Prentice Hall] 《C語言參考手冊(原書第5版)》(邱仲潘 等譯)[機械工業出版社]}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK0hj(ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]bullet-uh1jhhhK,hjubah}(h]h ]h"]h$]h&]uh1jhhhK,hjhhubh)}(hX4Linux內核使用GNU C和GNU工具鏈開發。雖然它遵循ISO C11標準,但也用到了一些 標準中沒有定義的擴展。內核是自給自足的C環境,不依賴於標準C庫的支持,所以 並不支持C標準中的部分定義。比如long long類型的大數除法和浮點運算就不允許 使用。有時候確實很難弄清楚內核對工具鏈的要求和它所使用的擴展,不幸的是目 前還沒有明確的參考資料可以解釋它們。請查閱gcc信息頁(使用「info gcc」命令 顯示)獲得一些這方面信息。h]hX4Linux內核使用GNU C和GNU工具鏈開發。雖然它遵循ISO C11標準,但也用到了一些 標準中沒有定義的擴展。內核是自給自足的C環境,不依賴於標準C庫的支持,所以 並不支持C標準中的部分定義。比如long long類型的大數除法和浮點運算就不允許 使用。有時候確實很難弄清楚內核對工具鏈的要求和它所使用的擴展,不幸的是目 前還沒有明確的參考資料可以解釋它們。請查閱gcc信息頁(使用「info gcc」命令 顯示)獲得一些這方面信息。}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK3hjhhubh)}(hX請記住你是在學習怎麼和已經存在的開發社區打交道。它由一羣形形色色的人組成, 他們對代碼、風格和過程有著很高的標準。這些標準是在長期實踐中總結出來的, 適應於地理上分散的大型開發團隊。它們已經被很好得整理成檔,建議你在開發 之前儘可能多的學習這些標準,而不要期望別人來適應你或者你公司的行爲方式。h]hX請記住你是在學習怎麼和已經存在的開發社區打交道。它由一羣形形色色的人組成, 他們對代碼、風格和過程有著很高的標準。這些標準是在長期實踐中總結出來的, 適應於地理上分散的大型開發團隊。它們已經被很好得整理成檔,建議你在開發 之前儘可能多的學習這些標準,而不要期望別人來適應你或者你公司的行爲方式。}(hj\hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK:hjhhubeh}(h]id1ah ]h"]入門ah$]h&]uh1jhjhhhhhK ubj)}(hhh](j)}(h 法律問題h]h 法律問題}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjrhhhhhKAubh)}(hXLinux內核原始碼都是在GPL(通用公共許可證)的保護下發布的。要了解這種許可 的細節請查看原始碼主目錄下的COPYING文件。Linux內核許可準則和如何使用 `SPDX ` 標誌符說明在這個文件中 :ref:`Documentation/translations/zh_TW/process/license-rules.rst ` 如果你對它還有更深入問題請聯繫律師,而不要在Linux內核郵件組上提問。因爲 郵件組裡的人並不是律師,不要期望他們的話有法律效力。h](hLinux內核原始碼都是在GPL(通用公共許可證)的保護下發布的。要了解這種許可 的細節請查看原始碼主目錄下的COPYING文件。Linux內核許可準則和如何使用 }(hjhhhNhNubhtitle_reference)}(h`SPDX `h]hSPDX }(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh# 標誌符說明在這個文件中 }(hjhhhNhNubh)}(hW:ref:`Documentation/translations/zh_TW/process/license-rules.rst `h]j7)}(hjh]h:Documentation/translations/zh_TW/process/license-rules.rst}(hjhhhNhNubah}(h]h ](jBstdstd-refeh"]h$]h&]uh1j6hjubah}(h]h ]h"]h$]h&]refdocjO refdomainjreftyperef refexplicitrefwarnjUtw_kernel_licensinguh1hhhhKChjubh 如果你對它還有更深入問題請聯繫律師,而不要在Linux內核郵件組上提問。因爲 郵件組裡的人並不是律師,不要期望他們的話有法律效力。}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKChjrhhubhdefinition_list)}(hhh]hdefinition_list_item)}(hh對於GPL的常見問題和解答,請訪問以下連結: https://www.gnu.org/licenses/gpl-faq.html h](hterm)}(h<對於GPL的常見問題和解答,請訪問以下連結:h]h<對於GPL的常見問題和解答,請訪問以下連結:}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhKLhjubh definition)}(hhh]h)}(h)https://www.gnu.org/licenses/gpl-faq.htmlh]h)}(hjh]h)https://www.gnu.org/licenses/gpl-faq.html}(hjhhhNhNubah}(h]h ]h"]h$]h&]refurijuh1hhjubah}(h]h ]h"]h$]h&]uh1hhhhKKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhhhKLhjubah}(h]h ]h"]h$]h&]uh1jhjrhhhhhNubeh}(h]id2ah ]h"] 法律問題ah$]h&]uh1jhjhhhhhKAubj)}(hhh](j)}(h文檔h]h文檔}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjhhhhhKOubh)}(hXLinux內核代碼中包含有大量的文檔。這些文檔對於學習如何與內核社區互動有著 不可估量的價值。當一個新的功能被加入內核,最好把解釋如何使用這個功能的文 檔也放進內核。當內核的改動導致面向用戶空間的接口發生變化時,最好將相關信 息或手冊頁(manpages)的補丁發到mtk.manpages@gmail.com,以向手冊頁(manpages) 的維護者解釋這些變化。h]hXLinux內核代碼中包含有大量的文檔。這些文檔對於學習如何與內核社區互動有著 不可估量的價值。當一個新的功能被加入內核,最好把解釋如何使用這個功能的文 檔也放進內核。當內核的改動導致面向用戶空間的接口發生變化時,最好將相關信 息或手冊頁(manpages)的補丁發到mtk.manpages@gmail.com,以向手冊頁(manpages) 的維護者解釋這些變化。}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKQhjhhubj)}(hhh]j)}(hX 以下是內核代碼中需要閱讀的文檔: :ref:`Documentation/admin-guide/README.rst ` 文件簡要介紹了Linux內核的背景,並且描述了如何配置和編譯內核。內核的 新用戶應該從這裡開始。 :ref:`Documentation/process/changes.rst ` 文件給出了用來編譯和使用內核所需要的最小軟體包列表。 :ref:`Documentation/translations/zh_TW/process/coding-style.rst ` 描述Linux內核的代碼風格和理由。所有新代碼需要遵守這篇文檔中定義的規 范。大多數維護者只會接收符合規定的補丁,很多人也只會幫忙檢查符合風格 的代碼。 :ref:`Documentation/translations/zh_TW/process/submitting-patches.rst ` 這兩份文檔明確描述如何創建和發送補丁,其中包括(但不僅限於): - 郵件內容 - 郵件格式 - 選擇收件人 遵守這些規定並不能保證提交成功(因爲所有補丁需要通過嚴格的內容和風格 審查),但是忽視他們幾乎就意味著失敗。 其他關於如何正確地生成補丁的優秀文檔包括: "The Perfect Patch" https://www.ozlabs.org/~akpm/stuff/tpp.txt "Linux kernel patch submission format" https://web.archive.org/web/20180829112450/http://linux.yyz.us/patch-format.html :ref:`Documentation/translations/zh_TW/process/stable-api-nonsense.rst ` 論證內核爲什麼特意不包括穩定的內核內部API,也就是說不包括像這樣的特 性: - 子系統中間層(爲了兼容性?) - 在不同作業系統間易於移植的驅動程序 - 減緩(甚至阻止)內核代碼的快速變化 這篇文檔對於理解Linux的開發哲學至關重要。對於將開發平台從其他操作系 統轉移到Linux的人來說也很重要。 :ref:`Documentation/process/security-bugs.rst ` 如果你認爲自己發現了Linux內核的安全性問題,請根據這篇文檔中的步驟來 提醒其他內核開發者並幫助解決這個問題。 :ref:`Documentation/translations/zh_TW/process/management-style.rst ` 描述內核維護者的工作方法及其共有特點。這對於剛剛接觸內核開發(或者對 它感到好奇)的人來說很重要,因爲它解釋了很多對於內核維護者獨特行爲的 普遍誤解與迷惑。 :ref:`Documentation/process/stable-kernel-rules.rst ` 解釋了穩定版內核發布的規則,以及如何將改動放入這些版本的步驟。 :ref:`Documentation/process/kernel-docs.rst ` 有助於內核開發的外部文檔列表。如果你在內核自帶的文檔中沒有找到你想找 的內容,可以查看這些文檔。 :ref:`Documentation/process/applying-patches.rst ` 關於補丁是什麼以及如何將它打在不同內核開發分支上的好介紹 h](j)}(h0以下是內核代碼中需要閱讀的文檔:h]h0以下是內核代碼中需要閱讀的文檔:}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhKhj=ubj)}(hhh](j)}(hhh](j)}(h:ref:`Documentation/admin-guide/README.rst ` 文件簡要介紹了Linux內核的背景,並且描述了如何配置和編譯內核。內核的 新用戶應該從這裡開始。 h](j)}(h4:ref:`Documentation/admin-guide/README.rst `h]h)}(hj[h]j7)}(hj[h]h$Documentation/admin-guide/README.rst}(hj`hhhNhNubah}(h]h ](jBstdstd-refeh"]h$]h&]uh1j6hj]ubah}(h]h ]h"]h$]h&]refdocjO refdomainjjreftyperef refexplicitrefwarnjUreadmeuh1hhhhK[hjYubah}(h]h ]h"]h$]h&]uh1jhhhK[hjUubj)}(hhh]h)}(h文件簡要介紹了Linux內核的背景,並且描述了如何配置和編譯內核。內核的 新用戶應該從這裡開始。h]h文件簡要介紹了Linux內核的背景,並且描述了如何配置和編譯內核。內核的 新用戶應該從這裡開始。}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKYhjubah}(h]h ]h"]h$]h&]uh1jhjUubeh}(h]h ]h"]h$]h&]uh1jhhhK[hjRubj)}(h:ref:`Documentation/process/changes.rst ` 文件給出了用來編譯和使用內核所需要的最小軟體包列表。 h](j)}(h2:ref:`Documentation/process/changes.rst `h]h)}(hjh]j7)}(hjh]h!Documentation/process/changes.rst}(hjhhhNhNubah}(h]h ](jBstdstd-refeh"]h$]h&]uh1j6hjubah}(h]h ]h"]h$]h&]refdocjO refdomainjreftyperef refexplicitrefwarnjUchangesuh1hhhhK^hjubah}(h]h ]h"]h$]h&]uh1jhhhK^hjubj)}(hhh]h)}(hN文件給出了用來編譯和使用內核所需要的最小軟體包列表。h]hN文件給出了用來編譯和使用內核所需要的最小軟體包列表。}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK^hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhhhK^hjRubj)}(hX):ref:`Documentation/translations/zh_TW/process/coding-style.rst ` 描述Linux內核的代碼風格和理由。所有新代碼需要遵守這篇文檔中定義的規 范。大多數維護者只會接收符合規定的補丁,很多人也只會幫忙檢查符合風格 的代碼。 h](j)}(hQ:ref:`Documentation/translations/zh_TW/process/coding-style.rst `h]h)}(hjh]j7)}(hjh]h9Documentation/translations/zh_TW/process/coding-style.rst}(hjhhhNhNubah}(h]h ](jBstdstd-refeh"]h$]h&]uh1j6hjubah}(h]h ]h"]h$]h&]refdocjO refdomainjreftyperef refexplicitrefwarnjUtw_codingstyleuh1hhhhKchjubah}(h]h ]h"]h$]h&]uh1jhhhKchjubj)}(hhh]h)}(h描述Linux內核的代碼風格和理由。所有新代碼需要遵守這篇文檔中定義的規 范。大多數維護者只會接收符合規定的補丁,很多人也只會幫忙檢查符合風格 的代碼。h]h描述Linux內核的代碼風格和理由。所有新代碼需要遵守這篇文檔中定義的規 范。大多數維護者只會接收符合規定的補丁,很多人也只會幫忙檢查符合風格 的代碼。}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKahjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhhhKchjRubeh}(h]h ]h"]h$]h&]uh1jhjOubh)}(h]:ref:`Documentation/translations/zh_TW/process/submitting-patches.rst `h]h)}(hj;h]j7)}(hj;h]h?Documentation/translations/zh_TW/process/submitting-patches.rst}(hj@hhhNhNubah}(h]h ](jBstdstd-refeh"]h$]h&]uh1j6hj=ubah}(h]h ]h"]h$]h&]refdocjO refdomainjJreftyperef refexplicitrefwarnjUtw_submittingpatchesuh1hhhhKehj9ubah}(h]h ]h"]h$]h&]uh1hhhhKehjOubj)}(hX:這兩份文檔明確描述如何創建和發送補丁,其中包括(但不僅限於): - 郵件內容 - 郵件格式 - 選擇收件人 遵守這些規定並不能保證提交成功(因爲所有補丁需要通過嚴格的內容和風格 審查),但是忽視他們幾乎就意味著失敗。 其他關於如何正確地生成補丁的優秀文檔包括: "The Perfect Patch" https://www.ozlabs.org/~akpm/stuff/tpp.txt "Linux kernel patch submission format" https://web.archive.org/web/20180829112450/http://linux.yyz.us/patch-format.html h](j)}(hhh]j)}(h這兩份文檔明確描述如何創建和發送補丁,其中包括(但不僅限於): - 郵件內容 - 郵件格式 - 選擇收件人 h](j)}(h[這兩份文檔明確描述如何創建和發送補丁,其中包括(但不僅限於):h]h[這兩份文檔明確描述如何創建和發送補丁,其中包括(但不僅限於):}(hjmhhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhKjhjiubj)}(hhh]j)}(hhh](j)}(h 郵件內容h]h)}(hjh]h 郵件內容}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhhjubah}(h]h ]h"]h$]h&]uh1jhj~ubj)}(h 郵件格式h]h)}(hjh]h 郵件格式}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKihjubah}(h]h ]h"]h$]h&]uh1jhj~ubj)}(h選擇收件人 h]h)}(h選擇收件人h]h選擇收件人}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKjhjubah}(h]h ]h"]h$]h&]uh1jhj~ubeh}(h]h ]h"]h$]h&]jFjGuh1jhhhKhhj{ubah}(h]h ]h"]h$]h&]uh1jhjiubeh}(h]h ]h"]h$]h&]uh1jhhhKjhjfubah}(h]h ]h"]h$]h&]uh1jhjbubh)}(h遵守這些規定並不能保證提交成功(因爲所有補丁需要通過嚴格的內容和風格 審查),但是忽視他們幾乎就意味著失敗。h]h遵守這些規定並不能保證提交成功(因爲所有補丁需要通過嚴格的內容和風格 審查),但是忽視他們幾乎就意味著失敗。}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKlhjbubh)}(hS其他關於如何正確地生成補丁的優秀文檔包括: "The Perfect Patch"h]hW其他關於如何正確地生成補丁的優秀文檔包括: “The Perfect Patch”}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKohjbubj)}(h+https://www.ozlabs.org/~akpm/stuff/tpp.txt h]h)}(h*https://www.ozlabs.org/~akpm/stuff/tpp.txth]h)}(hjh]h*https://www.ozlabs.org/~akpm/stuff/tpp.txt}(hjhhhNhNubah}(h]h ]h"]h$]h&]refurijuh1hhjubah}(h]h ]h"]h$]h&]uh1hhhhKrhjubah}(h]h ]h"]h$]h&]uh1jhhhKrhjbubh)}(h&"Linux kernel patch submission format"h]h*“Linux kernel patch submission format”}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKthjbubj)}(hQhttps://web.archive.org/web/20180829112450/http://linux.yyz.us/patch-format.html h]h)}(hPhttps://web.archive.org/web/20180829112450/http://linux.yyz.us/patch-format.htmlh]h)}(hj1h]hPhttps://web.archive.org/web/20180829112450/http://linux.yyz.us/patch-format.html}(hj3hhhNhNubah}(h]h ]h"]h$]h&]refurij1uh1hhj/ubah}(h]h ]h"]h$]h&]uh1hhhhKvhj+ubah}(h]h ]h"]h$]h&]uh1jhhhKvhjbubeh}(h]h ]h"]h$]h&]uh1jhhhKghjOubj)}(hhh](j)}(hX:ref:`Documentation/translations/zh_TW/process/stable-api-nonsense.rst ` 論證內核爲什麼特意不包括穩定的內核內部API,也就是說不包括像這樣的特 性: - 子系統中間層(爲了兼容性?) - 在不同作業系統間易於移植的驅動程序 - 減緩(甚至阻止)內核代碼的快速變化 這篇文檔對於理解Linux的開發哲學至關重要。對於將開發平台從其他操作系 統轉移到Linux的人來說也很重要。 h](j)}(h`:ref:`Documentation/translations/zh_TW/process/stable-api-nonsense.rst `h]h)}(hj\h]j7)}(hj\h]h@Documentation/translations/zh_TW/process/stable-api-nonsense.rst}(hjahhhNhNubah}(h]h ](jBstdstd-refeh"]h$]h&]uh1j6hj^ubah}(h]h ]h"]h$]h&]refdocjO refdomainjkreftyperef refexplicitrefwarnjUtw_stable_api_nonsenseuh1hhhhKhjZubah}(h]h ]h"]h$]h&]uh1jhhhKhjVubj)}(hhh](h)}(hj論證內核爲什麼特意不包括穩定的內核內部API,也就是說不包括像這樣的特 性:h]hj論證內核爲什麼特意不包括穩定的內核內部API,也就是說不包括像這樣的特 性:}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKyhjubj)}(h- 子系統中間層(爲了兼容性?) - 在不同作業系統間易於移植的驅動程序 - 減緩(甚至阻止)內核代碼的快速變化 h]j)}(hhh](j)}(h*子系統中間層(爲了兼容性?)h]h)}(hjh]h*子系統中間層(爲了兼容性?)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK|hjubah}(h]h ]h"]h$]h&]uh1jhjubj)}(h3在不同作業系統間易於移植的驅動程序h]h)}(hjh]h3在不同作業系統間易於移植的驅動程序}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK}hjubah}(h]h ]h"]h$]h&]uh1jhjubj)}(h4減緩(甚至阻止)內核代碼的快速變化 h]h)}(h3減緩(甚至阻止)內核代碼的快速變化h]h3減緩(甚至阻止)內核代碼的快速變化}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK~hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]jFjGuh1jhhhK|hjubah}(h]h ]h"]h$]h&]uh1jhhhK|hjubh)}(h這篇文檔對於理解Linux的開發哲學至關重要。對於將開發平台從其他操作系 統轉移到Linux的人來說也很重要。h]h這篇文檔對於理解Linux的開發哲學至關重要。對於將開發平台從其他操作系 統轉移到Linux的人來說也很重要。}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjubeh}(h]h ]h"]h$]h&]uh1jhjVubeh}(h]h ]h"]h$]h&]uh1jhhhKhjSubj)}(h:ref:`Documentation/process/security-bugs.rst ` 如果你認爲自己發現了Linux內核的安全性問題,請根據這篇文檔中的步驟來 提醒其他內核開發者並幫助解決這個問題。 h](j)}(h=:ref:`Documentation/process/security-bugs.rst `h]h)}(hj h]j7)}(hj h]h'Documentation/process/security-bugs.rst}(hjhhhNhNubah}(h]h ](jBstdstd-refeh"]h$]h&]uh1j6hjubah}(h]h ]h"]h$]h&]refdocjO refdomainjreftyperef refexplicitrefwarnjU securitybugsuh1hhhhKhj ubah}(h]h ]h"]h$]h&]uh1jhhhKhjubj)}(hhh]h)}(h如果你認爲自己發現了Linux內核的安全性問題,請根據這篇文檔中的步驟來 提醒其他內核開發者並幫助解決這個問題。h]h如果你認爲自己發現了Linux內核的安全性問題,請根據這篇文檔中的步驟來 提醒其他內核開發者並幫助解決這個問題。}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj4ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhhhKhjSubeh}(h]h ]h"]h$]h&]uh1jhjOubh)}(hY:ref:`Documentation/translations/zh_TW/process/management-style.rst `h]h)}(hjYh]j7)}(hjYh]h=Documentation/translations/zh_TW/process/management-style.rst}(hj^hhhNhNubah}(h]h ](jBstdstd-refeh"]h$]h&]uh1j6hj[ubah}(h]h ]h"]h$]h&]refdocjO refdomainjhreftyperef refexplicitrefwarnjUtw_managementstyleuh1hhhhKhjWubah}(h]h ]h"]h$]h&]uh1hhhhKhjOubj)}(h描述內核維護者的工作方法及其共有特點。這對於剛剛接觸內核開發(或者對 它感到好奇)的人來說很重要,因爲它解釋了很多對於內核維護者獨特行爲的 普遍誤解與迷惑。 h]h)}(h描述內核維護者的工作方法及其共有特點。這對於剛剛接觸內核開發(或者對 它感到好奇)的人來說很重要,因爲它解釋了很多對於內核維護者獨特行爲的 普遍誤解與迷惑。h]h描述內核維護者的工作方法及其共有特點。這對於剛剛接觸內核開發(或者對 它感到好奇)的人來說很重要,因爲它解釋了很多對於內核維護者獨特行爲的 普遍誤解與迷惑。}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjubah}(h]h ]h"]h$]h&]uh1jhhhKhjOubj)}(hhh](j)}(h:ref:`Documentation/process/stable-kernel-rules.rst ` 解釋了穩定版內核發布的規則,以及如何將改動放入這些版本的步驟。 h](j)}(hJ:ref:`Documentation/process/stable-kernel-rules.rst `h]h)}(hjh]j7)}(hjh]h-Documentation/process/stable-kernel-rules.rst}(hjhhhNhNubah}(h]h ](jBstdstd-refeh"]h$]h&]uh1j6hjubah}(h]h ]h"]h$]h&]refdocjO refdomainjreftyperef refexplicitrefwarnjUstable_kernel_rulesuh1hhhhKhjubah}(h]h ]h"]h$]h&]uh1jhhhKhjubj)}(hhh]h)}(h]解釋了穩定版內核發布的規則,以及如何將改動放入這些版本的步驟。h]h]解釋了穩定版內核發布的規則,以及如何將改動放入這些版本的步驟。}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhhhKhjubj)}(h:ref:`Documentation/process/kernel-docs.rst ` 有助於內核開發的外部文檔列表。如果你在內核自帶的文檔中沒有找到你想找 的內容,可以查看這些文檔。 h](j)}(h::ref:`Documentation/process/kernel-docs.rst `h]h)}(hjh]j7)}(hjh]h%Documentation/process/kernel-docs.rst}(hjhhhNhNubah}(h]h ](jBstdstd-refeh"]h$]h&]uh1j6hjubah}(h]h ]h"]h$]h&]refdocjO refdomainjreftyperef refexplicitrefwarnjU kernel_docsuh1hhhhKhjubah}(h]h ]h"]h$]h&]uh1jhhhKhjubj)}(hhh]h)}(h有助於內核開發的外部文檔列表。如果你在內核自帶的文檔中沒有找到你想找 的內容,可以查看這些文檔。h]h有助於內核開發的外部文檔列表。如果你在內核自帶的文檔中沒有找到你想找 的內容,可以查看這些文檔。}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhhhKhjubj)}(h:ref:`Documentation/process/applying-patches.rst ` 關於補丁是什麼以及如何將它打在不同內核開發分支上的好介紹 h](j)}(hD:ref:`Documentation/process/applying-patches.rst `h]h)}(hj5h]j7)}(hj5h]h*Documentation/process/applying-patches.rst}(hj:hhhNhNubah}(h]h ](jBstdstd-refeh"]h$]h&]uh1j6hj7ubah}(h]h ]h"]h$]h&]refdocjO refdomainjDreftyperef refexplicitrefwarnjUapplying_patchesuh1hhhhKhj3ubah}(h]h ]h"]h$]h&]uh1jhhhKhj/ubj)}(hhh]h)}(hT關於補丁是什麼以及如何將它打在不同內核開發分支上的好介紹h]hT關於補丁是什麼以及如何將它打在不同內核開發分支上的好介紹}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj\ubah}(h]h ]h"]h$]h&]uh1jhj/ubeh}(h]h ]h"]h$]h&]uh1jhhhKhjubeh}(h]h ]h"]h$]h&]uh1jhjOubeh}(h]h ]h"]h$]h&]uh1jhj=ubeh}(h]h ]h"]h$]h&]uh1jhhhKhj:ubah}(h]h ]h"]h$]h&]uh1jhjhhhNhNubh)}(hX+內核還擁有大量從代碼自動生成或者從 ReStructuredText(ReST) 標記生成的文檔, 比如這個文檔,它包含內核內部API的全面介紹以及如何妥善處理加鎖的規則。所有 這些文檔都可以通過運行以下命令從內核代碼中生成爲PDF或HTML文檔::h]hX*內核還擁有大量從代碼自動生成或者從 ReStructuredText(ReST) 標記生成的文檔, 比如這個文檔,它包含內核內部API的全面介紹以及如何妥善處理加鎖的規則。所有 這些文檔都可以通過運行以下命令從內核代碼中生成爲PDF或HTML文檔:}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjhhubj~)}(hmake pdfdocs make htmldocsh]hmake pdfdocs make htmldocs}hjsbah}(h]h ]h"]h$]h&]hhuh1j}hhhKhjhhubh)}(hReST格式的文檔會生成在 Documentation/output. 目錄中。 它們也可以用下列命令生成 LaTeX 和 ePub 格式文檔::h]hReST格式的文檔會生成在 Documentation/output. 目錄中。 它們也可以用下列命令生成 LaTeX 和 ePub 格式文檔:}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjhhubj~)}(hmake latexdocs make epubdocsh]hmake latexdocs make epubdocs}hjsbah}(h]h ]h"]h$]h&]hhuh1j}hhhKhjhhubeh}(h]id3ah ]h"]文檔ah$]h&]uh1jhjhhhhhKOubj)}(hhh](j)}(h如何成爲內核開發者h]h如何成爲內核開發者}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjhhhhhKubh)}(h[如果你對Linux內核開發一無所知,你應該訪問「Linux內核新手」計劃:h]h[如果你對Linux內核開發一無所知,你應該訪問「Linux內核新手」計劃:}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjhhubj)}(hhttps://kernelnewbies.org h]h)}(hhttps://kernelnewbies.orgh]h)}(hjh]hhttps://kernelnewbies.org}(hjhhhNhNubah}(h]h ]h"]h$]h&]refurijuh1hhjubah}(h]h ]h"]h$]h&]uh1hhhhKhjubah}(h]h ]h"]h$]h&]uh1jhhhKhjhhubh)}(hX?它擁有一個可以問各種最基本的內核開發問題的郵件列表(在提問之前一定要記得 查找已往的郵件,確認是否有人已經回答過相同的問題)。它還擁有一個可以獲得 實時反饋的IRC聊天頻道,以及大量對於學習Linux內核開發相當有幫助的文檔。h]hX?它擁有一個可以問各種最基本的內核開發問題的郵件列表(在提問之前一定要記得 查找已往的郵件,確認是否有人已經回答過相同的問題)。它還擁有一個可以獲得 實時反饋的IRC聊天頻道,以及大量對於學習Linux內核開發相當有幫助的文檔。}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjhhubh)}(h網站簡要介紹了原始碼組織結構、子系統劃分以及目前正在進行的項目(包括內核 中的和單獨維護的)。它還提供了一些基本的幫助信息,比如如何編譯內核和打補 丁。h]h網站簡要介紹了原始碼組織結構、子系統劃分以及目前正在進行的項目(包括內核 中的和單獨維護的)。它還提供了一些基本的幫助信息,比如如何編譯內核和打補 丁。}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjhhubh)}(h如果你想加入內核開發社區並協助完成一些任務,卻找不到從哪裡開始,可以訪問 「Linux內核房管員」計劃:h]h如果你想加入內核開發社區並協助完成一些任務,卻找不到從哪裡開始,可以訪問 「Linux內核房管員」計劃:}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjhhubj)}(h)https://kernelnewbies.org/KernelJanitors h]h)}(h(https://kernelnewbies.org/KernelJanitorsh]h)}(hjBh]h(https://kernelnewbies.org/KernelJanitors}(hjDhhhNhNubah}(h]h ]h"]h$]h&]refurijBuh1hhj@ubah}(h]h ]h"]h$]h&]uh1hhhhKhj<ubah}(h]h ]h"]h$]h&]uh1jhhhKhjhhubh)}(hXV這是極佳的起點。它提供一個相對簡單的任務列表,列出內核代碼中需要被重新 整理或者改正的地方。通過和負責這個計劃的開發者們一同工作,你會學到將補丁 集成進內核的基本原理。如果還沒有決定下一步要做什麼的話,你還可能會得到方 向性的指點。h]hXV這是極佳的起點。它提供一個相對簡單的任務列表,列出內核代碼中需要被重新 整理或者改正的地方。通過和負責這個計劃的開發者們一同工作,你會學到將補丁 集成進內核的基本原理。如果還沒有決定下一步要做什麼的話,你還可能會得到方 向性的指點。}(hj^hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjhhubh)}(hX在真正動手修改內核代碼之前,理解要修改的代碼如何運作是必需的。要達到這個 目的,沒什麼辦法比直接讀代碼更有效了(大多數花招都會有相應的注釋),而且 一些特製的工具還可以提供幫助。例如,「Linux代碼交叉引用」項目就是一個值得 特別推薦的幫助工具,它將原始碼顯示在有編目和索引的網頁上。其中一個更新及 時的內核源碼庫,可以通過以下地址訪問:h]hX在真正動手修改內核代碼之前,理解要修改的代碼如何運作是必需的。要達到這個 目的,沒什麼辦法比直接讀代碼更有效了(大多數花招都會有相應的注釋),而且 一些特製的工具還可以提供幫助。例如,「Linux代碼交叉引用」項目就是一個值得 特別推薦的幫助工具,它將原始碼顯示在有編目和索引的網頁上。其中一個更新及 時的內核源碼庫,可以通過以下地址訪問:}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjhhubj)}(hhttps://elixir.bootlin.com/ h]h)}(hhttps://elixir.bootlin.com/h]h)}(hjh]hhttps://elixir.bootlin.com/}(hjhhhNhNubah}(h]h ]h"]h$]h&]refurijuh1hhj~ubah}(h]h ]h"]h$]h&]uh1hhhhKhjzubah}(h]h ]h"]h$]h&]uh1jhhhKhjhhubeh}(h]id4ah ]h"]如何成爲內核開發者ah$]h&]uh1jhjhhhhhKubj)}(hhh](j)}(h 開發流程h]h 開發流程}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjhhhhhKubh)}(h~目前Linux內核開發流程包括幾個「主內核分支」和很多子系統相關的內核分支。這 些分支包括:h]h~目前Linux內核開發流程包括幾個「主內核分支」和很多子系統相關的內核分支。這 些分支包括:}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjhhubj)}(h- Linus 的內核源碼樹 - 多個主要版本的穩定版內核樹 - 子系統相關的內核樹 - linux-next 集成測試樹 h]j)}(hhh](j)}(hLinus 的內核源碼樹h]h)}(hjh]hLinus 的內核源碼樹}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjubah}(h]h ]h"]h$]h&]uh1jhjubj)}(h'多個主要版本的穩定版內核樹h]h)}(hjh]h'多個主要版本的穩定版內核樹}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjubah}(h]h ]h"]h$]h&]uh1jhjubj)}(h子系統相關的內核樹h]h)}(hjh]h子系統相關的內核樹}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjubah}(h]h ]h"]h$]h&]uh1jhjubj)}(hlinux-next 集成測試樹 h]h)}(hlinux-next 集成測試樹h]hlinux-next 集成測試樹}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]jFjGuh1jhhhKhjubah}(h]h ]h"]h$]h&]uh1jhhhKhjhhubeh}(h]id5ah ]h"] 開發流程ah$]h&]uh1jhjhhhhhKubj)}(hhh](j)}(h 主線樹h]h 主線樹}(hj> hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj; hhhhhKubh)}(h主線樹是由Linus Torvalds 維護的。你可以在https://kernel.org 網站或者代碼 庫中下找到它。它的開發遵循以下步驟:h]h主線樹是由Linus Torvalds 維護的。你可以在https://kernel.org 網站或者代碼 庫中下找到它。它的開發遵循以下步驟:}(hjL hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj; hhubj)}(hX- 每當一個新版本的內核被發布,爲期兩周的集成窗口將被打開。在這段時間裡 維護者可以向Linus提交大段的修改,通常這些修改已經被放到-mm內核中幾個 星期了。提交大量修改的首選方式是使用git工具(內核的代碼版本管理工具 ,更多的信息可以在 https://git-scm.com/ 獲取),不過使用普通補丁也是 可以的。 - 兩個星期以後-rc1版本內核發布。之後只有不包含可能影響整個內核穩定性的 新功能的補丁才可能被接受。請注意一個全新的驅動程序(或者文件系統)有 可能在-rc1後被接受是因爲這樣的修改完全獨立,不會影響其他的代碼,所以 沒有造成內核退步的風險。在-rc1以後也可以用git向Linus提交補丁,不過所 有的補丁需要同時被發送到相應的公衆郵件列表以徵詢意見。 - 當Linus認爲當前的git源碼樹已經達到一個合理健全的狀態足以發布供人測試 時,一個新的-rc版本就會被發布。計劃是每周都發布新的-rc版本。 - 這個過程一直持續下去直到內核被認爲達到足夠穩定的狀態,持續時間大概是 6個星期。 h]j)}(hhh](j)}(hX每當一個新版本的內核被發布,爲期兩周的集成窗口將被打開。在這段時間裡 維護者可以向Linus提交大段的修改,通常這些修改已經被放到-mm內核中幾個 星期了。提交大量修改的首選方式是使用git工具(內核的代碼版本管理工具 ,更多的信息可以在 https://git-scm.com/ 獲取),不過使用普通補丁也是 可以的。h]h)}(hX每當一個新版本的內核被發布,爲期兩周的集成窗口將被打開。在這段時間裡 維護者可以向Linus提交大段的修改,通常這些修改已經被放到-mm內核中幾個 星期了。提交大量修改的首選方式是使用git工具(內核的代碼版本管理工具 ,更多的信息可以在 https://git-scm.com/ 獲取),不過使用普通補丁也是 可以的。h](hXJ每當一個新版本的內核被發布,爲期兩周的集成窗口將被打開。在這段時間裡 維護者可以向Linus提交大段的修改,通常這些修改已經被放到-mm內核中幾個 星期了。提交大量修改的首選方式是使用git工具(內核的代碼版本管理工具 ,更多的信息可以在 }(hje hhhNhNubh)}(hhttps://git-scm.com/h]hhttps://git-scm.com/}(hjm hhhNhNubah}(h]h ]h"]h$]h&]refurijo uh1hhje ubh8 獲取),不過使用普通補丁也是 可以的。}(hje hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhja ubah}(h]h ]h"]h$]h&]uh1jhj^ ubj)}(hX兩個星期以後-rc1版本內核發布。之後只有不包含可能影響整個內核穩定性的 新功能的補丁才可能被接受。請注意一個全新的驅動程序(或者文件系統)有 可能在-rc1後被接受是因爲這樣的修改完全獨立,不會影響其他的代碼,所以 沒有造成內核退步的風險。在-rc1以後也可以用git向Linus提交補丁,不過所 有的補丁需要同時被發送到相應的公衆郵件列表以徵詢意見。h]h)}(hX兩個星期以後-rc1版本內核發布。之後只有不包含可能影響整個內核穩定性的 新功能的補丁才可能被接受。請注意一個全新的驅動程序(或者文件系統)有 可能在-rc1後被接受是因爲這樣的修改完全獨立,不會影響其他的代碼,所以 沒有造成內核退步的風險。在-rc1以後也可以用git向Linus提交補丁,不過所 有的補丁需要同時被發送到相應的公衆郵件列表以徵詢意見。h]hX兩個星期以後-rc1版本內核發布。之後只有不包含可能影響整個內核穩定性的 新功能的補丁才可能被接受。請注意一個全新的驅動程序(或者文件系統)有 可能在-rc1後被接受是因爲這樣的修改完全獨立,不會影響其他的代碼,所以 沒有造成內核退步的風險。在-rc1以後也可以用git向Linus提交補丁,不過所 有的補丁需要同時被發送到相應的公衆郵件列表以徵詢意見。}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj ubah}(h]h ]h"]h$]h&]uh1jhj^ ubj)}(h當Linus認爲當前的git源碼樹已經達到一個合理健全的狀態足以發布供人測試 時,一個新的-rc版本就會被發布。計劃是每周都發布新的-rc版本。h]h)}(h當Linus認爲當前的git源碼樹已經達到一個合理健全的狀態足以發布供人測試 時,一個新的-rc版本就會被發布。計劃是每周都發布新的-rc版本。h]h當Linus認爲當前的git源碼樹已經達到一個合理健全的狀態足以發布供人測試 時,一個新的-rc版本就會被發布。計劃是每周都發布新的-rc版本。}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj ubah}(h]h ]h"]h$]h&]uh1jhj^ ubj)}(hu這個過程一直持續下去直到內核被認爲達到足夠穩定的狀態,持續時間大概是 6個星期。 h]h)}(ht這個過程一直持續下去直到內核被認爲達到足夠穩定的狀態,持續時間大概是 6個星期。h]ht這個過程一直持續下去直到內核被認爲達到足夠穩定的狀態,持續時間大概是 6個星期。}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj ubah}(h]h ]h"]h$]h&]uh1jhj^ ubeh}(h]h ]h"]h$]h&]jFjGuh1jhhhKhjZ ubah}(h]h ]h"]h$]h&]uh1jhhhKhj; hhubj)}(hhh]j)}(h關於內核發布,值得一提的是Andrew Morton在linux-kernel郵件列表中如是說: 「沒有人知道新內核何時會被發布,因爲發布是根據已知bug的情況來決定 的,而不是根據一個事先制定好的時間表。」 h](j)}(h^關於內核發布,值得一提的是Andrew Morton在linux-kernel郵件列表中如是說:h]h^關於內核發布,值得一提的是Andrew Morton在linux-kernel郵件列表中如是說:}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhKhj ubj)}(hhh]h)}(h「沒有人知道新內核何時會被發布,因爲發布是根據已知bug的情況來決定 的,而不是根據一個事先制定好的時間表。」h]h「沒有人知道新內核何時會被發布,因爲發布是根據已知bug的情況來決定 的,而不是根據一個事先制定好的時間表。」}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhhhKhj ubah}(h]h ]h"]h$]h&]uh1jhj; hhhhhNubeh}(h]id6ah ]h"] 主線樹ah$]h&]uh1jhjhhhhhKubj)}(hhh](j)}(h子系統特定樹h]h子系統特定樹}(hj# hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj hhhhhKubh)}(hX各種內核子系統的維護者——以及許多內核子系統開發人員——在原始碼庫中公開了他們 當前的開發狀態。這樣,其他人就可以看到內核的不同區域發生了什麼。在開發速度 很快的領域,可能會要求開發人員將提交的內容建立在這樣的子系統內核樹上,這樣 就避免了提交與其他已經進行的工作之間的衝突。h]hX各種內核子系統的維護者——以及許多內核子系統開發人員——在原始碼庫中公開了他們 當前的開發狀態。這樣,其他人就可以看到內核的不同區域發生了什麼。在開發速度 很快的領域,可能會要求開發人員將提交的內容建立在這樣的子系統內核樹上,這樣 就避免了提交與其他已經進行的工作之間的衝突。}(hj1 hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj hhubh)}(h這些存儲庫中的大多數都是Git樹,但是也有其他的scm在使用,或者補丁隊列被發布 爲Quilt系列。這些子系統存儲庫的地址列在MAINTAINERS文件中。其中許多可以在 https://git.kernel.org/上瀏覽。h](h這些存儲庫中的大多數都是Git樹,但是也有其他的scm在使用,或者補丁隊列被發布 爲Quilt系列。這些子系統存儲庫的地址列在MAINTAINERS文件中。其中許多可以在 }(hj? hhhNhNubh)}(hhttps://git.kernel.orgh]hhttps://git.kernel.org}(hjG hhhNhNubah}(h]h ]h"]h$]h&]refurijI uh1hhj? ubh /上瀏覽。}(hj? hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhj hhubh)}(hX在將一個建議的補丁提交到這樣的子系統樹之前,需要對它進行審查,審查主要發生 在郵件列表上(請參見下面相應的部分)。對於幾個內核子系統,這個審查過程是通 過工具補丁跟蹤的。Patchwork提供了一個Web界面,顯示補丁發布、對補丁的任何評 論或修訂,維護人員可以將補丁標記爲正在審查、接受或拒絕。大多數補丁網站都列 在 https://patchwork.kernel.org/h](hX在將一個建議的補丁提交到這樣的子系統樹之前,需要對它進行審查,審查主要發生 在郵件列表上(請參見下面相應的部分)。對於幾個內核子系統,這個審查過程是通 過工具補丁跟蹤的。Patchwork提供了一個Web界面,顯示補丁發布、對補丁的任何評 論或修訂,維護人員可以將補丁標記爲正在審查、接受或拒絕。大多數補丁網站都列 在 }(hj` hhhNhNubh)}(hhttps://patchwork.kernel.org/h]hhttps://patchwork.kernel.org/}(hjh hhhNhNubah}(h]h ]h"]h$]h&]refurijj uh1hhj` ubeh}(h]h ]h"]h$]h&]uh1hhhhKhj hhubeh}(h]id7ah ]h"]子系統特定樹ah$]h&]uh1jhjhhhhhKubj)}(hhh](j)}(hLinux-next 集成測試樹h]hLinux-next 集成測試樹}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj hhhhhKubh)}(h在將子系統樹的更新合併到主線樹之前,需要對它們進行集成測試。爲此,存在一個 特殊的測試存儲庫,其中幾乎每天都會提取所有子系統樹:h]h在將子系統樹的更新合併到主線樹之前,需要對它們進行集成測試。爲此,存在一個 特殊的測試存儲庫,其中幾乎每天都會提取所有子系統樹:}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj hhubj)}(hAhttps://git.kernel.org/?p=linux/kernel/git/next/linux-next.git h]h)}(h@https://git.kernel.org/?p=linux/kernel/git/next/linux-next.gith](h)}(hhttps://git.kernel.org/h]hhttps://git.kernel.org/}(hj hhhNhNubah}(h]h ]h"]h$]h&]refurij uh1hhj ubh)?p=linux/kernel/git/next/linux-next.git}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhMhj ubah}(h]h ]h"]h$]h&]uh1jhhhMhj hhubh)}(h通過這種方式,Linux-next 對下一個合併階段將進入主線內核的內容給出了一個概要 展望。非常歡冒險的測試者運行測試Linux-next。h]h通過這種方式,Linux-next 對下一個合併階段將進入主線內核的內容給出了一個概要 展望。非常歡冒險的測試者運行測試Linux-next。}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhj hhubeh}(h] linux-nextah ]h"]linux-next 集成測試樹ah$]h&]uh1jhjhhhhhKubj)}(hhh](j)}(h'多個主要版本的穩定版內核樹h]h'多個主要版本的穩定版內核樹}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj hhhhhMubh)}(h由3個數字組成的內核版本號說明此內核是-stable版本。它們包含內核的相對較小且 至關重要的修補,這些修補針對安全性問題或者嚴重的內核退步。h]h由3個數字組成的內核版本號說明此內核是-stable版本。它們包含內核的相對較小且 至關重要的修補,這些修補針對安全性問題或者嚴重的內核退步。}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhj hhubh)}(h這種版本的內核適用於那些期望獲得最新的穩定版內核並且不想參與測試開發版或 者實驗版的用戶。h]h這種版本的內核適用於那些期望獲得最新的穩定版內核並且不想參與測試開發版或 者實驗版的用戶。}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhM hj hhubh)}(h穩定版內核樹版本由「穩定版」小組(郵件地址)維護,一般 隔周發布新版本。h](h@穩定版內核樹版本由「穩定版」小組(郵件地址<}(hj hhhNhNubh)}(hstable@vger.kernel.orgh]hstable@vger.kernel.org}(hj hhhNhNubah}(h]h ]h"]h$]h&]refurimailto:stable@vger.kernel.orguh1hhj ubh,>)維護,一般 隔周發布新版本。}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhMhj hhubh)}(h內核源碼中的 :ref:`Documentation/process/stable-kernel-rules.rst ` 文件具體描述了可被穩定版內核接受的修改類型以及發布的流程。h](h內核源碼中的 }(hj0 hhhNhNubh)}(hJ:ref:`Documentation/process/stable-kernel-rules.rst `h]j7)}(hj: h]h-Documentation/process/stable-kernel-rules.rst}(hj< hhhNhNubah}(h]h ](jBstdstd-refeh"]h$]h&]uh1j6hj8 ubah}(h]h ]h"]h$]h&]refdocjO refdomainjF reftyperef refexplicitrefwarnjUstable_kernel_rulesuh1hhhhMhj0 ubhX 文件具體描述了可被穩定版內核接受的修改類型以及發布的流程。}(hj0 hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhMhj hhubeh}(h]id8ah ]h"]'多個主要版本的穩定版內核樹ah$]h&]uh1jhjhhhhhMubj)}(hhh](j)}(h 報告bugh]h 報告bug}(hjm hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjj hhhhhMubh)}(hbugzilla.kernel.org是Linux內核開發者們用來跟蹤內核Bug的網站。我們鼓勵用 戶在這個工具中報告找到的所有bug。如何使用內核bugzilla的細節請訪問:h]hbugzilla.kernel.org是Linux內核開發者們用來跟蹤內核Bug的網站。我們鼓勵用 戶在這個工具中報告找到的所有bug。如何使用內核bugzilla的細節請訪問:}(hj{ hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhjj hhubj)}(h)http://test.kernel.org/bugzilla/faq.html h]h)}(h(http://test.kernel.org/bugzilla/faq.htmlh]h)}(hj h]h(http://test.kernel.org/bugzilla/faq.html}(hj hhhNhNubah}(h]h ]h"]h$]h&]refurij uh1hhj ubah}(h]h ]h"]h$]h&]uh1hhhhMhj ubah}(h]h ]h"]h$]h&]uh1jhhhMhjj hhubh)}(h內核源碼主目錄中的:ref:`admin-guide/reporting-bugs.rst ` 文件里有一個很好的模板。它指導用戶如何報告可能的內核bug以及需要提供哪些信息 來幫助內核開發者們找到問題的根源。h](h 內核源碼主目錄中的:ref:}(hj hhhNhNubj)}(h0`admin-guide/reporting-bugs.rst `h]h.admin-guide/reporting-bugs.rst }(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubh 文件里有一個很好的模板。它指導用戶如何報告可能的內核bug以及需要提供哪些信息 來幫助內核開發者們找到問題的根源。}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhMhjj hhubeh}(h]bugah ]h"] 報告bugah$]h&]uh1jhjhhhhhMubj)}(hhh](j)}(h利用bug報告h]h利用bug報告}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj hhhhhM#ubh)}(hXw練習內核開發技能的最好辦法就是修改其他人報告的bug。你不光可以幫助內核變 得更加穩定,還可以學會如何解決實際問題從而提高自己的技能,並且讓其他開發 者感受到你的存在。修改bug是贏得其他開發者讚譽的最好辦法,因爲並不是很多 人都喜歡浪費時間去修改別人報告的bug。h]hXw練習內核開發技能的最好辦法就是修改其他人報告的bug。你不光可以幫助內核變 得更加穩定,還可以學會如何解決實際問題從而提高自己的技能,並且讓其他開發 者感受到你的存在。修改bug是贏得其他開發者讚譽的最好辦法,因爲並不是很多 人都喜歡浪費時間去修改別人報告的bug。}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhM%hj hhubh)}(hL要嘗試修改已知的bug,請訪問 http://bugzilla.kernel.org 網址。h](h(要嘗試修改已知的bug,請訪問 }(hj hhhNhNubh)}(hhttp://bugzilla.kernel.orgh]hhttp://bugzilla.kernel.org}(hj hhhNhNubah}(h]h ]h"]h$]h&]refurij uh1hhj ubh 網址。}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhM*hj hhubeh}(h]id9ah ]h"]利用bug報告ah$]h&]uh1jhjhhhhhM#ubj)}(hhh](j)}(h 郵件列表h]h 郵件列表}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj hhhhhM.ubh)}(h正如上面的文檔所描述,大多數的骨幹內核開發者都加入了Linux Kernel郵件列 表。如何訂閱和退訂列表的細節可以在這裡找到:h]h正如上面的文檔所描述,大多數的骨幹內核開發者都加入了Linux Kernel郵件列 表。如何訂閱和退訂列表的細節可以在這裡找到:}(hj, hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhM0hj hhubj)}(h4http://vger.kernel.org/vger-lists.html#linux-kernel h]h)}(h3http://vger.kernel.org/vger-lists.html#linux-kernelh]h)}(hj@ h]h3http://vger.kernel.org/vger-lists.html#linux-kernel}(hjB hhhNhNubah}(h]h ]h"]h$]h&]refurij@ uh1hhj> ubah}(h]h ]h"]h$]h&]uh1hhhhM3hj: ubah}(h]h ]h"]h$]h&]uh1jhhhM3hj hhubh)}(hy網上很多地方都有這個郵件列表的存檔(archive)。可以使用搜尋引擎來找到這些 存檔。比如:.h]hy網上很多地方都有這個郵件列表的存檔(archive)。可以使用搜尋引擎來找到這些 存檔。比如:}(hj\ hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhM5hj hhubj)}(hhttps://lore.kernel.org/lkml/ h]h)}(hhttps://lore.kernel.org/lkml/h]h)}(hjp h]hhttps://lore.kernel.org/lkml/}(hjr hhhNhNubah}(h]h ]h"]h$]h&]refurijp uh1hhjn ubah}(h]h ]h"]h$]h&]uh1hhhhM8hjj ubah}(h]h ]h"]h$]h&]uh1jhhhM8hj hhubh)}(h在發信之前,我們強烈建議你先在存檔中搜索你想要討論的問題。很多已經被詳細 討論過的問題只在郵件列表的存檔中可以找到。h]h在發信之前,我們強烈建議你先在存檔中搜索你想要討論的問題。很多已經被詳細 討論過的問題只在郵件列表的存檔中可以找到。}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhM:hj hhubh)}(h大多數內核子系統也有自己獨立的郵件列表來協調各自的開發工作。從 MAINTAINERS文件中可以找到不同話題對應的郵件列表。h]h大多數內核子系統也有自己獨立的郵件列表來協調各自的開發工作。從 MAINTAINERS文件中可以找到不同話題對應的郵件列表。}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhM=hj hhubh)}(ha很多郵件列表架設在kernel.org伺服器上。這些列表的信息可以在這裡找到:h]ha很多郵件列表架設在kernel.org伺服器上。這些列表的信息可以在這裡找到:}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhM@hj hhubj)}(h'http://vger.kernel.org/vger-lists.html h]h)}(h&http://vger.kernel.org/vger-lists.htmlh]h)}(hj h]h&http://vger.kernel.org/vger-lists.html}(hj hhhNhNubah}(h]h ]h"]h$]h&]refurij uh1hhj ubah}(h]h ]h"]h$]h&]uh1hhhhMBhj ubah}(h]h ]h"]h$]h&]uh1jhhhMBhj hhubh)}(h在使用這些郵件列表時,請記住保持良好的行爲習慣。下面的連結提供了與這些列 表(或任何其它郵件列表)交流的一些簡單規則,雖然內容有點濫竽充數。h]h在使用這些郵件列表時,請記住保持良好的行爲習慣。下面的連結提供了與這些列 表(或任何其它郵件列表)交流的一些簡單規則,雖然內容有點濫竽充數。}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMDhj hhubj)}(h"http://www.albion.com/netiquette/ h]h)}(h!http://www.albion.com/netiquette/h]h)}(hj h]h!http://www.albion.com/netiquette/}(hj hhhNhNubah}(h]h ]h"]h$]h&]refurij uh1hhj ubah}(h]h ]h"]h$]h&]uh1hhhhMGhj ubah}(h]h ]h"]h$]h&]uh1jhhhMGhj hhubh)}(hX當有很多人回覆你的郵件時,郵件的抄送列表會變得很長。請不要將任何人從抄送 列表中刪除,除非你有足夠的理由這麼做。也不要只回復到郵件列表。請習慣於同 一封郵件接收兩次(一封來自發送者一封來自郵件列表),而不要試圖通過添加一 些奇特的郵件頭來解決這個問題,人們不會喜歡的。h]hX當有很多人回覆你的郵件時,郵件的抄送列表會變得很長。請不要將任何人從抄送 列表中刪除,除非你有足夠的理由這麼做。也不要只回復到郵件列表。請習慣於同 一封郵件接收兩次(一封來自發送者一封來自郵件列表),而不要試圖通過添加一 些奇特的郵件頭來解決這個問題,人們不會喜歡的。}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMIhj hhubh)}(h記住保留你所回復內容的上下文和源頭。在你回覆郵件的頂部保留「某某某說到……」 這幾行。將你的評論加在被引用的段落之間而不要放在郵件的頂部。h]h記住保留你所回復內容的上下文和源頭。在你回覆郵件的頂部保留「某某某說到……」 這幾行。將你的評論加在被引用的段落之間而不要放在郵件的頂部。}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMNhj hhubh)}(hX如果你在郵件中附帶補丁,請確認它們是可以直接閱讀的純文本(如 :ref:`Documentation/translations/zh_TW/process/submitting-patches.rst ` 文檔中所述)。內核開發者們不希望遇到附件或者被壓縮了的補丁。只有這樣才能 保證他們可以直接評論你的每行代碼。請確保你使用的郵件發送程序不會修改空格 和制表符。一個防範性的測試方法是先將郵件發送給自己,然後自己嘗試是否可以 順利地打上收到的補丁。如果測試不成功,請調整或者更換你的郵件發送程序直到 它正確工作爲止。h](h[如果你在郵件中附帶補丁,請確認它們是可以直接閱讀的純文本(如 }(hj$ hhhNhNubh)}(h]:ref:`Documentation/translations/zh_TW/process/submitting-patches.rst `h]j7)}(hj. h]h?Documentation/translations/zh_TW/process/submitting-patches.rst}(hj0 hhhNhNubah}(h]h ](jBstdstd-refeh"]h$]h&]uh1j6hj, ubah}(h]h ]h"]h$]h&]refdocjO refdomainj: reftyperef refexplicitrefwarnjUtw_submittingpatchesuh1hhhhMQhj$ ubhX 文檔中所述)。內核開發者們不希望遇到附件或者被壓縮了的補丁。只有這樣才能 保證他們可以直接評論你的每行代碼。請確保你使用的郵件發送程序不會修改空格 和制表符。一個防範性的測試方法是先將郵件發送給自己,然後自己嘗試是否可以 順利地打上收到的補丁。如果測試不成功,請調整或者更換你的郵件發送程序直到 它正確工作爲止。}(hj$ hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhMQhj hhubh)}(h9總而言之,請尊重其他的郵件列表訂閱者。h]h9總而言之,請尊重其他的郵件列表訂閱者。}(hjV hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMYhj hhubeh}(h]id10ah ]h"] 郵件列表ah$]h&]uh1jhjhhhhhM.ubj)}(hhh](j)}(h同內核社區合作h]h同內核社區合作}(hjo hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjl hhhhhM]ubh)}(h內核社區的目標就是提供盡善盡美的內核。所以當你提交補丁期望被接受進內核的 時候,它的技術價值以及其他方面都將被評審。那麼你可能會得到什麼呢?h]h內核社區的目標就是提供盡善盡美的內核。所以當你提交補丁期望被接受進內核的 時候,它的技術價值以及其他方面都將被評審。那麼你可能會得到什麼呢?}(hj} hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhM_hjl hhubj)}(hK- 批評 - 評論 - 要求修改 - 要求證明修改的必要性 - 沉默 h]j)}(hhh](j)}(h批評h]h)}(hj h]h批評}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMbhj ubah}(h]h ]h"]h$]h&]uh1jhj ubj)}(h評論h]h)}(hj h]h評論}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMchj ubah}(h]h ]h"]h$]h&]uh1jhj ubj)}(h 要求修改h]h)}(hj h]h 要求修改}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMdhj ubah}(h]h ]h"]h$]h&]uh1jhj ubj)}(h要求證明修改的必要性h]h)}(hj h]h要求證明修改的必要性}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMehj ubah}(h]h ]h"]h$]h&]uh1jhj ubj)}(h沉默 h]h)}(h沉默h]h沉默}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMfhj ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]jFjGuh1jhhhMbhj ubah}(h]h ]h"]h$]h&]uh1jhhhMbhjl hhubh)}(hX_要記住,這些是把補丁放進內核的正常情況。你必須學會聽取對補丁的批評和評論, 從技術層面評估它們,然後要麼重寫你的補丁要麼簡明扼要地論證修改是不必要 的。如果你發的郵件沒有得到任何回應,請過幾天後再試一次,因爲有時信件會湮 沒在茫茫信海中。h]hX_要記住,這些是把補丁放進內核的正常情況。你必須學會聽取對補丁的批評和評論, 從技術層面評估它們,然後要麼重寫你的補丁要麼簡明扼要地論證修改是不必要 的。如果你發的郵件沒有得到任何回應,請過幾天後再試一次,因爲有時信件會湮 沒在茫茫信海中。}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhhjl hhubh)}(h你不應該做的事情:h]h你不應該做的事情:}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMmhjl hhubj)}(h- 期望自己的補丁不受任何質疑就直接被接受 - 翻臉 - 忽略別人的評論 - 沒有按照別人的要求做任何修改就重新提交 h]j)}(hhh](j)}(h9期望自己的補丁不受任何質疑就直接被接受h]h)}(hj7h]h9期望自己的補丁不受任何質疑就直接被接受}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMohj5ubah}(h]h ]h"]h$]h&]uh1jhj2ubj)}(h翻臉h]h)}(hjNh]h翻臉}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMphjLubah}(h]h ]h"]h$]h&]uh1jhj2ubj)}(h忽略別人的評論h]h)}(hjeh]h忽略別人的評論}(hjghhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMqhjcubah}(h]h ]h"]h$]h&]uh1jhj2ubj)}(h:沒有按照別人的要求做任何修改就重新提交 h]h)}(h9沒有按照別人的要求做任何修改就重新提交h]h9沒有按照別人的要求做任何修改就重新提交}(hj~hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMrhjzubah}(h]h ]h"]h$]h&]uh1jhj2ubeh}(h]h ]h"]h$]h&]jFjGuh1jhhhMohj.ubah}(h]h ]h"]h$]h&]uh1jhhhMohjl hhubh)}(hXY在一個努力追尋最好技術方案的社區里,對於一個補丁有多少好處總會有不同的見 解。你必須要抱著合作的態度,願意改變自己的觀點來適應內核的風格。或者至少 願意去證明你的想法是有價值的。記住,犯錯誤是允許的,只要你願意朝著正確的 方案去努力。h]hXY在一個努力追尋最好技術方案的社區里,對於一個補丁有多少好處總會有不同的見 解。你必須要抱著合作的態度,願意改變自己的觀點來適應內核的風格。或者至少 願意去證明你的想法是有價值的。記住,犯錯誤是允許的,只要你願意朝著正確的 方案去努力。}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMthjl hhubh)}(h如果你的第一個補丁換來的是一堆修改建議,這是很正常的。這並不代表你的補丁 不會被接受,也不意味著有人和你作對。你只需要改正所有提出的問題然後重新發 送你的補丁。h]h如果你的第一個補丁換來的是一堆修改建議,這是很正常的。這並不代表你的補丁 不會被接受,也不意味著有人和你作對。你只需要改正所有提出的問題然後重新發 送你的補丁。}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMyhjl hhubeh}(h]id11ah ]h"]同內核社區合作ah$]h&]uh1jhjhhhhhM]ubj)}(hhh](j)}(h$內核社區和公司文化的差異h]h$內核社區和公司文化的差異}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjhhhhhM~ubh)}(h內核社區的工作模式同大多數傳統公司開發隊伍的工作模式並不相同。下面這些例 子,可以幫助你避免某些可能發生問題: 用這些話介紹你的修改提案會有好處:h]h內核社區的工作模式同大多數傳統公司開發隊伍的工作模式並不相同。下面這些例 子,可以幫助你避免某些可能發生問題: 用這些話介紹你的修改提案會有好處:}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhjhhubj)}(hX- 它同時解決了多個問題 - 它刪除了2000行代碼 - 這是補丁,它已經解釋了我想要說明的 - 我在5種不同的體系結構上測試過它…… - 這是一系列小補丁用來…… - 這個修改提高了普通機器的性能…… h]j)}(hhh](j)}(h它同時解決了多個問題h]h)}(hjh]h它同時解決了多個問題}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhjubah}(h]h ]h"]h$]h&]uh1jhjubj)}(h它刪除了2000行代碼h]h)}(hjh]h它刪除了2000行代碼}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhjubah}(h]h ]h"]h$]h&]uh1jhjubj)}(h3這是補丁,它已經解釋了我想要說明的h]h)}(hjh]h3這是補丁,它已經解釋了我想要說明的}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhjubah}(h]h ]h"]h$]h&]uh1jhjubj)}(h4我在5種不同的體系結構上測試過它……h]h)}(hj/h]h4我在5種不同的體系結構上測試過它……}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhj-ubah}(h]h ]h"]h$]h&]uh1jhjubj)}(h$這是一系列小補丁用來……h]h)}(hjFh]h$這是一系列小補丁用來……}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhjDubah}(h]h ]h"]h$]h&]uh1jhjubj)}(h1這個修改提高了普通機器的性能…… h]h)}(h0這個修改提高了普通機器的性能……h]h0這個修改提高了普通機器的性能……}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhj[ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]jFjGuh1jhhhMhjubah}(h]h ]h"]h$]h&]uh1jhhhMhjhhubh)}(h應該避免如下的說法:h]h應該避免如下的說法:}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhjhhubj)}(hX- 我們在AIX/ptx/Solaris就是這麼做的,所以這麼做肯定是好的…… - 我做這行已經20年了,所以…… - 爲了我們公司賺錢考慮必須這麼做 - 這是我們的企業產品線所需要的 - 這裡是描述我觀點的1000頁設計文檔 - 這是一個5000行的補丁用來…… - 我重寫了現在亂七八糟的代碼,這就是…… - 我被規定了最後期限,所以這個補丁需要立刻被接受 h]j)}(hhh](j)}(hQ我們在AIX/ptx/Solaris就是這麼做的,所以這麼做肯定是好的……h]h)}(hjh]hQ我們在AIX/ptx/Solaris就是這麼做的,所以這麼做肯定是好的……}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhjubah}(h]h ]h"]h$]h&]uh1jhjubj)}(h)我做這行已經20年了,所以……h]h)}(hjh]h)我做這行已經20年了,所以……}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhjubah}(h]h ]h"]h$]h&]uh1jhjubj)}(h-爲了我們公司賺錢考慮必須這麼做h]h)}(hjh]h-爲了我們公司賺錢考慮必須這麼做}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhjubah}(h]h ]h"]h$]h&]uh1jhjubj)}(h*這是我們的企業產品線所需要的h]h)}(hjh]h*這是我們的企業產品線所需要的}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhjubah}(h]h ]h"]h$]h&]uh1jhjubj)}(h.這裡是描述我觀點的1000頁設計文檔h]h)}(hjh]h.這裡是描述我觀點的1000頁設計文檔}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhjubah}(h]h ]h"]h$]h&]uh1jhjubj)}(h(這是一個5000行的補丁用來……h]h)}(hj h]h(這是一個5000行的補丁用來……}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhjubah}(h]h ]h"]h$]h&]uh1jhjubj)}(h9我重寫了現在亂七八糟的代碼,這就是……h]h)}(hj h]h9我重寫了現在亂七八糟的代碼,這就是……}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhjubah}(h]h ]h"]h$]h&]uh1jhjubj)}(hF我被規定了最後期限,所以這個補丁需要立刻被接受 h]h)}(hE我被規定了最後期限,所以這個補丁需要立刻被接受h]hE我被規定了最後期限,所以這個補丁需要立刻被接受}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhj5ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]jFjGuh1jhhhMhjubah}(h]h ]h"]h$]h&]uh1jhhhMhjhhubh)}(hXl另外一個內核社區與大部分傳統公司的軟體開發隊伍不同的地方是無法面對面地交 流。使用電子郵件和IRC聊天工具做爲主要溝通工具的一個好處是性別和種族歧視 將會更少。Linux內核的工作環境更能接受婦女和少數族羣,因爲每個人在別人眼 里只是一個郵件地址。國際化也幫助了公平的實現,因爲你無法通過姓名來判斷人 的性別。男人有可能叫李麗,女人也有可能叫王剛。大多數在Linux內核上工作過 並表達過看法的女性對在linux上工作的經歷都給出了正面的評價。h]hXl另外一個內核社區與大部分傳統公司的軟體開發隊伍不同的地方是無法面對面地交 流。使用電子郵件和IRC聊天工具做爲主要溝通工具的一個好處是性別和種族歧視 將會更少。Linux內核的工作環境更能接受婦女和少數族羣,因爲每個人在別人眼 里只是一個郵件地址。國際化也幫助了公平的實現,因爲你無法通過姓名來判斷人 的性別。男人有可能叫李麗,女人也有可能叫王剛。大多數在Linux內核上工作過 並表達過看法的女性對在linux上工作的經歷都給出了正面的評價。}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhjhhubh)}(h對於一些不習慣使用英語的人來說,語言可能是一個引起問題的障礙。在郵件列表 中要正確地表達想法必需良好地掌握語言,所以建議你在發送郵件之前最好檢查一 下英文寫得是否正確。h]h對於一些不習慣使用英語的人來說,語言可能是一個引起問題的障礙。在郵件列表 中要正確地表達想法必需良好地掌握語言,所以建議你在發送郵件之前最好檢查一 下英文寫得是否正確。}(hjghhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhjhhubeh}(h]id12ah ]h"]$內核社區和公司文化的差異ah$]h&]uh1jhjhhhhhM~ubj)}(hhh](j)}(h 拆分修改h]h 拆分修改}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj}hhhhhMubh)}(hX(Linux內核社區並不喜歡一下接收大段的代碼。修改需要被恰當地介紹、討論並且 拆分成獨立的小段。這幾乎完全和公司中的習慣背道而馳。你的想法應該在開發最 開始的階段就讓大家知道,這樣你就可以及時獲得對你正在進行的開發的反饋。這 樣也會讓社區覺得你是在和他們協作,而不是僅僅把他們當作傾銷新功能的對象。 無論如何,你不要一次性地向郵件列表發送50封信,你的補丁序列應該永遠用不到 這麼多。h]hX(Linux內核社區並不喜歡一下接收大段的代碼。修改需要被恰當地介紹、討論並且 拆分成獨立的小段。這幾乎完全和公司中的習慣背道而馳。你的想法應該在開發最 開始的階段就讓大家知道,這樣你就可以及時獲得對你正在進行的開發的反饋。這 樣也會讓社區覺得你是在和他們協作,而不是僅僅把他們當作傾銷新功能的對象。 無論如何,你不要一次性地向郵件列表發送50封信,你的補丁序列應該永遠用不到 這麼多。}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhj}hhubh)}(h!將補丁拆開的原因如下:h]h!將補丁拆開的原因如下:}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhj}hhubhenumerated_list)}(hhh]j)}(hX小的補丁更有可能被接受,因爲它們不需要太多的時間和精力去驗證其正確性。 一個5行的補丁,可能在維護者看了一眼以後就會被接受。而500行的補丁則 需要數個小時來審查其正確性(所需時間隨補丁大小增加大約呈指數級增長)。 當出了問題的時候,小的補丁也會讓調試變得非常容易。一個一個補丁地回溯 將會比仔細剖析一個被打上的大補丁(這個補丁破壞了其他東西)容易得多。 h](h)}(hX5小的補丁更有可能被接受,因爲它們不需要太多的時間和精力去驗證其正確性。 一個5行的補丁,可能在維護者看了一眼以後就會被接受。而500行的補丁則 需要數個小時來審查其正確性(所需時間隨補丁大小增加大約呈指數級增長)。h]hX5小的補丁更有可能被接受,因爲它們不需要太多的時間和精力去驗證其正確性。 一個5行的補丁,可能在維護者看了一眼以後就會被接受。而500行的補丁則 需要數個小時來審查其正確性(所需時間隨補丁大小增加大約呈指數級增長)。}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhjubh)}(h當出了問題的時候,小的補丁也會讓調試變得非常容易。一個一個補丁地回溯 將會比仔細剖析一個被打上的大補丁(這個補丁破壞了其他東西)容易得多。h]h當出了問題的時候,小的補丁也會讓調試變得非常容易。一個一個補丁地回溯 將會比仔細剖析一個被打上的大補丁(這個補丁破壞了其他東西)容易得多。}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhjubeh}(h]h ]h"]h$]h&]uh1jhjhhhhhNubah}(h]h ]h"]h$]h&]enumtypearabicprefixhsuffix)uh1jhj}hhhhhMubj)}(hhh](j)}(h2)不光發送小的補丁很重要,在提交之前重新編排、化簡(或者僅僅重新排列) 補丁也是很重要的。 h](j)}(hj2)不光發送小的補丁很重要,在提交之前重新編排、化簡(或者僅僅重新排列)h]hj2)不光發送小的補丁很重要,在提交之前重新編排、化簡(或者僅僅重新排列)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhMhjubj)}(hhh]h)}(h補丁也是很重要的。h]h補丁也是很重要的。}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhhhMhjubj)}(hX這裡有內核開發者Al Viro打的一個比方: 「想像一個老師正在給學生批改數學作業。老師並不希望看到學生爲了得 到正確解法所進行的嘗試和產生的錯誤。他希望看到的是最乾淨最優雅的 解答。好學生了解這點,絕不會把最終解決之前的中間方案提交上去。」 內核開發也是這樣。維護者和評審者不希望看到一個人在解決問題時的思 考過程。他們只希望看到簡單和優雅的解決方案。 h](j)}(h4這裡有內核開發者Al Viro打的一個比方:h]h4這裡有內核開發者Al Viro打的一個比方:}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhMhjubj)}(hhh](h)}(hX"「想像一個老師正在給學生批改數學作業。老師並不希望看到學生爲了得 到正確解法所進行的嘗試和產生的錯誤。他希望看到的是最乾淨最優雅的 解答。好學生了解這點,絕不會把最終解決之前的中間方案提交上去。」h]hX"「想像一個老師正在給學生批改數學作業。老師並不希望看到學生爲了得 到正確解法所進行的嘗試和產生的錯誤。他希望看到的是最乾淨最優雅的 解答。好學生了解這點,絕不會把最終解決之前的中間方案提交上去。」}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhj$ubh)}(h內核開發也是這樣。維護者和評審者不希望看到一個人在解決問題時的思 考過程。他們只希望看到簡單和優雅的解決方案。h]h內核開發也是這樣。維護者和評審者不希望看到一個人在解決問題時的思 考過程。他們只希望看到簡單和優雅的解決方案。}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhj$ubeh}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhhhMhjhhubeh}(h]h ]h"]h$]h&]uh1jhj}hhhhhNubh)}(hXb直接給出一流的解決方案,和社區一起協作討論尚未完成的工作,這兩者之間似乎 很難找到一個平衡點。所以最好儘早開始收集有利於你進行改進的反饋;同時也要 保證修改分成很多小塊,這樣在整個項目都準備好被包含進內核之前,其中的一部 分可能會先被接收。h]hXb直接給出一流的解決方案,和社區一起協作討論尚未完成的工作,這兩者之間似乎 很難找到一個平衡點。所以最好儘早開始收集有利於你進行改進的反饋;同時也要 保證修改分成很多小塊,這樣在整個項目都準備好被包含進內核之前,其中的一部 分可能會先被接收。}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhj}hhubh)}(hs必須了解這樣做是不可接受的:試圖將未完成的工作提交進內核,然後再找時間修 復。h]hs必須了解這樣做是不可接受的:試圖將未完成的工作提交進內核,然後再找時間修 復。}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhj}hhubeh}(h]id13ah ]h"] 拆分修改ah$]h&]uh1jhjhhhhhMubj)}(hhh](j)}(h證明修改的必要性h]h證明修改的必要性}(hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjyhhhhhMubh)}(h除了將補丁拆成小塊,很重要的一點是讓Linux社區了解他們爲什麼需要這樣修改。 你必須證明新功能是有人需要的並且是有用的。h]h除了將補丁拆成小塊,很重要的一點是讓Linux社區了解他們爲什麼需要這樣修改。 你必須證明新功能是有人需要的並且是有用的。}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhjyhhubeh}(h]id14ah ]h"]證明修改的必要性ah$]h&]uh1jhjhhhhhMubj)}(hhh](j)}(h 記錄修改h]h 記錄修改}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjhhhhhMubh)}(h當你發送補丁的時候,需要特別留意郵件正文的內容。因爲這裡的信息將會做爲補 丁的修改記錄(ChangeLog),會被一直保留以備大家查閱。它需要完全地描述補丁, 包括:h]h當你發送補丁的時候,需要特別留意郵件正文的內容。因爲這裡的信息將會做爲補 丁的修改記錄(ChangeLog),會被一直保留以備大家查閱。它需要完全地描述補丁, 包括:}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhjhhubj)}(hT- 爲什麼需要這個修改 - 補丁的總體設計 - 實現細節 - 測試結果 h]j)}(hhh](j)}(h爲什麼需要這個修改h]h)}(hjh]h爲什麼需要這個修改}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhjubah}(h]h ]h"]h$]h&]uh1jhjubj)}(h補丁的總體設計h]h)}(hjh]h補丁的總體設計}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhjubah}(h]h ]h"]h$]h&]uh1jhjubj)}(h 實現細節h]h)}(hjh]h 實現細節}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhjubah}(h]h ]h"]h$]h&]uh1jhjubj)}(h 測試結果 h]h)}(h 測試結果h]h 測試結果}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhj ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]jFjGuh1jhhhMhjubah}(h]h ]h"]h$]h&]uh1jhhhMhjhhubj)}(hhh]j)}(h想了解它具體應該看起來像什麼,請查閱以下文檔中的「ChangeLog」章節: 「The Perfect Patch」 https://www.ozlabs.org/~akpm/stuff/tpp.txt h](j)}(h`想了解它具體應該看起來像什麼,請查閱以下文檔中的「ChangeLog」章節:h]h`想了解它具體應該看起來像什麼,請查閱以下文檔中的「ChangeLog」章節:}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhMhj2ubj)}(hhh]j)}(hhh]j)}(hD「The Perfect Patch」 https://www.ozlabs.org/~akpm/stuff/tpp.txt h](j)}(h「The Perfect Patch」h]h「The Perfect Patch」}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhMhjJubj)}(hhh]h)}(h*https://www.ozlabs.org/~akpm/stuff/tpp.txth]h)}(hjah]h*https://www.ozlabs.org/~akpm/stuff/tpp.txt}(hjchhhNhNubah}(h]h ]h"]h$]h&]refurijauh1hhj_ubah}(h]h ]h"]h$]h&]uh1hhhhMhj\ubah}(h]h ]h"]h$]h&]uh1jhjJubeh}(h]h ]h"]h$]h&]uh1jhhhMhjGubah}(h]h ]h"]h$]h&]uh1jhjDubah}(h]h ]h"]h$]h&]uh1jhj2ubeh}(h]h ]h"]h$]h&]uh1jhhhMhj/ubah}(h]h ]h"]h$]h&]uh1jhjhhhNhNubh)}(hX1這些事情有時候做起來很難。要在任何方面都做到完美可能需要好幾年時間。這是 一個持續提高的過程,它需要大量的耐心和決心。只要不放棄,你一定可以做到。 很多人已經做到了,而他們都曾經和現在的你站在同樣的起點上。h]hX1這些事情有時候做起來很難。要在任何方面都做到完美可能需要好幾年時間。這是 一個持續提高的過程,它需要大量的耐心和決心。只要不放棄,你一定可以做到。 很多人已經做到了,而他們都曾經和現在的你站在同樣的起點上。}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhjhhubeh}(h]id15ah ]h"] 記錄修改ah$]h&]uh1jhjhhhhhMubj)}(hhh](j)}(h感謝h]h感謝}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjhhhhhMubh)}(hX;感謝Paolo Ciarrocchi允許「開發流程」部分基於他所寫的文章 (http://www.kerneltravel.net/newbie/2.6-development_process),感謝Randy Dunlap和Gerrit Huizenga完善了應該說和不該說的列表。感謝Pat Mochel, Hanna Linder, Randy Dunlap, Kay Sievers, Vojtech Pavlik, Jan Kara, Josh Boyer, Kees Cook, Andrew Morton, Andi Kleen, Vadim Lobanov, Jesper Juhl, Adrian Bunk, Keri Harris, Frans Pop, David A. Wheeler, Junio Hamano, Michael Kerrisk和Alex Shepard的評審、建議和貢獻。沒有他們的幫助,這篇文檔是不可 能完成的。h](hN感謝Paolo Ciarrocchi允許「開發流程」部分基於他所寫的文章 (}(hjhhhNhNubh)}(h:http://www.kerneltravel.net/newbie/2.6-development_processh]h:http://www.kerneltravel.net/newbie/2.6-development_process}(hjhhhNhNubah}(h]h ]h"]h$]h&]refurijuh1hhjubhX),感謝Randy Dunlap和Gerrit Huizenga完善了應該說和不該說的列表。感謝Pat Mochel, Hanna Linder, Randy Dunlap, Kay Sievers, Vojtech Pavlik, Jan Kara, Josh Boyer, Kees Cook, Andrew Morton, Andi Kleen, Vadim Lobanov, Jesper Juhl, Adrian Bunk, Keri Harris, Frans Pop, David A. Wheeler, Junio Hamano, Michael Kerrisk和Alex Shepard的評審、建議和貢獻。沒有他們的幫助,這篇文檔是不可 能完成的。}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhMhjhhubh)}(h9英文版維護者: Greg Kroah-Hartman h](h*英文版維護者: Greg Kroah-Hartman <}(hjhhhNhNubh)}(hgreg@kroah.comh]hgreg@kroah.com}(hjhhhNhNubah}(h]h ]h"]h$]h&]refurimailto:greg@kroah.comuh1hhjubh>}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhMhjhhubeh}(h]id16ah ]h"]感謝ah$]h&]uh1jhjhhhhhMubeh}(h]linuxah ]h"]如何參與linux內核開發ah$]h&]uh1jhhhhhhhKubeh}(h]h ]h"]h$]h&]sourcehuh1hcurrent_sourceN current_lineNsettingsdocutils.frontendValues)}(jN generatorN datestampN source_linkN source_urlN toc_backlinksentryfootnote_backlinksK sectnum_xformKstrip_commentsNstrip_elements_with_classesN strip_classesN report_levelK halt_levelKexit_status_levelKdebugNwarning_streamN tracebackinput_encoding utf-8-siginput_encoding_error_handlerstrictoutput_encodingutf-8output_encoding_error_handlerj8error_encodingutf-8error_encoding_error_handlerbackslashreplace language_codeenrecord_dependenciesNconfigN id_prefixhauto_id_prefixid dump_settingsNdump_internalsNdump_transformsNdump_pseudo_xmlNexpose_internalsNstrict_visitorN_disable_configN_sourceh _destinationN _config_files]7/var/lib/git/docbuild/linux/Documentation/docutils.confafile_insertion_enabled raw_enabledKline_length_limitM'pep_referencesN pep_base_urlhttps://peps.python.org/pep_file_url_templatepep-%04drfc_referencesN rfc_base_url&https://datatracker.ietf.org/doc/html/ tab_widthKtrim_footnote_reference_spacesyntax_highlightlong smart_quotessmartquotes_locales]character_level_inline_markupdoctitle_xform docinfo_xformKsectsubtitle_xform image_loadinglinkembed_stylesheetcloak_email_addressessection_self_linkenvNubreporterNindirect_targets]substitution_defs}substitution_names}refnames}refids}h]hasnameids}(tw_process_howtohjjjojljjjjjjj8 j5 j j j j j j jg jd j j j j ji jf jjjzjwjvjsjjjjj ju nametypes}(j}jjojjjj8 j j j jg j j ji jjzjvjjj uh}(hj)}(hhh]j)}(hhh](j)}(horphanh]horphan}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjhhhKubj*)}(hhh]h}(h]h ]h"]h$]h&]uh1j)hjubeh}(h]h ]orphanah"]h$]h&]uh1jhhhKhhdocinfo)}(hhh]jah}(h]h ]h"]h$]h&]uh1jhhhhhNhNubhhubah}(h]hah ]h"]j}ah$]h&]uh1jhhhhhhhKexpect_referenced_by_name}j}hsexpect_referenced_by_id}hhsubjjjljjjrjjjjj5 jj j; j j j j jd j j jj j j jf j jjl jwjjsj}jjyjjjju footnote_refs} citation_refs} autofootnotes]autofootnote_refs]symbol_footnotes]symbol_footnote_refs] footnotes] citations]autofootnote_startKsymbol_footnote_startK id_counter collectionsCounter}jFKsRparse_messages]transform_messages]hsystem_message)}(hhh]h)}(hhh]h6Hyperlink target "tw-process-howto" is not referenced.}hjsbah}(h]h ]h"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]levelKtypeINFOsourcehlineKuh1juba transformerN include_log]2Documentation/translations/zh_TW/process/howto.rst(NNNNta decorationNhhub.