NumPy 專案治理與決策#
本文檔的目的是將 NumPy 專案在一般和特殊情況下使用的治理流程正式化,並闡明決策是如何制定的,以及我們社群的各種要素如何互動,包括開源協作開發與可能由營利或非營利實體資助的工作之間的關係。
摘要#
NumPy 是一個社群擁有和社群運作的專案。在最大程度上,關於專案方向的決策是由社群共識制定的(但請注意,此處的「共識」具有一定程度的技術含義,可能不符合每個人的期望 – 請參見下文)。社群的一些成員還透過在 NumPy 指導委員會任職來做出貢獻,他們負責促進建立社群共識、管理專案資源,以及 – 在極端情況下 – 如果正常的基於社群的流程崩潰,則負責制定專案決策。
專案#
NumPy 專案(以下簡稱「專案」)是一個開源軟體專案,隸屬於 501(c)3 NumFOCUS 基金會。本專案的目標是開發用於 Python 中基於陣列運算的開源軟體,特別是 numpy
套件,以及相關軟體,例如 f2py
和 NumPy Sphinx 擴充功能。本專案開發的軟體以 BSD(或類似)開源許可證發布,公開開發並託管在 numpy
GitHub 組織下的公共 GitHub 儲存庫中。
本專案由一個分散式開發人員團隊開發,稱為貢獻者。貢獻者是指為本專案貢獻程式碼、文件、設計或其他工作的人員。任何人都可以成為貢獻者。貢獻者可以隸屬於任何法律實體或不隸屬於任何法律實體。貢獻者透過提交、審閱和討論 GitHub Pull Request 和 Issues,以及參與 GitHub、郵件列表和其他管道上的公開專案討論來參與專案。專案參與的基礎是開放性和透明度。
專案社群由本專案的所有貢獻者和使用者組成。貢獻者代表更大的專案社群工作,並對其負責,我們努力盡可能降低貢獻者和使用者之間的障礙。
本專案正式隸屬於 501(c)3 NumFOCUS 基金會 (https://numfocus.org/),該基金會是其財政贊助者,可以持有專案商標和其他智慧財產權,協助管理專案捐款,並充當母法律實體。NumFOCUS 是唯一與本專案有正式關係的法律實體(請參閱下文的機構合作夥伴部分)。
治理#
本節描述本專案的治理和領導模式。
專案治理的基礎是
開放性與透明度
積極貢獻
機構中立性
社群基於共識的決策#
通常,所有專案決策都將由所有感興趣的貢獻者達成共識後制定。此方法的主要目標是確保受任何給定變更影響最大且參與程度最高的人員能夠貢獻他們的知識,並確信他們的聲音將被聽到,因為來自廣泛社群的周全審閱是我們所知的創建高品質軟體的最佳機制。
對於那些不熟悉圍繞自由/開源軟體開發的文化規範的人來說,我們用來實現此目標的機制可能很陌生。我們在此提供摘要,並強烈建議所有貢獻者另外閱讀 Karl Fogel 的經典著作Producing Open Source Software的第 4 章:社會和政治基礎設施,特別是有關基於共識的民主的部分,以進行更詳細的討論。
在此背景下,共識不要求
我們等待徵求每個人對每個變更的意見,
我們對任何事情進行投票,
或者每個人都對每個決策感到滿意或同意。
對我們來說,共識的含義是我們賦予每個人否決任何他們認為必要的變更的權利。雖然這聽起來像是阻礙和痛苦的根源,但事實並非如此。相反,我們發現大多數人都認真對待這一責任,並且僅在他們判斷到存在嚴重的問題被忽略,並且他們的否決對於保護專案是必要時才援引否決權。而且在實踐中,事實證明否決權幾乎從未正式援引,因為僅僅是這種可能性就確保了貢獻者從一開始就有動力找到每個人都能接受的解決方案 – 從而實現我們確保所有相關觀點都被考慮在內的目標。
我們如何知道何時達成共識?原則上,這相當困難,因為共識是由於沒有否決權而定義的,這需要我們以某種方式證明否定。在實踐中,我們結合使用我們最好的判斷(例如,在 GitHub 上發布並由核心開發人員審閱的簡單且無爭議的錯誤修復可能沒問題)和盡最大努力(例如,所有實質性的 API 變更都必須發布到郵件列表,以便讓更廣泛的社群有機會發現任何問題並提出改進建議;我們假設任何關心 NumPy 並想援引否決權的人都應該在郵件列表上)。如果幾天後沒有人在郵件列表上發表評論,那麼可能就沒問題了。最壞的情況是,如果變更比預期的更具爭議性,或者由於某人正在休假而延遲了關鍵的批評,那麼這沒什麼大不了的:我們為誤判情況道歉,備份並理清事情。
如果確實需要援引正式否決權,則應包括
明確聲明正在援引否決權,
解釋為何援引否決權,以及
描述(如果有的話)哪些條件會說服否決者撤回否決權。
如果所有解決問題的提案都被否決,則現狀預設獲勝。
在最壞的情況下,如果貢獻者真的以阻礙專案的方式濫用其否決權,那麼他們可以經由指導委員會的共識而被逐出專案 – 請參見下文。
指導委員會#
本專案將設立一個指導委員會,由專案貢獻者組成,這些貢獻者已做出在品質和數量上都很可觀且持續至少一年的貢獻。委員會的總體作用是在社群的投入下,確保專案的長期福祉,無論是在技術上還是在社群方面。
在日常專案活動中,委員會成員與所有其他貢獻者和社群成員一樣,以同儕身份參與所有討論、程式碼審閱和其他專案活動。在這些日常活動中,委員會成員不因其委員會成員身份而擁有任何特殊權力或特權。但是,預期委員會成員會因其貢獻的品質和數量以及他們對專案軟體和服務的專業知識,為可能經驗不足的貢獻者提供有用的指導,無論是在技術方面還是專案方向方面。
指導委員會及其成員在某些情況下扮演著特殊的角色。特別是,如有必要,委員會可以
制定關於專案的總體範圍、願景和方向的決策。
制定關於與其他組織或個人的策略合作的決策。
制定關於特定技術問題、功能、錯誤和 Pull Request 的決策。它們是指導程式碼審閱流程和合併 Pull Request 的主要機制。
制定關於由本專案運行的服務的決策,並為了本專案和社群的利益管理這些服務。
更新政策文件,例如本文檔。
在常規社群討論無法在合理的時間範圍內就問題達成共識時制定決策。
但是,委員會的主要責任是促進上述基於社群的常規決策程序。如果我們必須介入並為了專案的健康而正式否決社群,那麼我們會這樣做,但我們會認為達到這一點表明我們的領導失敗。
委員會決策制定#
如果指導委員會必須做出正式決策,那麼他們將使用Apache 基金會投票流程的形式。這是共識的正式化版本,其中 +1 票表示同意,-1 票是否決票(並且必須附帶理由,如上所述),並且如果希望表達意見而不註冊完全否決權,也可以投部分票(例如 -0.5、+0.5)。這些數字投票也經常被非正式地用作了解人們對某些問題的總體感受的一種方式,通常不應被視為正式投票。只有在明確聲明時才會進行正式投票,如果確實發生這種情況,則投票應保持開放足夠長的時間,以便所有感興趣的委員會成員都有機會回應 – 至少一周。
在實踐中,我們預計對於大多數指導委員會決策(例如,投票選出新成員),更非正式的流程就足夠了。
委員會成員資格#
目前的指導委員會成員列表維護在 關於我們 頁面上。
要獲得加入指導委員會的資格,個人必須是專案貢獻者,他們已做出在品質和數量上都很可觀且持續至少一年的貢獻。潛在的委員會成員由現任委員會成員提名,並在現任委員會成員達成共識後成為成員,並確認潛在成員有興趣且願意擔任該職位。委員會最初將由截至 2015 年底在過去一年中非常活躍的現有核心開發人員組成。
在考慮潛在成員時,委員會將全面審視候選人的貢獻。這將包括但不限於程式碼、程式碼審閱、基礎架構工作、郵件列表和聊天參與、社群協助/建立、教育和推廣、設計工作等。我們刻意不設定任意的量化指標(例如「在此儲存庫中提交 100 次」),以避免鼓勵只注重指標而不是專案整體福祉的行為。我們希望在我們的團隊中鼓勵多元化的背景、觀點和才能,這就是為什麼我們明確地不將程式碼定義為評估委員會成員資格的唯一指標。
如果委員會成員在一年內不活躍於專案,他們將被考慮從委員會中除名。在除名之前,將與不活躍的成員聯繫,以了解他們是否計劃恢復積極參與。如果他們不打算恢復,他們將在委員會投票後立即被除名。如果他們計劃很快恢復積極參與,他們將獲得一年的寬限期。如果他們在該期限內沒有恢復積極參與,他們將在未進一步寬限期的情況下經由委員會投票除名。所有前任委員會成員都可以在未來隨時像任何其他專案貢獻者一樣被考慮再次加入。退休的委員會成員將在專案網站上列出,以表彰他們在委員會中活躍的時期。
如果現任成員被認為對專案的福祉具有積極的危害性,並且溝通和衝突解決的嘗試失敗,則委員會保留驅逐現任成員的權利。這需要剩餘成員的共識。
利益衝突#
預計委員會成員將受僱於廣泛的公司、大學和非營利組織。因此,成員可能會有利益衝突。此類利益衝突包括但不限於
金融利益,例如投資、就業或專案外部的承包工作,這些利益可能會影響他們在本專案上的工作。
存取其雇主的專有資訊,這些資訊可能會洩露到他們在本專案的工作中。
委員會的所有成員應向委員會的其他成員披露他們可能擁有的任何利益衝突。在特定問題上存在利益衝突的成員可以參與委員會關於該問題的討論,但必須迴避對該問題的投票。
委員會的私下溝通#
在最大程度上,委員會的討論和活動將是公開的,並與專案貢獻者和社群協作和討論進行。委員會將有一個私人郵件列表,該列表將謹慎使用,並且僅在特定事項需要隱私時使用。當需要私人溝通和決策時,委員會將盡力向社群總結這些溝通和決策,並刪除不應發布到公共網路的個人/私人/敏感資訊。
小組委員會#
委員會可以設立小組委員會,為專案的特定方面提供領導和指導。與整個委員會一樣,小組委員會應以公開和公共的方式開展業務,除非明確要求隱私。私人小組委員會溝通應在委員會的主要私人郵件列表上進行,除非明確要求。
NumFOCUS 小組委員會#
委員會將維持一個狹隘重點的小組委員會,以管理其與 NumFOCUS 的互動。
NumFOCUS 小組委員會由 5 人組成,負責管理透過 NumFOCUS 收到的專案資金。預計這些資金將以符合 NumFOCUS 的非營利使命和整個委員會確定的專案方向的方式支出。
本小組委員會不得就專案的方向、範圍或技術方向做出決策。
本小組委員會將有 5 名成員,其中 4 名將是現任委員會成員,1 名將是指導委員會外部人員。小組委員會成員中,透過僱傭或承包工作向同一人報告的人數不得超過 2 人(包括報告者,即報告者 + 1 是上限)。這避免了有效多數取決於一個人。
NumFOCUS 小組委員會的現任成員列表列在 關於我們 頁面上。
機構合作夥伴和資金#
指導委員會是專案的主要領導。除了以貢獻者和委員會成員的身份參與專案外,沒有任何外部機構、個人或法律實體有能力擁有、控制、篡奪或影響專案。但是,由於機構可以是專案的重要資金機制,因此正式承認機構參與專案非常重要。這些是機構合作夥伴。
機構貢獻者是指任何機構合作夥伴的任何專案貢獻者,他們作為其在機構合作夥伴的正式職責的一部分為專案做出貢獻。同樣,機構委員會成員是指任何機構合作夥伴的任何專案指導委員會成員,他們作為其在機構合作夥伴的正式職責的一部分為專案做出貢獻。
根據這些定義,機構合作夥伴是指在美國或其他地方任何認可的法律實體,該實體僱用了至少 1 名機構貢獻者或機構委員會成員。機構合作夥伴可以是營利性或非營利性實體。
機構透過僱用作為其正式職責一部分積極為本專案做出貢獻的個人,而有資格成為機構合作夥伴。換句話說,合作夥伴影響專案的唯一方法是積極參與專案的開放式開發,條件與社群的任何其他貢獻者和委員會成員相同。僅在機構環境中使用專案軟體並不能使實體成為機構合作夥伴。財務捐贈不能使實體成為機構合作夥伴。一旦機構有資格成為機構合作夥伴,指導委員會必須提名並批准合作夥伴關係。
如果在某個時候現有的機構合作夥伴停止擁有任何貢獻員工,則一年的寬限期開始。如果在一年期限結束時他們繼續沒有任何貢獻員工,那麼他們的機構合作夥伴關係將失效,並且恢復合作夥伴關係將需要經歷新合作夥伴關係的正常流程。
機構合作夥伴可以自由地透過任何合法途徑為他們在本專案上的工作尋求資金。這可能涉及非營利組織從私人基金會和捐助者籌集資金,或營利性公司建立利用專案軟體和服務的專有產品和服務。機構合作夥伴為從事本專案工作而獲得的資金稱為機構資金。但是,機構合作夥伴獲得的任何資金都不能凌駕於指導委員會之上。如果合作夥伴有資金從事 NumPy 工作,而委員會決定不將該工作作為專案追求,則合作夥伴可以自由地自行追求。但是,在這種情況下,合作夥伴工作的該部分將不屬於 NumPy 範疇,並且不能以暗示正式關係的方式使用專案商標。
機構合作夥伴的益處是
在 NumPy 網站、演講和 T 恤上致謝。
能夠在 NumPy 網站、演講和 T 恤上感謝他們自己的資金來源。
能夠透過其委員會成員的參與來影響專案。
委員會成員受邀參加 NumPy 開發人員會議。
目前的機構合作夥伴列表維護在 關於我們 頁面上。
文件歷史#
致謝#
本文檔的很大一部分改編自 Jupyter/IPython 專案的治理文件
許可證#
在法律允許的最大範圍內,作者已放棄對 NumPy 專案治理和決策文件的所有著作權和相關或鄰近權利,根據 CC-0 公共領域貢獻/許可證。