PEP 8015 – Python 社群的組織
- 作者:
- Victor Stinner
- 狀態:
- 已否決 (Rejected)
- 類型:
- 資訊類
- 主題:
- 治理
- 建立日期:
- 04-Oct-2018
摘要
此 PEP 正式化了 Python 社群目前的組織,並提出了 3 項主要變革
- 正式化「Python 團隊」的現有概念;
- 賦予 Python 團隊更大的自主權;
- 以新的 5 人「Python 治理委員會」取代 BDFL (Guido van Rossum),該委員會的職責有限:基本上決定如何做出決策,但本身不做出決策。
PEPs 由 PEP 委派者或投票(限核心開發者,需 >= 2/3 多數決)批准。
PEP 已拒絕
PEP 8015 已於 2018 年 12 月 17 日星期一,經由 PEP 8001 中描述的核心開發者投票否決。
PEP 8016 及其所描述的治理模式被選定取而代之。
原理
此 PEP 描述了整個 Python 開發社群的組織,從 Python 使用者到 Python 治理委員會。在同一份文件中描述所有群組和所有職責,有助於使組織更加一致。
治理變革的數量已降至最低,以實現從舊的 BDFL 組織到新的治理委員會組織的平穩過渡。
組織的一個關鍵設計是避免決策瓶頸。討論和決策分配給各個 Python 團隊,每個團隊都可找到其主題的專家。預期 PEP 上的討論會更順暢:由對主題有更深入了解的較少人數進行。
以前,大多數決策都由終身仁慈獨裁者 (BDFL) Guido van Rossum 做出。Python 日益增長的人氣增加了對單一個人的壓力。擬議的組織將決策和責任分散,以減輕壓力並避免任何個人感到疲憊。
為了將大部分決策權保留在社群手中,Python 治理委員會的職責非常有限。其理念是降低一群人或公司透過少數個人「接管」Python 專案的風險。該專案必須保持自主並對所有人開放。
最敏感的 PEP 由民主決定:一項限於核心開發者的投票,有關投票方法請參閱下方的 PEP 流程 部分。
常見準則
- Python 社群對所有人開放。
- 成員必須遵守 Python 社群行為準則,以確保討論保持建設性,並且每個人都感到受到歡迎。
- Python 是且將永遠是一個自主專案。
- 擁有決策權的人應反映其使用者和貢獻者的多樣性。
社群組織
目前,有不同群體的人參與到 Python 專案中。參與程度越高,您獲得的決策權越大。重要的是,進入最核心群體的人是最值得信賴的。
此 PEP 正式化以下群組
- Python 使用者
- Python 貢獻者
- Python 團隊成員
- Python 核心開發者
- Python 治理委員會成員
- PSF 行為準則工作小組
Python 使用者
這是最大的群體:任何使用 Python 的人。
Python 貢獻者
一旦 Python 使用者向 Python 郵件列表發送電子郵件、在 Python 錯誤追蹤器上發表評論、提出或審查 Python 變更,他們就成為了 Python 貢獻者。
Python 團隊
Python 變得太龐大,無法再作為一個獨特的團隊運作,人們自然而然地組成了團隊,更緊密地處理特定主題,有時被稱為「特殊興趣小組」(SIG)。
當有足夠的開發者對特定主題感興趣時,他們可以創建一個新團隊。通常,主要的行動是要求 Python 郵件管理員創建一個新的「SIG」郵件列表,但團隊也可以選擇使用不同的通訊管道。
團隊成員包括 Python 貢獻者和 Python 核心開發者。團隊是自治的,負責選擇誰可以以及如何加入團隊。
團隊成員可以在團隊錯誤追蹤器組件上獲得錯誤分類 (bug triage) 權限。您參與團隊的程度越深,您獲得的決策權和責任就越大。
團隊可能會被允許自行決定其 PEP,但只有 Python 治理委員會才能允許(並且它也有權撤銷此權限)。這種情況是例外的,目前只有一個團隊擁有此權限:套件管理團隊。
請參閱 附錄:Python 團隊範例。
Python 核心開發者
核心開發者的一個受限定義是能夠合併變更(程式碼的任何部分)並擁有錯誤分類 (bug triage) 權限(在所有錯誤追蹤器組件上)。
核心開發者是經證明擁有所需技能的開發者,能夠決定一項變更是否可以批准或必須拒絕,而且(更重要的是)哪些變更不應做出。Python 歷史悠久,對向後相容性有很大的限制,並有高標準的品質要求(例如:變更需要新的測試)。基於這些原因,成為核心開發者可能需要數月甚至更長時間。
成為核心開發者意味著更多的責任。例如,如果開發者合併了一項變更,他們將對回歸問題以及該修改程式碼的維護負責。
核心開發者在行為準則方面應當是模範。他們被鼓勵指導貢獻者。
將貢獻者晉升為核心開發者
一旦現有的核心開發者認為某位貢獻者已準備好加入核心群體,成為核心開發者,該核心開發者會詢問該貢獻者是否願意成為核心開發者。如果該貢獻者對這些新責任感興趣,則會組織一次投票。
投票限於核心開發者,公開進行,並開放 1 週。通常,提出晉升的核心開發者必須在投票描述中說明候選人的工作和技能。只有在三分之二(>= 2/3)的投票批准(「+1」)晉升時,貢獻者才會被晉升。僅計算「+1」和「-1」票;其他票(例如:無效、 「-0」、「+0.5」)將被忽略。
如果候選人獲得晉升,通常他們會獲得一位導師為期 1 個月的指導,以協助他們處理新的職責。
如果候選人未獲晉升,則可以在以後,當候選人獲得所需技能時,再次組織投票,例如 6 個月後。
Python 治理委員會
Python 治理委員會由最受信任的核心開發者組成,因為它擁有最大的決策權。這個群體的職責受到嚴格限制,以確保 Python 保持其自主性並對外開放。
Python 治理委員會由 5 名成員組成。他們任期 3 年,每年更換 1/3(第一年:1 名,第二年:2 名,第三年:2 名)。透過這種方式,成員將留任一個完整的 Python 版本週期,並且委員會的組成將頻繁更新。委員會成員可以競選他們即將離任的席位。沒有任期限制。
委員會成員必須是 Python 核心開發者。重要的是,委員會成員應反映 Python 使用者和貢獻者的多樣性。為確保這一點,其中一小步是強制規定,只有 2 名成員(嚴格少於 5 名成員的 50%)可以為同一雇主(同一公司或同一公司的子公司)工作。
5 名成員的人數是為了成員多樣性而選擇的,並確保即使一名成員因不明原因無法履行職責,委員會也能繼續運作。
Python 治理委員會的職責
Python 治理委員會職責
- 決定 PEP 如何被批准(或拒絕或延期)。
- 授予或撤銷 Python 團隊的權限。例如,允許團隊向貢獻者授予錯誤分類權限(在團隊組件上)。
為了決定 PEP 如何被批准(或拒絕或延期),有兩個選項
- 委員會選舉一位 PEP 委派者(以前稱為「BDFL 委派者」):一位核心開發者,將對特定 PEP 做出最終決定。委員會選擇 PEP 委派者,該委派者可以由討論 PEP 的 Python 團隊提出。
- 委員會可以組織對 PEP 的投票,投票組織請參閱 PEP 流程。委員會決定何時組織投票。對於影響所有 Python 使用者的變更,例如語言變更,優先採用投票方式。
委員會維持 Python 的「願景」和一致性。它也確保重要功能得以完成。他們選擇 PEP 委派者的能力旨在幫助他們實現這個目標。
Python 治理委員會成員的選舉
投票由治理委員會組織。它會提前 3 週公布:候選人必須在此期間申請。投票限於核心開發者,並開放 1 週。為了避免自我審查,投票採用不記名投票:避免可能獲得更多權力的人(如果他們當選)產生敵意的風險。
投票採用 孔多塞方法 (Condorcet method) 的 舒爾茨/擊敗路徑/CSSD (Schulze/Beatpath/CSSD) 變體,使用線上服務,例如 孔多塞網路投票服務 (CIVS)。這種投票方法降低了平手的風險。它還會產生所有候選人的排名,這是委員會成立所必需的。
如果出現平手,將立即在平手的候選人之間重新組織一次投票,使用相同的投票方法,並持續 1 週。如果第二次投票再次導致平手,則由現任治理委員會負責選擇當選成員。
如果委員會成員辭職,將組織一次新的投票以替補其職位。
如果委員會成員的情況發生變化,不再滿足委員會的限制(例如:他們搬到與其他兩名委員會成員相同的公司),他們必須辭職。如果某成員的雇主被其他兩名成員的雇主收購,則任期較早結束的成員必須在收購完成後辭職。
成立 Python 治理委員會成員的選舉
為了啟動該流程,在委員會成立時選出 5 名成員。投票遵循與常規委員會投票相同的規則,不同之處在於選舉需要 5 名成員,並且投票由 PSF 董事會組織。
在委員會選舉中,若前 5 名得票者中有 3 人來自同一雇主,則其中排名最低者將失去資格,並由第 6 名候選人遞補進入前 5 名;此過程重複進行直到形成合法的委員會為止。
如果出現平手,將立即在平手的候選人以及隨後的候選人之間組織第二次投票,以填補剩餘席位。投票遵循與常規委員會投票相同的規則。如果第二次投票仍然導致平手,則由 PSF 董事會負責選舉成員並決定他們在投票結果中的排名。
投票結果中的順序對於當選成員必須是唯一的:#1 和 #2 當選任期 3 年,#2 和 #3 任期 2 年,#5 任期 1 年。
投票結果出現平手範例
- A
- B
- C
- D
- E、F
- G
- …
前 4 名候選人 (A、B、C 和 D) 立即當選。如果 E 與其他兩名當選成員為同一雇主工作,則 F 也當選。否則,將在 E 和 F 之間為第 5 個席位組織第二次投票。
特殊情況:治理委員會成員與 PEP
委員會成員可以擔任 PEP 委派者。
委員會成員可以提出 PEP,但不能擔任自己所提 PEP 的 PEP 委派者。
當委員會決定對某個 PEP 必須進行投票時,委員會成員可以投票,因為他們也是核心開發者,但他們的權力不會大於其他核心開發者。
PSF 行為準則工作小組
章程
該工作小組的宗旨是透過執行 PSF 行為準則,並向 Python 社群提供行為準則相關的指導和建議,來促進一個多元和包容的 Python 社群,以支持 PSF「持續開發與 Python 相關的技術和教育資源」的使命。
我們透過三種方式朝著這個共同目標努力
- 審查、修訂並就與 PSF 行為準則以及 PSF 支持的其他社群相關的政策提供建議。這包括 PSF 管轄下的任何 #python 聊天社群和 python.org 電子郵件列表。
- 建立一套標準的行為準則和支援文件,適用於多種互動管道,例如但不限於會議、郵件列表、Slack/IRC、程式碼儲存庫等。
- 開發培訓材料和其他流程,以支持 Python 社群組織者實施和執行行為準則。
本工作小組的組織由 行為準則工作小組章程 定義。
特殊情況:禁止核心開發者
作為 Python 社群的任何其他成員,PSF 行為準則工作小組可以在有限時間內禁止核心開發者。在這種情況下,該核心開發者立即失去其核心開發者身分。核心開發者在行為準則方面應當是模範。
一般而言,當所有其他選項都已用盡時,禁止才是最終手段。
禁令結束後,該開發者被允許再次以普通貢獻者的身分貢獻。
如果該開發者改變其行為,另一位核心開發者可以組織一次新的投票,提議將該開發者晉升為核心開發者。投票遵循與任何其他 Python 貢獻者相同的流程。
PEP 流程
PEP 有 2 個主要職責
- PEP 作者
- PEP 委派者
PEP 作者會盡力撰寫高品質的 PEP。
PEP 委派者負責協助作者改進他們的 PEP,並且是做出最終決定(接受、拒絕或延期 PEP)的人。他們還可以協助引導討論。
如果沒有做出決定,作者可以在以後(例如:一年後)再次提出 PEP,如果可能的話,附帶新的數據來推動變革。PEP 委派者也可以選擇將 PEP 標記為「延期」,而不是拒絕 PEP,並鼓勵以後重新討論。
特定於 Python 團隊的 PEP 在團隊郵件列表上討論。影響所有 Python 開發者(如語言變更)的 PEP 必須在 python-dev 郵件列表上討論。
PEP 投票
當 Python 治理委員會決定某個 PEP 需要更廣泛的批准時,將組織一次投票。
投票限於核心開發者,公開進行,提前 1 週宣布,並開放 1 週。PEP 在 1 週的通知期間仍可更新,但在投票期間不得修改。此類投票發生在討論該 PEP 的郵件列表上。委員會決定何時組織投票。PEP 必須經過合理時間的討論後才能付諸投票。
只有在三分之二(>= 2/3)的投票批准(「+1」)該 PEP 時,該 PEP 才會被批准。僅計算「+1」和「-1」票;其他票(例如:無效、 「-0」、「+0.5」)將被忽略。
PEP 只能透過投票批准或拒絕,不能延期。
缺乏決策
如果討論未能達成共識,如果 Python 治理委員會未能選擇 PEP 委派者,或者如果 PEP 委派者未能做出決定,那麼顯而易見的風險是 Python 無法演進。
沒關係。有時,什麼都不做是最明智的選擇。
變更此 PEP
此 PEP 的第一個版本是在 Guido van Rossum 於 2018 年 7 月決定辭去 BDFL 職務後撰寫的。在此 PEP 之前,Python 社群成員的角色從未被正式化。在第一次嘗試時設計一個完美的組織是很困難的。此 PEP 將來可能會更新,以調整組織、指定如何處理邊角案例和修正錯誤。
對此 PEP 的任何變更都必須透過投票驗證。投票提前 3 週公布,限於核心開發者,在 python-committers 郵件列表上公開進行,並開放 1 週。提議的 PEP 變更在 3 週的通知期間仍可更新,但在投票期間不得修改。
只有在五分之四(>= 4/5)的投票批准(「+1」)該變更時,該變更才會被批准。僅計算「+1」和「-1」票;其他票(例如:無效、 「-0」、「+0.5」)將被忽略。
附錄:投票摘要
| 投票類型 | 通知 | 開放時間 | 投票方式 | 方法 |
|---|---|---|---|---|
| 晉升貢獻者 | 無 | 1 週 | 公開 | >= 2/3 多數決 |
| PEP | 1 週 | 1 週 | 公開 | >= 2/3 多數決 |
| 變更此 PEP | 3 週 | 1 週 | 公開 | >= 4/5 多數決 |
| 治理委員會 | 3 週 | 1 週 | 私密 | 孔多塞 (Schulze/Beatpath/CSSD) |
所有這些投票均限於核心開發者。
附錄:Python 團隊範例
以下是一些 Python 團隊的範例(此 PEP 中的列表不會保持最新)。
套件管理團隊
套件管理團隊營運自己的 PEP 類別,並且可以批准(或拒絕)自己的 PEP。
- 網站:packaging.python.org
- 郵件列表:distutils-sig
- 錯誤追蹤器組件:
Distutils - 成員範例:Paul Moore、Alyssa Coghlan、Donald Stuff
- 標準函式庫模組:
distutils - 現任 PEP 委派者:Paul Moore
IDLE 團隊
IDLE 在 Python 標準函式庫中是一個特殊案例:它是一個完整的應用程式,而不僅僅是一個模組。基於這個原因,已決定程式碼在所有 Python 穩定分支中都相同(而標準函式庫在較新的穩定分支中會有所不同)。
- 錯誤追蹤器組件:
IDLE - 成員範例:Terry Reedy、Cheryl Sabella、Serhiy Storchaka
- 標準函式庫模組:
idlelib
導師團隊
成為核心開發者是一個漫長而緩慢的過程。指導是培養貢獻者成為未來核心開發者並建立信任關係的有效方式。
- 網站
- 儲存庫:https://github.com/python/devguide
- 郵件列表:core-mentorship(私密存檔)
- 成員範例:Guido van Rossum、Carol Willing、Victor Stinner
注意:此群組不負責晉升核心開發者。
文件團隊
- 郵件列表:doc-sig
- 錯誤追蹤器組件:
Documentation - GitHub 標籤:
type-doc - 成員範例:Julien Palard、INADA Naoki、Raymond Hettinger。
該團隊也負責管理文件翻譯。
另請參閱維護「開發者指南」(Devguide) 的導師團隊。
資安團隊
- 網站:https://python.club.tw/news/security/
- 郵件列表
security@python.org(用於報告漏洞)- security-sig(公開列表)
- 標準函式庫模組:
hashlib、secrets和ssl - 成員範例:Christian Heimes、Benjamin Peterson
security@python.org 郵件列表僅限邀請:只有「Python 安全應變團隊」(PSRT) 的成員才能閱讀電子郵件和回覆;而 security-sig 則是公開的。
注意:此團隊很少提出 PEP。
效能團隊
- 網站:https://speed.python.org/
- 郵件列表:speed
- 儲存庫
- 錯誤追蹤器類型:
Performance - GitHub 標籤:
type-performance - 標準函式庫模組:
cProfile、profile、pstats和timeit - 成員範例:Victor Stinner、INADA Naoki、Serhiy Storchaka
通常涉及效能的 PEP 會影響所有人,因此在 python-dev 郵件列表上討論,而不是在 speed 郵件列表上。
非同步程式設計團隊
- 網站:https://docs.python.club.tw/dev/library/asyncio.html
- 郵件列表:async-sig
- 錯誤追蹤器組件:
asyncio - GitHub 標籤:
expert-asyncio - 標準函式庫模組:
asyncio和contextvars - 成員範例:Andrew Sveltov、Yury Selivanov
僅修改 asyncio 和 contextvars 的 PEP 可以在 async-sig 郵件列表上討論,而影響 Python 語言的變更則必須在 python-dev 上討論。
型別提示團隊
- 網站:http://mypy-lang.org/
- 儲存庫:https://github.com/python/typing
- mypy 專案的 GitHub 標籤:topic-pep-484
- 標準函式庫模組:
typing - 成員範例:Guido van Rossum、Ivan Levkivskyi、Jukka Lehtosalo、Łukasz Langa、Mark Shannon。
注意:有一個針對 Python 3.6 及更舊版本的向後移植 (backport),請參閱 PyPI 上的 typing。
版本歷史
此 PEP 的歷史
- 版本 7:調整治理委員會
- 治理委員會現在由 5 人組成,而非 3 人。
- 沒有任期限制(以前是限制 2 個任期:總共 6 年)。
- 委員會成員現在可以擔任 PEP 委派者。
- 版本 6:調整投票
- 指定孔多塞方法:使用舒爾茨/擊敗路徑/CSSD 變體來選舉 Python 治理委員會成員。指定如何處理平手以及對雇主的限制。
- 晉升貢獻者和 PEP 的投票現在需要
>= 2/3多數決,而非50%+1。 - 變更此 PEP 的投票現在需要
>= 4/5多數決,而非50%+1。 - 解釋如何處理公司收購。
- 版本 5:Python 治理委員會成員選舉採用不記名投票
- 版本 4
- 調整投票:開放 1 週而非 1 個月,並提前公布。
- 將「Python 核心委員會」更名為「Python 治理委員會」;
- 闡明此委員會不批准 PEP,且委員會成員不能累積超過 2 個任期;
- 將「型別提示」團隊添加到附錄。
- 版本 3:新增「特殊情況:禁止核心開發者」和「如何更新此 PEP」章節。
- 版本 2:將「Python 委員會」更名為「Python 核心委員會」,以避免與 PSF 董事會混淆。
- 版本 1:第一個版本發布到 python-committers 和 discuss.python.org。
版權
此文件已歸入公有領域 (public domain)。
來源:https://github.com/python/peps/blob/main/peps/pep-8015.rst
最後修改時間:2025-02-01 08:55:40 GMT