PEP 541 – 包索引名称保留
- 作者:
- Łukasz Langa <lukasz at python.org>
- BDFL 代表:
- Mark Mangoba <mmangoba at python.org>
- 讨论列表:
- Distutils-SIG 列表
- 状态:
- 最终
- 类型:
- 流程
- 主题:
- 打包
- 创建:
- 2017年1月12日
- 发布历史:
- 决议:
- Distutils-SIG 消息
摘要
本 PEP 提出对包索引[1]的使用条款[2]的扩展,澄清了包所有者对包索引上包名称所有权的期望,特别是在冲突解决方面的期望。
基本原理
鉴于索引上的包名称共享一个单一的扁平命名空间,唯一的名称是一种有限的资源。包索引的不断发展导致名称的当前使用与对同一名称的不同建议使用之间不断出现冲突的情况。
本文档旨在为解决此类冲突最典型的情况提供一般指导。
审批流程
由于此策略的应用可能对 Python 软件基金会产生潜在的法律影响,因此使用的审批流程比大多数 PEP 所使用的流程更为正式。
指定的 BDFL 代表不会直接接受 PEP,而是会向 PSF 的打包工作组推荐接受它。在与 PSF 的法律顾问协商后,该策略的采用将随后在工作组内进行正式投票。
此正式审批流程将用于策略的初始采用以及未来任何修订的采用。
规范
本文档背后的主要思想是包索引服务于社区。每个用户都受邀在使用条款的约束下将内容上传到包索引,并理解这是用户自己承担的风险。
虽然包索引不是备份服务,但包索引的维护人员会尽最大努力将其发布形式的内容无限期地保留下来。但是,在某些极端情况下,更大社区的需求可能会超过个人对包名称所有权的期望。
本文档涵盖的用例是
- 废弃项目
- 由不同的用户组继续维护;或
- 从索引中删除以用于不同的项目。
- 活动项目
- 解决名称争议。
- 无效项目
- 受知识产权侵权索赔的项目。
在“实现”部分表达的使用条款拟议扩展将作为单独的文档发布在包索引上,链接到首页页脚中现有的使用条款旁边。
实现
可达性
包索引的用户全权负责能够被包索引维护人员联系,以处理用户拥有的项目相关事宜。在需要联系用户的所有情况下,维护人员将至少尝试三次,使用以下联系方式
- 包索引上用户个人资料中记录的电子邮件地址;
- 上传到索引的给定项目的“作者”字段中列出的电子邮件地址;以及
- 在索引上或列出的主页上给定项目的文档中找到的任何电子邮件地址。
维护人员在六周后停止尝试联系用户。
废弃项目
当满足以下所有条件时,项目被视为废弃
- 所有者无法联系(请参阅上面的“可达性”);
- 过去十二个月内没有发布版本;并且
- 所有者在项目的首页上没有活动(或没有列出首页)。
所有其他项目都被视为活动。
继续维护废弃项目
如果候选人似乎愿意继续维护废弃项目,则在满足以下所有条件时,名称的所有权将被转移
- 项目已根据上述规则被确定为废弃;
- 候选人能够证明他们自己也尝试过联系现有所有者但失败了;
- 候选人能够证明他们在项目自己的分支上所做的改进;
- 候选人能够证明为什么使用不同名称的分支不是可接受的解决方法;并且
- 包索引的维护人员没有任何其他保留意见。
在任何情况下,都不会违背可联系所有者的意愿重新分配名称。
移除废弃项目
项目绝不会仅仅因为废弃而从包索引中删除。上传到包索引的工件具有内在的历史价值。
当满足以下所有条件时,可以将废弃项目转移给新所有者,以便重新使用该名称
- 项目已根据上述规则被确定为废弃;
- 候选人能够证明他们自己也尝试过联系现有所有者但失败了;
- 候选人能够证明建议重用该名称的项目已经存在并满足知名度要求;
- 候选人能够证明为什么使用不同名称的分支不是可接受的解决方法;
- 包索引上现有包的下载统计数据表明该项目未使用;并且
- 包索引的维护人员没有任何其他保留意见。
活动项目的名称冲突解决
包索引的维护人员不是活动项目争议中的仲裁者。这里有很多可能的情况,下面列出了一些真实世界的示例(非详尽列表)。以下情况均不符合包名称所有权转移的条件
- 用户 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 上现有的项目名称,请按照以下步骤操作
- 尝试直接联系当前所有者:如果您可以找到相关的存储库,请给他们发送电子邮件并打开问题。此处描述的流程旨在作为最后手段,如果无法联系所有者。
- 查看上面的标准,了解何时允许转移。特别是,为不同的项目重用名称 的标准比继续维护同一项目 的标准更严格 - 尽管在这两种情况下,要获得名称转移都不容易。
- 搜索PyPI 支持问题,查看是否还有其他人正在请求相同的名称。
- 如果满足所有转移名称所有权的标准,请打开一个新的问题来请求转移,并详细说明您认为每个相关标准都得到满足的原因。
现有技术
NPM包含一个单独的部分,该部分链接自首页,称为包名争议。截至2017年1月,它被描述为一个“动态文档”,其内容可以概括如下
- 禁止包名抢注;
- 希望重用项目名称的用户需要联系现有的作者,并抄送至support@npmjs.com;
- 所有联系都必须符合NPM行为准则;
- 如果几周后仍未解决,npm inc.有权对该事宜做出最终决定。
CPAN允许任何用户上传具有相同名称的模块。PAUSE(一个相关的索引)仅列出主要维护者或列出的共同维护者上传的模块。CPAN文档没有讨论其他争议。
GitHub的服务条款包含一项详尽的行为清单,这些行为不符合一般使用条件。虽然没有在任何地方编纂,但GitHub确实同意用户通过归档被放弃的账户并让其他用户或组织重命名其账户来收回被放弃的账户名称。这是根据具体情况进行的。
被否决的提案
最初的方法是希望一切顺利,并在问题出现时解决,而没有书面政策。这是不可持续的。缺乏关于包名冲突解决的普遍可用的书面指南正在造成不必要的紧张局势。从用户的角度来看,包索引维护者在没有书面指南的情况下做出的决定可能显得武断。从包索引维护者的角度来看,由于缺乏明确的政策,解决名称冲突是一项充满压力的任务,因为存在因无意造成的损害的风险。
参考文献
版权
本文档已进入公有领域。
致谢
多年来,Distutils和Catalog SIG的众多参与者提出了他们的想法。
来源:https://github.com/python/peps/blob/main/peps/pep-0541.rst
上次修改时间:2023-09-09 17:39:29 GMT