PEP 541 – 套件索引名稱保留規範
- 作者:
- Łukasz Langa <lukasz at python.org>
- BDFL-Delegate:
- Mark Mangoba <mmangoba at python.org>
- 討論於:
- Distutils-SIG 郵件列表
- 狀態:
- 最終 (Final)
- 類型:
- 流程
- 主題:
- 套件封裝 (Packaging)
- 建立日期:
- 2017 年 1 月 12 日
- 公告歷史:
- 決議:
- Distutils-SIG 訊息
摘要
本 PEP 提議擴充套件索引 [2] 的使用條款 [1],闡明套件所有者對於套件索引上套件名稱所有權的預期,特別是在衝突解決方面。
原理
鑒於套件索引上的套件名稱共享單一扁平命名空間,唯一名稱是有限的資源。隨著套件索引歷史增長,目前名稱的使用與另一個建議的名稱用途之間的衝突情況不斷增加。
本文檔旨在為解決此類衝突的最典型案例提供一般指南。
核准流程
由於此政策的應用對 Python 軟體基金會(PSF)具有潛在的法律影響,因此所使用的核准流程比大多數 PEP 更為正式。
指派的 BDFL 代表不會直接接受該 PEP,而是將建議 PSF 的打包工作小組(Packaging Working Group)接受。在諮詢 PSF 的法律顧問後,該政策的採用將提交工作小組進行正式投票。
此正式核准流程將用於該政策的初始採用以及未來任何修訂的採用。
規範
本文檔背後的核心思想是:套件索引是為社群服務的。歡迎每位使用者根據使用條款將內容上傳到套件索引,並理解這由使用者自行承擔風險。
雖然套件索引不是備份服務,但套件索引的維護者會盡最大努力以發布的形式無限期保留內容供大眾存取。然而,在某些極端情況下,大眾社群的需求可能會超過個人對套件名稱所有權的預期。
本文檔涵蓋的使用案例包括:
- 已廢棄專案
- 由不同組的使用者繼續維護;或
- 從索引中移除以供另一個專案使用。
- 活躍專案
- 解決名稱爭議。
- 無效專案
- 涉及智慧財產權侵權索賠的專案。
在「實作」部分中表達的使用條款擴充建議,將作為獨立文件發布在套件索引上,並鏈接到首頁頁腳中現有的使用條款旁。
實作
可聯絡性
套件索引使用者有責任在涉及使用者擁有的專案事務時,確保套件索引維護者可以聯絡到自己。在每種需要聯絡使用者的高況下,維護者將嘗試至少進行三次聯絡,使用以下聯絡方式:
- 套件索引使用者個人資料中存檔的電子郵件地址;
- 上傳至索引的特定專案中「作者 (Author)」欄位所列出的電子郵件地址;以及
- 在特定專案索引文檔中或所列出的首頁上找到的任何電子郵件地址。
維護者在六週後將停止嘗試聯絡該使用者。
已廢棄專案
當滿足「所有」下列條件時,專案被視為已廢棄:
- 無法聯絡到所有者(參見上文的可聯絡性);
- 過去十二個月內沒有任何發布;且
- 所有者在專案首頁上沒有任何活動(或未列出專案首頁)。
所有其他專案均被視為活躍。
繼續維護已廢棄專案
如果候選人有意願繼續維護一個已廢棄的專案,在滿足「所有」下列條件時,名稱所有權將會轉移:
- 根據上述規則判定專案為已廢棄;
- 候選人能夠證明自己曾嘗試聯絡現有所有者但失敗;
- 候選人能夠證明在自己的專案分支(fork)上已進行了改進;
- 候選人能夠證明為什麼使用不同名稱的分支不是一個可接受的變通方案;且
- 套件索引維護者沒有任何其他疑慮。
在任何情況下,均不會在可聯絡的所有者違背其意願的情況下重新分配名稱。
移除已廢棄專案
專案絕不會僅因廢棄而從套件索引中移除。上傳到套件索引的製品(artifacts)具有其固有的歷史價值。
當滿足「所有」下列條件時,可以為了重複使用名稱的目的,將一個已廢棄的專案轉移給新所有者:
- 根據上述規則判定專案為已廢棄;
- 候選人能夠證明自己曾嘗試聯絡現有所有者但失敗;
- 候選人能夠證明建議重複使用該名稱的專案已經存在並符合知名度要求;
- 候選人能夠證明為什麼使用不同名稱的分支不是一個可接受的變通方案;
- 套件索引上的下載統計數據顯示現有套件未被使用;且
- 套件索引維護者沒有任何其他疑慮。
活躍專案的名稱衝突解決
套件索引維護者不是活躍專案糾紛的仲裁者。這裡有許多可能的情況,下面列出了一些非排他性的現實案例。以下情況皆不符合套件名稱所有權轉移的資格:
- 使用者 A 和使用者 B 共享專案 X。一段時間後他們分道揚鑣,兩人都想以 X 為名繼續該專案。
- 使用者 A 在套件索引之外擁有一個專案 X。使用者 B 在索引上以 X 為名創建了一個套件。一段時間後,使用者 A 想在索引上發布專案 X,但發現名稱已被占用。即使使用者 A 的專案 X 已具知名度且使用者 B 的專案 X 籍籍無名,情況亦然。
- 使用者 A 將專案 X 發布到套件索引。一段時間後,使用者 B 對該專案提出了錯誤修復,但使用者 A 並未發布新版本。即使使用者 A 同意發布新版本但隨後未發布,且即使使用者 B 的更改已合併至專案 X 的原始碼倉庫中,情況亦然。
再次重申,上述清單並非窮舉。套件索引維護者建議使用者相互聯絡並透過尊重的溝通來解決問題(參見 PSF 行為準則 [6])。
無效專案
發布在套件索引上的專案符合下列「任一」條件將被視為無效,並將從索引中移除:
- 專案不符合使用條款;
- 專案是惡意軟體(旨在直接利用或危害系統或使用者,以利於命令與控制攻擊,或執行數據外洩);
- 專案是垃圾內容(旨在廣告或招徠商品或服務);
- 專案包含非法內容;
- 專案侵犯版權、商標、專利或許可證;
- 專案是佔用名稱(套件沒有功能或為空);
- 專案名稱、描述或內容違反行為準則;
- 專案使用混淆技術來隱藏或掩蓋功能;或
- 專案濫用套件索引於非預期目的。
出於安全考量,套件索引維護者會預先宣佈某些套件名稱為不可用。
智慧財產權政策
Python 軟體基金會及套件索引維護者的政策是適當地回應第三方關於智慧財產權侵權的索賠。Python 軟體基金會及套件索引維護者的政策並非預先審查上傳套件是否存在任何類型的智慧財產權侵權。
應向 legal@python.org 舉報可能侵權的套件,Python 軟體基金會的法律顧問將決定適當的回應。Python 軟體基金會可全權酌情移除或轉移套件至新所有者,以解決侵權索賠。
發布在套件索引上的專案符合下列「任一」條件,可能被視為侵權,並可能被從索引中移除或轉移給新所有者:
- 專案包含來自第三方的未經授權之受版權保護內容,且受到符合 DMCA 規範之索賠;
- 專案以未涵蓋在標稱使用或公平使用指南內的方式使用第三方的商標;
- 專案明顯牽涉已獲專利的系統或流程,且成為投訴對象;或
- 專案涉及進行中的訴訟。
在發生智慧財產權侵權投訴時,投訴副本將發送給套件所有者。在某些情況下,套件索引維護者可能在所有者回應之前採取行動。
Python 軟體基金會的角色
Python 軟體基金會 [7] 是提供套件索引作為社群服務的非營利法律實體。
如果問題不夠明確,套件索引維護者可以將本文檔涵蓋的問題呈報至打包工作小組解決。某些決定「需要」董事會的額外判斷,特別是在違反行為準則或法律索賠的情況下。董事會提出的建議會發送給打包工作小組 [8] 進行審核。
打包工作小組在本文檔涵蓋的任何爭議中擁有最終決定權,並且在經過深思熟慮後,即使未滿足此處列出的所有要求,也可以決定在套件索引中重新分配或移除專案。
如何請求名稱轉讓
如果您想接管 PyPI 上現有的專案名稱,請遵循以下步驟:
- 嘗試直接聯絡當前所有者:給他們發送郵件;如果您能找到相關倉庫,請開啟一個 issue。這裡描述的流程是作為無法聯絡所有者時的最後手段。
- 檢查上述標準以了解何時允許轉讓。特別是,為不同專案重複使用名稱 的標準比 繼續維護同一專案 的標準更為嚴格——儘管在這兩種情況下要獲得名稱轉讓都不容易。
- 搜尋 PyPI 支援議題 看看是否已有人在請求同一個名稱。
- 如果滿足轉移名稱所有權的所有標準,請 開啟一個新 issue 提出請求,並詳細說明您認為各項相關標準如何被滿足。
先前技術
NPM 包含一個從首頁鏈接的獨立部分,稱為 套件名稱爭議。它被描述為一份「動態文件」,截至 2017 年 1 月,其內容可歸納如下:
- 禁止套件名稱佔用;
- 想要重複使用專案名稱的使用者必須聯絡現有作者,並抄送 (cc) 至 support@npmjs.com;
- 所有聯絡必須符合 NPM 行為準則;
- 若數週後仍未解決,npm inc. 保留對此事宜的最終決定權。
CPAN 允許任何使用者上傳具有相同名稱的模組。PAUSE(一個相關索引)僅列出由主要維護者或列出的協同維護者上傳的模組。除此之外,CPAN 文件並未提及爭議處理。
GitHub 的服務條款包含一份詳盡的不符合一般使用條件的行為清單。雖然沒有明文規定,但 GitHub 確實同意使用者藉由封存已廢棄帳號,並讓其他使用者或組織重新命名其帳號,來收回已廢棄帳號的名稱。這是根據具體情況逐案處理的。
已拒絕的提案
最初的方法是抱持樂觀態度,並在問題出現時於沒有書面政策的情況下解決。這是不可持續的。缺乏公開可得的套件名稱衝突解決書面指南造成了不必要的緊張。從使用者的角度來看,套件索引維護者在沒有書面準則的情況下做出的決定可能顯得專斷。從套件索引維護者的角度來看,由於缺乏明確政策而面臨造成無意傷害的風險,解決名稱衝突是一項壓力巨大的任務。
參考文獻
版權
此文件已歸入公有領域 (public domain)。
致謝
感謝 Distutils 和 Catalog SIG 的眾多參與者多年來提供的構想。
來源:https://github.com/python/peps/blob/main/peps/pep-0541.rst
最後修改日期:2025-02-01 08:59:27 GMT