PEP 541:Python包名冲突了怎么办?

PEP 541:Python包名冲突了怎么办?

Python部落(python.freelycode.com)组织翻译,禁止转载,欢迎转发。



PEP 541 –

包索引名的保留

PEP:

541

标题:

包索引名的保留

作者:

?

ukasz Langa <lukasz at python.org>

BDFL-

代理:

Mark Mangoba <mmangoba at python.org>

讨论发布处:

distutils

-sig <distutils-sig at python.org>

状态:

最终

类型:

流程

创建时间:

2017 年 1 月   12 日

发布历史:



解决方案:

http://mail.python.org/pipermail/distutils-sig/2018-March/032089.html

内容

  • 摘要

  • 背景

  • 审批流程

  • 说明

  • 实施办法

  • 可达性

  • 废弃的项目

  • 废弃项目的继续维护

  • 废弃项目的删除

  • 活动项目的命名冲突解决方案

  • 无效项目

  • 知识产权策略

  • Python Software Foundation

    的角色

  • 现有技术

  • 否决的提案

  • 参考

  • 版权

  • 声明

  • 摘要



    本 PEP 提议扩展包索引

    [2]

    的使用条款

    [1]

    ,阐明包所有者对包索引中的包名称,尤其是有关冲突解决方案中的所有权的期望。



    现有的包库,如 CPAN

    [3]

    , NPM

    [4]

    ,以及 GitHub

    [5]

    将作为该领域的现行措施进行研究。



    背景



    由于目前索引中的包名称共同使用单一的扁平命名空间,因此唯一名称将是有限的资源。随着包索引使用时间越来越久,有关同一名称的现有用法与建议的不同用法的冲突不断涌现。



    该文档旨在为大多数此类典型冲突提供一个总体的指导。



    审批流程



    由于该规定的应用可能对 Python Software Foundation 产生潜在的法律后果,所以审批的流程比其他大多数 PEP 要严格。



    不同于以往直接接受 PEP,指定的 BDFL 代理需要将接受的意向推荐给 PSF 的打包工作组。咨询过 PSF 的总法律顾问后,是否采用该规定将由工作组投票决定。



    该正式审批流程将适用于首次采用的规定以及未来的任何修订。



    说明



    本文档背后的主要思想是包索引服务于社区。请每个用户根据使用条款将内容上载到程序包索引,并了解这完全由用户承担风险。



    虽然包索引不是备份服务,但包索引的维护者会尽最大努力以其发布的形式无限期地保持该内容的可访问性。但是,在极少数情况下,较大社区的需求可能超过个人对包名称所有权的期望。



    本文档包含的使用情况如下:



  • 废弃的项目:

    由一组不同用户负责继续维护,或者

    从索引中删除以备其他项目使用

  • 活动的项目:

    解决针对某一名称的争议

  • 无效项目:

    受知

    识产权侵权保护的项目



  • 有关扩展使用条款的提案,会在本文档的实施办法部分详细阐述。该提案将会作为一个单独的文档发布在包索引中。可通过首页页面脚注部分的现有使用条款旁的链接跳转到该文档。



    实施办法

    可达性



    包索引的使用者仅需要承担以下责任,即当其项目出现问题时,包索引维护者可联系到该用户。在任何需要联系用户的情况下,维护者将至少尝试以下三种方式与用户联系取得联系:

  • 包索引中用户个人资料中电子邮件地址;

  • 上传到索引的已有项目的作者字段中列出的电子邮件地址;以及

  • 在索引上的已有项目文档中或在主页中所能找到的任意电子邮件地址。

  • 六周后,维护者将不再尝试联系用户。

    废弃的项目



    当项目满足以下所有条件时将被视为废弃的项目:

  • 无法联系到所有者(请参照上面的可达性部分);

  • 在过去 12 个月之内没有发布任何内容;

  • 主页上项目所有者没有任何活动(或未列出主页)。

  • 其他所有项目将被视为活动项目。

    废弃项目的继续维护



    如果申请者希望继续维护废弃的项目,如果以下所有条件都满足,则索引名称将被转移:

  • 根据以上规则,涉及项目已被视为废弃;

  • 申请者能够证明其联系现有的所有者所做的尝试均失败;

  • 申请者能够证明其在自己项目分支上所做的改进;

  • 申请者能够证明为什么其项目分支不能使用其他名称;以及

  • 包索引的维护者没有收到任何其他预约。

  • 在任何情况下都不得违背可联系上的所有者的意愿将名称重新分配给他人。



    废弃项目的删除



    项目不会仅因为废弃而从包索引中删除。上传到包索引的项目具有其内在的历史价值。



    当以下所有条件均满足时,可将废弃的项目转移给新的所有者以重新利用其名称:

  • 根据以上所述规则可将项目认定为废弃;

  • 申请者能够证明其联系现有的所有者所做的尝试均失败;

  • 申请者能够证明其建议重复使用该名称的项目已经存在,并符合显著性要求;

  • 申请者能够证明为什么其项目分支不能使用其他名称;以及

  • 包索引中现有包的下载数据统计显示该项目已不再使用;以及

  • 包索引的维护者没有收到任何其他预约。

  • 活动项目的名称冲突解决方案



    包索引的维护者不是活动项目争议的仲裁者。有关活动项目名称的争议有许多可能的场景,下面列出了一些现实中的实例,这些实例不具有排他性。下列实例均不满足包名称转移的条件:

  • 用户 A 和用户 B 共有项目 X。经过一段时间后,二人分开并且二人均希望以 X 继续该项目。

  • 用户 A 拥有项目 X 但未上传到包索引。用户 B 在包索引中创建了以 X 命名的包。经过一段时间,A 希望在包索引上发布项目 X 但发现该名称已经被占用。即使 A 用户的项目已经非常有名而 B 用户的项目并不出名,也是如此。

  • 用户 A 在包索引中发布了项目 X。经过一段时间后,用户 B 提交了修复 Bug 的提议但用户 A 并没有发布新版本。即使用户 A 开始同意发布新版本但之后反悔,并且即使用户 B 所做的更改已经更新到项目 X 的源代码池中,也是如此。

  • 再次申明,以上实例不具有排他性。包索引维护者建议用户通过相互尊重的方式沟通解决问题(请参照PSF 行为守则

    [6]

    )。



    无效项目



    在包索引上发布的项目满足以下任意一条即被视为无效并将从索引中删除:

  • 项目未遵守使用条款;

  • 项目是恶意软件(旨在利用或损害系统或用户);

  • 项目包含非法内容;

  • 项目违反版权、商标、专利或许可;

  • 项目非法占用名称(包不具备任何功能或为空);

  • 项目名称、描述或内容违反行为守则;或者

  • 项目滥用包索引。

  • 包索引维护者会预先声明某些包名称由于安全原因不可用。



    知识产权策略



    对于第三方有关知识产权侵权行为的索赔,Python Software Foundation 及包索引维护者的策略是适当回应。对上传的包进行任何类型的知识产权侵权的筛选并非 Python Software Foundation 及包索引维护者的策略。



    对于可能存在侵权行为的包可报告给

    legal@python.org

    , Python Software Foundation 的法律顾问将给予适当的回应。Python Software Foundation可自行决定将软件包删除或转让给新所有者,以解决侵权索赔。



    在包装索引上发布的项目符合下列任何一项,可被视为侵权,可从索引中删除或转让给新的所有者:

  • 项目包含来自第三方的未经许可的受版权保护材料,并根据 DMCA 进行适当的索赔;

  • 项目未按照规范和正当使用规定的方式使用第三方商标;

  • 项目明显涉及专利系统或流程,并且是投诉的对象;或者

  • 项目处在活动的诉讼中。

  • 如果发生知识产权侵权投诉,投诉副本将发送给包所有者。在某些情况下,包索引维护者可能会在所有者响应之前采取操作。



    Python Software Foundation

    的角色



    Python Software Foundation

    [7]

    是一个非赢利性法律实体,它将包索引作为社区服务提供。



    在问题不够清楚的情况下,包索引维护者可将本文档中所述问题上报给打包工作组以更好解决问题。有些决定,特别是涉及违反行为守则或法律要求的决定,需要董事会做进一步判决。董事会所提供建议将发送给打包工作组

    [8]

    审阅。



    打包工作组在本文档涉及的任何争议中拥有最终发言权,即使未满足此处列出的所有要求,也可以在仔细考虑后决定重新分配项目或从包索引中删除项目。



    现行措施



    NPM 包含一个可从首页

    包名称争议

    链接处跳转到的单独部分。该部分被称作“活文件”,截至 2017 年 1 月,其内容可概述如下:

  • 禁止非法占用包名;

  • 希望重新利用项目名称的用户需要联系该名称的现有作者,并抄送给

    support@npmjs.com

  • 所有联系人必须遵守 NPM      行为守则;

  • 经过几周后仍未有解决方案的,npm inc.拥有该问题的最终话语权。

  • CPAN允许任何用户上传具有相同名称的模块。PAUSE是一个相关的索引,它仅列出由主要维护者或列出的共同维护者上传的模块。CPAN文档不处理其他争议。



    GitHub 的服务条款包含不符合一般使用条件的行为的详尽列表。虽然 GitHub 没有明文规定,但其确实同意用户通过归档废弃的帐户并允许其他用户或组织重命名其帐户来收回已放弃的帐户名称。该行为是在个案基础上进行的。



    否决的提案



    最初的方法是持积极的态度,希望在没有明文规定的情况下实时解决问题。但这种方法不能持续。缺乏关于解决名称冲突的普遍可用的书面规定正在造成不必要的紧张局面。从用户的角度来看,包索引维护者在没有书面规定的情况下所做的决定可能显得武断。从包索引维护者的角度来看,由于缺乏明确的规定可能造成无意的伤害,解决名称冲突变成了一项压力巨大的任务。



    参考

    [1]

    Python 包索引使用条款 (http://pypi.org/policy/terms-of-use/)

    [2]

    Python 包索引 (http://pypi.org/)

    [3]

    The Comprehensive Perl Archive Network (http://www.cpan.org/)

    [4]

    Node Package Manager (http://www.npmjs.com/package/left-pad)

    [5]

    GitHub (http://github.com/)

    [6]

    Python 社区行为守则 (http://www.python.org/psf/codeofconduct/)

    [7]

    Python Software Foundation (http://www.python.org/psf/)

    [8]

    Python 打包工作组 (http://wiki.python.org/psf/PackagingWG/)

    版权



    此文档已放在公共域中。



    声明



    Distutils 和 Catalog SIG 的众多参与者多年来贡献的想法。

    来源:

    http://github.com/python/peps/blob/master/pep-0541.txt





    英文原文:http://www.python.org/dev/peps/pep-0541/



    译者:良子