Following system colour scheme - Python 增強提案 Selected dark colour scheme - Python 增強提案 Selected light colour scheme - Python 增強提案

Python 增強提案 (Python Enhancement Proposals)

PEP 8012 – 社群治理模型

作者:
Łukasz Langa <lukasz at python.org>
狀態:
已否決 (Rejected)
類型:
資訊類
主題:
治理
建立日期:
2018年10月3日

目錄

PEP 已拒絕

PEP 8012 於 2018 年 12 月 17 日星期一遭核心開發者投票駁回,此過程在PEP 8001 中有所描述。

PEP 8016 及其所描述的治理模式被選定取而代之。

摘要

本 PEP 提案一套新的 Python 治理模型,其基礎是 Python 社群的共識與投票。此模型仰賴工作小組來執行 Python 語言的治理。此治理模型無需集中式的單一領導者或治理委員會的角色即可運作。

它描述了如何、何時以及為何進行影響 Python 語言決策的投票。它也描述了投票資格的標準。

如果此模型被採納,它將被編入PEP 13

此模型雖然遠非理想,但與其他模型相比,它仍是最穩健的一個,因此可以親切地稱之為「最不糟糕的治理模型」。由於避免其他模型固有的問題是社群治理模型的首要特點,我們以一種有些不尋常的方式開始討論:即駁回其他模型。

被駁回的模型

我們再找一位 BDFL 吧

這似乎是一個非常有吸引力的想法,因為這是我們熟悉的一種模型。一位獨裁者統治我們所有人。

挑戰:沒有第二個 Guido

沒有第二個人擁有像 Guido van Rossum 那樣獨特的技能組合。這樣的人需要具備技術、溝通和組織經驗,才能成功領導專案。具體來說,這個人需要:

  • 為專案設定並闡明一個具凝聚力的長期願景;
  • 對執行時期、標準函式庫以及更廣泛的第三方函式庫背景具有深厚的技術理解;
  • 以所有相關方都能接受的方式協商和解決爭議問題;
  • 擁有閒暇時間,並具備足夠的精力來維持多年持續的參與。

風險:惡意終身獨裁者

如果我們找到的人不像我們的第一位獨裁者那樣適合這個職位,會怎麼樣?在這種情況下,可能會導致嚴重的後果。

獨裁者可能因為缺乏技術深度、「勢均力敵」的選舉、願景不一致、處理衝突能力差或倦怠等原因,而無法獲得足夠的信任。如果獨裁者以特定方式做出爭議性決策,缺乏足夠信任的獨裁者可能會導致專案內部的分裂。

獨裁者的設置會引發針對單一人物的遊說。除非該人物因財富、健康和穩定的生活狀況而免受影響,否則這會帶來惡意行為者在幕後操縱專案的風險。

最後,來自社群特定部分的獨裁者,可能會更重視該特定使用者群體的需求和利益,從而疏遠其他使用者。

觀察:我們實際上並不需要獨裁者

獨裁者模型的諷刺之處在於它需要選舉。更妙的是,我們甚至需要透過選舉來決定要使用哪種治理模型。

如果我們已經能夠透過社群流程解決兩個如此嚴重的問題,那為何不繼續將其用於所有後續的決策呢?

風險:模糊提案所帶來的朦朧美好感受

最後一件值得一提的事情是,當建議採用 BDFL 模型時,如果不明確指出 BDFL 應該是誰,就很容易規避上述批評。這樣一來,抱有希望的讀者可以將他們最好的期望和需求投射到抽象的 BDFL 身上,使這個想法看起來更具吸引力。這是一個錯誤。

如果在模型提案中不點名 BDFL,我們就不是在談論一個具體的模型。我們可以避免提出和回答這些棘手的問題。我們可以想像我們最理想的情況,一個我們希望擔任這個職位的候選人。

省略 BDFL 的名字也會使社群模型處於不公平的劣勢。我們已經了解我們的核心開發者群體中好的、壞的和醜陋的層面。它不是柏拉圖式的理想,也不是沒有摩擦的完美球體。事實上,我們預期會有很多摩擦和不完美之處。

因此,親愛的讀者,為了公平評估 BDFL 模型提案,您應該想像我們團隊中最糟糕的人擔任那個 BDFL。一個具體的人。想像那是我。

結論 雖然這曾是我們的歷史,但沒有 Guido,此模型無法在未來為語言的最佳利益服務。

我們來成立一個委員會吧

這群人大致上分擔了獨裁者的責任。該群體也可以被稱為三巨頭、法定人數委員會、長老、指導委員會等等。

風險:稀釋與混淆

此模型偏好一個小群體,介於三到五人之間。這樣一來,它與獨裁者模型的大部分批評相同,只是影響被放大。擁有不止一人,比如說三個人身居權位,會稀釋責任,同時仍帶來遊說、信任不足或疏遠社群部分成員的高度風險。

風險:內部衝突

此外,讓多人分擔治理責任,會為內部衝突、專案長期願景不一致創造充足的機會,並使其成員所需的持續時間投入倍增(如果他們因其他時間承諾而無法「達到法定人數」,那就不算法定人數委員會)。

就像面對一個沒有摩擦的球形 BDFL 一樣,在沒有考慮如果該委員會由三個您認為不適合該職位的人組成時,它會如何運作的情況下,就駁回委員會的想法。想像一下如果我有兩個朋友。

最重要的是,就像獨裁者一樣,我們不需要委員會。當我們成立委員會時,我們已經進行了兩次成功的選舉。為什麼不繼續投票呢?

結論 此模型與獨裁者模型有相似的風險,而且更糟。

動機

既然我們已經駁回了其他治理模型的基本概念,現在讓我們來談談為什麼我們需要在一個鬆散定義的提交者群體之上,仍然需要一個治理模型。

穩定性與可靠性 我們希望防止單一提交者做出影響語言未來或其可用性的廣泛變更。一致的願景和向後相容性在任何程式語言中都很重要,但對於非常動態的 Python 來說,它們尤其重要(例如,具有非常複雜的向後相容性影響)。

Python 的多樣化應用 此外,Python 被各類使用者所使用,從學童到科學家,再到擁有數百萬行程式碼庫的公司。我們希望涵蓋所有我們多樣化的受眾。

活力 我們希望避免停滯。Python 是一個成熟的專案,但它需要不斷發展才能保持相關性,無論是執行時期還是程式語言。為此,對改進專案特定部分感興趣的人應該能夠在沒有不必要摩擦的情況下進行。但對於實質性的變更,我們希望有一些討論和反思,以確保這些變更是明智的。

原理

包容性 社群模型是最具包容性的模型。沒有單一個人或一小群人處於凌駕於他人的顯赫權力地位。在此模型中的貢獻者和任何工作小組都是自我選擇的。

務實性 此模型確保沒有任何使用者群體會因為單一個人或一小群人的利益而處於不利地位。

經驗證 此模型是可行的。許多大型開源專案都以這種方式運作(其中 Rust 和 Django 在PEP 8002 中有所描述)。ECMAScript 和 C++ 也以類似方式開發。

規範

關鍵人物及其職能

核心團隊

Python 專案由核心開發者團隊開發。雖然成員資格由 GitHub 上「python」組織中「Python core」團隊的存在決定,但貢獻有許多形式:

  • 向程式碼庫提交變更;
  • 審查他人提交的拉取請求;
  • 在問題追蹤器上分類錯誤報告;
  • 在官方 Python 溝通管道上討論議題。

有些貢獻者可能被視為休眠狀態,換句話說,他們沒有為 CPython 最近兩個版本做出貢獻。任何休眠貢獻者都可以隨時恢復貢獻。

專家

《Python 開發者指南》列出了許多感興趣的領域,以及被公認為該領域專家的核心開發者姓名。專家或專家小組有以下職責:

  • 及時回應已分類至特定感興趣領域的問題追蹤器上的問題;
  • 及時審查被識別為屬於特定感興趣領域的拉取請求;
  • 監督特定感興趣領域演進中的整體設計一致性。

核心開發者可以自行決定分配和取消分配至特定的感興趣領域。已列出的該感興趣領域的現有專家必須被告知此變更,並須一致同意。

如果特定感興趣領域列出了多位專家,他們將在核心團隊內組成一個小組。他們共同負責該感興趣領域。

核心開發者應避免同時擔任過多感興趣領域的專家成員。本文檔特意沒有指定最大數量,它只是表明過度勞累會導致倦怠,並對專案在沒有特定貢獻者的情況下運作的能力構成風險。

管理員

有一個群體,其中一些人並非核心開發者,負責確保官方溝通管道上的討論遵守行為準則。他們會針對違規行為採取行動。

常規決策流程

主要工作透過錯誤追蹤器問題和拉取請求進行。核心開發者應避免將其變更直接推送到 cpython 程式碼庫,而是依賴拉取請求。核心開發者批准拉取請求後,即可無需進一步程序而合併。

將錯誤追蹤器問題或拉取請求通知相關專家非常重要。特別是在拉取請求批准方面,強烈建議由該感興趣領域的專家進行審查。未能這樣做可能會導致相關專家將變更還原。

專家不需時時刻刻關注 GitHub 和錯誤追蹤器上如洪水般湧來的活動。在分類或建立錯誤/拉取請求時,可能需要明確通知專家以引起他們的注意。

爭議性決策流程

特定感興趣領域的實質性變更需要 PEP。這包括:

  • 語言的任何語義或語法變更。
  • 對標準函式庫或 C API 的向後不相容變更。
  • 對標準函式庫的補充,包括現有函式庫內的實質性新功能。
  • 移除語言、標準函式庫或 C API 功能。

未能透過 PEP 流程推動實質性變更,可能導致該變更被還原。

錯誤修復的變更可以免除 PEP 要求。請自行判斷。

PEP,加強版

PEP 流程在PEP 1 中已有的資訊基礎上,增加了以下變更和澄清:

  • PEP 在最終決策做出之前不會合併;在那之前,它們在 GitHub 上是開放的拉取請求;
    • 為了使審查更容易,所有對正在審查的 PEP 的變更都應作為獨立的提交進行,以允許進行細粒度比較;
  • 提交的 PEP 需要指明感興趣的領域和相關專家,作為最終決策的實體;
  • 如果 PEP 作者是相關感興趣領域的專家之一,他們必須指定該領域之外的另一人來代替他們參與最終決策;
  • PEP 作者負責使用官方溝通管道收集和整合關於 PEP 的回饋意見,目標是建立共識;
  • 所有社群成員都必須能夠提供回饋;
  • 在某個時間點,其中一位具名專家會發布一份「總結評論」,闡述討論的現狀,特別是主要的分歧點和權衡;同時,該專家會提出「最終評論期動議」(FCP),並附帶建議的處置方式,可以是:
    • 接受;
    • 暫時接受;
    • 駁回;或
    • 延期 PEP。
  • 要進入 FCP,PEP 必須由相關感興趣領域的所有專家簽署同意;
  • FCP 持續十四個日曆日,以允許利害關係人在做出決定之前提出任何最終異議。

極具爭議的 PEP

如果核心貢獻者強烈反對某個特定的 PEP,在 FCP 期間,他們可以提出動議,透過投票駁回該 PEP。投票細節在下方「投票機制」中描述。

這應該是最後的手段,因此很少發生。它會使核心團隊分裂,對所有相關人員來說都是一個壓力很大的事件。然而,提交 PEP FCP 的專家應該對透過投票駁回動議的可能性有很好的判斷。在這種情況下,應注意避免過早提交 FCP。

對於相反的情況,即當專家想要駁回 PEP 但其他人希望其被接受時,則沒有追索權。這確保了相關專家對納入的內容擁有最終決定權。如果你真的想要那項變更,請想辦法說服他們。

官方溝通管道上的管理員首先強制執行行為準則,以確保所有相關方之間健康的互動。執行可能導致特定參與者被排除在進一步的討論之外,從而影響決策過程。

重新審視延期和被駁回的 PEP

如果一個 PEP 被延期或駁回,在再次嘗試相同想法之前,應首先聯繫相關專家。如果專家同意有充分證據證明重新審視該想法是合理的,則可以開啟一個編輯該延期或駁回的 PEP 的拉取請求。

未能事先獲得適當的專家支持,很可能會導致延期或駁回的 PEP 的拉取請求立即被拒絕。

其他投票情況

提名新的核心開發者

一位倡導者透過在官方溝通管道上發布貼文,提名一個人成為新的核心開發者。隨後開啟投票。

如果任何現有的核心開發者對於被提名人獲得提交權限感到不適,他們最好在提名討論串中提出這個顧慮。如果沒有滿意的解決方案,他們可以投下反對票。

實際上,提名一個人成為核心開發者,常常會讓其他人感到驚訝,因為這個人還不是核心開發者。換句話說,這應該在候選人已經被他人充分認識和信任時進行。我們應該避免基於潛力進行提名。

不信任投票

  • 將核心開發者從核心團隊中移除;
  • 解散特定感興趣領域的專家團隊。

這些描述了核心開發者被強制從核心團隊中移除,或專家團隊被強制解散的情況。希望這些情況永遠不需要執行,但它們被明確提及是為了展示如何修復一個功能失調的感興趣領域。

如果核心開發者經投票被核心團隊移除,他們將失去與專案互動的能力。由管理員酌情決定是否移除他們在錯誤追蹤器和 GitHub 上發布內容的能力,或僅就他們未來的行為進行個案審查。

如果特定感興趣領域的專家團隊被解散,其他核心開發者可以隨意補足空缺。被解散的專家團隊成員不能自薦回歸。

投票機制

本文檔中描述的所有投票都是 +1/-1/0(「贊成」/「反對」/「出席」)的記名投票。沒有其他投票值,特別是超出範圍或分數(如 +0.5)的值均無效。

投票持續十四個日曆日。起始日期以提出投票動議者的時區為準。結束日期為十四天後的「地球任何地點」(Anywhere-On-Earth)。

如果休眠核心開發者(定義見上方「關鍵人物及其職能」)棄權,則不計入總數。然而,如果他們選擇投票,則會計為活躍成員。投票是一種貢獻形式。

投票透過向 GitHub 上「python」組織中的私人程式碼庫提交(commit)進行。該程式碼庫在投票期結束後會被封存並公開。該程式碼庫的名稱應以「vote-」開頭。

投票期間允許更改投票。在投票期間查看其他開發者投下的選票是可能的。

每種情況需要不同的投票百分比:

  • PEP 透過投票駁回,需要超過非休眠核心開發者總數的三分之一明確投票駁回。請注意,如果超過三分之一的核心開發者決定反對某個 PEP,這意味著不存在支持該變更的核心開發者絕對多數。這強烈暗示該變更不應以 PEP 所描述的形式進行。
  • 新核心開發者提名要求沒有任何反對票。
  • 不信任投票要求至少三分之二的非休眠核心開發者總數的絕對多數明確投票贊成該動議。

省略事項

本文檔故意省略列出專案中可能的感興趣領域。它也沒有涉及管理員的選舉和管理,這由 Python 軟體基金會及其行為準則工作小組負責,可透過電子郵件 conduct-wg@python.org 聯繫。

致謝

感謝PEP 8002 的作者,該文件對本文件的形成提供了有益的資源。

感謝 Alex Crichton 和 Rust 團隊提供的治理模型,該模型是本文件撰寫的主要靈感來源。


來源:https://github.com/python/peps/blob/main/peps/pep-8012.rst

上次修改:2025-02-01 08:55:40 GMT