CINXE.COM
PEP 541 – Package Index Name Retention | peps.python.org
<!DOCTYPE html> <html lang="en"> <head> <meta charset="utf-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta name="color-scheme" content="light dark"> <title>PEP 541 – Package Index Name Retention | peps.python.org</title> <link rel="shortcut icon" href="../_static/py.png"> <link rel="canonical" href="https://peps.python.org/pep-0541/"> <link rel="stylesheet" href="../_static/style.css" type="text/css"> <link rel="stylesheet" href="../_static/mq.css" type="text/css"> <link rel="stylesheet" href="../_static/pygments.css" type="text/css" media="(prefers-color-scheme: light)" id="pyg-light"> <link rel="stylesheet" href="../_static/pygments_dark.css" type="text/css" media="(prefers-color-scheme: dark)" id="pyg-dark"> <link rel="alternate" type="application/rss+xml" title="Latest PEPs" href="https://peps.python.org/peps.rss"> <meta property="og:title" content='PEP 541 – Package Index Name Retention | peps.python.org'> <meta property="og:description" content="This PEP proposes an extension to the Terms of Use 1 of the Package Index 2, clarifying expectations of package owners regarding ownership of a package name on the Package Index, specifically with regards to conflict resolution."> <meta property="og:type" content="website"> <meta property="og:url" content="https://peps.python.org/pep-0541/"> <meta property="og:site_name" content="Python Enhancement Proposals (PEPs)"> <meta property="og:image" content="https://peps.python.org/_static/og-image.png"> <meta property="og:image:alt" content="Python PEPs"> <meta property="og:image:width" content="200"> <meta property="og:image:height" content="200"> <meta name="description" content="This PEP proposes an extension to the Terms of Use 1 of the Package Index 2, clarifying expectations of package owners regarding ownership of a package name on the Package Index, specifically with regards to conflict resolution."> <meta name="theme-color" content="#3776ab"> </head> <body> <svg xmlns="http://www.w3.org/2000/svg" style="display: none;"> <symbol id="svg-sun-half" viewBox="0 0 24 24" pointer-events="all"> <title>Following system colour scheme</title> <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"> <circle cx="12" cy="12" r="9"></circle> <path d="M12 3v18m0-12l4.65-4.65M12 14.3l7.37-7.37M12 19.6l8.85-8.85"></path> </svg> </symbol> <symbol id="svg-moon" viewBox="0 0 24 24" pointer-events="all"> <title>Selected dark colour scheme</title> <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"> <path stroke="none" d="M0 0h24v24H0z" fill="none"></path> <path d="M12 3c.132 0 .263 0 .393 0a7.5 7.5 0 0 0 7.92 12.446a9 9 0 1 1 -8.313 -12.454z"></path> </svg> </symbol> <symbol id="svg-sun" viewBox="0 0 24 24" pointer-events="all"> <title>Selected light colour scheme</title> <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"> <circle cx="12" cy="12" r="5"></circle> <line x1="12" y1="1" x2="12" y2="3"></line> <line x1="12" y1="21" x2="12" y2="23"></line> <line x1="4.22" y1="4.22" x2="5.64" y2="5.64"></line> <line x1="18.36" y1="18.36" x2="19.78" y2="19.78"></line> <line x1="1" y1="12" x2="3" y2="12"></line> <line x1="21" y1="12" x2="23" y2="12"></line> <line x1="4.22" y1="19.78" x2="5.64" y2="18.36"></line> <line x1="18.36" y1="5.64" x2="19.78" y2="4.22"></line> </svg> </symbol> </svg> <script> document.documentElement.dataset.colour_scheme = localStorage.getItem("colour_scheme") || "auto" </script> <section id="pep-page-section"> <header> <h1>Python Enhancement Proposals</h1> <ul class="breadcrumbs"> <li><a href="https://www.python.org/" title="The Python Programming Language">Python</a> » </li> <li><a href="../pep-0000/">PEP Index</a> » </li> <li>PEP 541</li> </ul> <button id="colour-scheme-cycler" onClick="setColourScheme(nextColourScheme())"> <svg aria-hidden="true" class="colour-scheme-icon-when-auto"><use href="#svg-sun-half"></use></svg> <svg aria-hidden="true" class="colour-scheme-icon-when-dark"><use href="#svg-moon"></use></svg> <svg aria-hidden="true" class="colour-scheme-icon-when-light"><use href="#svg-sun"></use></svg> <span class="visually-hidden">Toggle light / dark / auto colour theme</span> </button> </header> <article> <section id="pep-content"> <h1 class="page-title">PEP 541 – Package Index Name Retention</h1> <dl class="rfc2822 field-list simple"> <dt class="field-odd">Author<span class="colon">:</span></dt> <dd class="field-odd">Łukasz Langa <lukasz at python.org></dd> <dt class="field-even">BDFL-Delegate<span class="colon">:</span></dt> <dd class="field-even">Mark Mangoba <mmangoba at python.org></dd> <dt class="field-odd">Discussions-To<span class="colon">:</span></dt> <dd class="field-odd"><a class="reference external" href="https://mail.python.org/archives/list/distutils-sig@python.org/">Distutils-SIG list</a></dd> <dt class="field-even">Status<span class="colon">:</span></dt> <dd class="field-even"><abbr title="Accepted and implementation complete, or no longer active">Final</abbr></dd> <dt class="field-odd">Type<span class="colon">:</span></dt> <dd class="field-odd"><abbr title="Normative PEP describing or proposing a change to a Python community process, workflow or governance">Process</abbr></dd> <dt class="field-even">Topic<span class="colon">:</span></dt> <dd class="field-even"><a class="reference external" href="../topic/packaging/">Packaging</a></dd> <dt class="field-odd">Created<span class="colon">:</span></dt> <dd class="field-odd">12-Jan-2017</dd> <dt class="field-even">Post-History<span class="colon">:</span></dt> <dd class="field-even"><p></p></dd> <dt class="field-odd">Resolution<span class="colon">:</span></dt> <dd class="field-odd"><a class="reference external" href="https://mail.python.org/pipermail/distutils-sig/2018-March/032089.html">Distutils-SIG message</a></dd> </dl> <hr class="docutils" /> <section id="contents"> <details><summary>Table of Contents</summary><ul class="simple"> <li><a class="reference internal" href="#abstract">Abstract</a></li> <li><a class="reference internal" href="#rationale">Rationale</a></li> <li><a class="reference internal" href="#approval-process">Approval Process</a></li> <li><a class="reference internal" href="#specification">Specification</a></li> <li><a class="reference internal" href="#implementation">Implementation</a><ul> <li><a class="reference internal" href="#reachability">Reachability</a></li> <li><a class="reference internal" href="#abandoned-projects">Abandoned projects</a></li> <li><a class="reference internal" href="#continued-maintenance-of-an-abandoned-project">Continued maintenance of an abandoned project</a></li> <li><a class="reference internal" href="#removal-of-an-abandoned-project">Removal of an abandoned project</a></li> <li><a class="reference internal" href="#name-conflict-resolution-for-active-projects">Name conflict resolution for active projects</a></li> <li><a class="reference internal" href="#invalid-projects">Invalid projects</a></li> <li><a class="reference internal" href="#intellectual-property-policy">Intellectual property policy</a></li> <li><a class="reference internal" href="#the-role-of-the-python-software-foundation">The role of the Python Software Foundation</a></li> </ul> </li> <li><a class="reference internal" href="#how-to-request-a-name-transfer">How to request a name transfer</a></li> <li><a class="reference internal" href="#prior-art">Prior art</a></li> <li><a class="reference internal" href="#rejected-proposals">Rejected Proposals</a></li> <li><a class="reference internal" href="#references">References</a></li> <li><a class="reference internal" href="#copyright">Copyright</a></li> <li><a class="reference internal" href="#acknowledgements">Acknowledgements</a></li> </ul> </details></section> <section id="abstract"> <h2><a class="toc-backref" href="#abstract" role="doc-backlink">Abstract</a></h2> <p>This PEP proposes an extension to the Terms of Use <a class="footnote-reference brackets" href="#id9" id="id1">[1]</a> of the Package Index <a class="footnote-reference brackets" href="#id10" id="id2">[2]</a>, clarifying expectations of package owners regarding ownership of a package name on the Package Index, specifically with regards to conflict resolution.</p> <p>Existing package repositories such as CPAN <a class="footnote-reference brackets" href="#id11" id="id3">[3]</a>, NPM <a class="footnote-reference brackets" href="#id12" id="id4">[4]</a>, and GitHub <a class="footnote-reference brackets" href="#id13" id="id5">[5]</a> will be investigated as prior art in this field.</p> </section> <section id="rationale"> <h2><a class="toc-backref" href="#rationale" role="doc-backlink">Rationale</a></h2> <p>Given that package names on the Index are sharing a single flat namespace, a unique name is a finite resource. The growing age of the Package Index causes a constant rise of situations of conflict between the current use of the name and a different suggested use of the same name.</p> <p>This document aims to provide general guidelines for solving the most typical cases of such conflicts.</p> </section> <section id="approval-process"> <h2><a class="toc-backref" href="#approval-process" role="doc-backlink">Approval Process</a></h2> <p>As the application of this policy has potential legal ramifications for the Python Software Foundation, the approval process used is more formal than that used for most PEPs.</p> <p>Rather than accepting the PEP directly, the assigned BDFL-Delegate will instead recommend its acceptance to the PSF’s Packaging Working Group. After consultation with the PSF’s General Counsel, adoption of the policy will then be subject to a formal vote within the working group.</p> <p>This formal approval process will be used for both initial adoption of the policy, and for adoption of any future amendments.</p> </section> <section id="specification"> <h2><a class="toc-backref" href="#specification" role="doc-backlink">Specification</a></h2> <p>The main idea behind this document is that the Package Index serves the community. Every user is invited to upload content to the Package Index under the Terms of Use, understanding that it is at the sole risk of the user.</p> <p>While the Package Index is not a backup service, the maintainers of the Package Index do their best to keep that content accessible indefinitely in its published form. However, in certain edge cases the greater community’s needs might overweigh the individual’s expectation of ownership of a package name.</p> <p>The use cases covered by this document are:</p> <ul class="simple"> <li>Abandoned projects:<ul> <li>continued maintenance by a different set of users; or</li> <li>removal from the Index for use with a different project.</li> </ul> </li> <li>Active projects:<ul> <li>resolving disputes over a name.</li> </ul> </li> <li>Invalid projects:<ul> <li>projects subject to a claim of intellectual property infringement.</li> </ul> </li> </ul> <p>The proposed extension to the Terms of Use, as expressed in the Implementation section, will be published as a separate document on the Package Index, linked next to existing Terms of Use in the front page footer.</p> </section> <section id="implementation"> <h2><a class="toc-backref" href="#implementation" role="doc-backlink">Implementation</a></h2> <section id="reachability"> <h3><a class="toc-backref" href="#reachability" role="doc-backlink">Reachability</a></h3> <p>The user of the Package Index is solely responsible for being reachable by the Package Index maintainers for matters concerning projects that the user owns. In every case where contacting the user is necessary, the maintainers will try to do so at least three times, using the following means of contact:</p> <ul class="simple"> <li>the e-mail address on file in the user’s profile on the Package Index;</li> <li>the e-mail address listed in the Author field for a given project uploaded to the Index; and</li> <li>any e-mail addresses found in the given project’s documentation on the Index or on the listed Home Page.</li> </ul> <p>The maintainers stop trying to reach the user after six weeks.</p> </section> <section id="abandoned-projects"> <h3><a class="toc-backref" href="#abandoned-projects" role="doc-backlink">Abandoned projects</a></h3> <p>A project is considered <em>abandoned</em> when ALL of the following are met:</p> <ul class="simple"> <li>owner not reachable (see Reachability above);</li> <li>no releases within the past twelve months; and</li> <li>no activity from the owner on the project’s home page (or no home page listed).</li> </ul> <p>All other projects are considered <em>active</em>.</p> </section> <section id="continued-maintenance-of-an-abandoned-project"> <span id="continue-maintenance"></span><h3><a class="toc-backref" href="#continued-maintenance-of-an-abandoned-project" role="doc-backlink">Continued maintenance of an abandoned project</a></h3> <p>If a candidate appears willing to continue maintenance on an <em>abandoned</em> project, ownership of the name is transferred when ALL of the following are met:</p> <ul class="simple"> <li>the project has been determined <em>abandoned</em> by the rules described above;</li> <li>the candidate is able to demonstrate their own failed attempts to contact the existing owner;</li> <li>the candidate is able to demonstrate improvements made on the candidate’s own fork of the project;</li> <li>the candidate is able to demonstrate why a fork under a different name is not an acceptable workaround; and</li> <li>the maintainers of the Package Index don’t have any additional reservations.</li> </ul> <p>Under no circumstances will a name be reassigned against the wishes of a reachable owner.</p> </section> <section id="removal-of-an-abandoned-project"> <span id="reclaim-name"></span><h3><a class="toc-backref" href="#removal-of-an-abandoned-project" role="doc-backlink">Removal of an abandoned project</a></h3> <p>Projects are never removed from the Package Index solely on the basis of abandonment. Artifacts uploaded to the Package Index hold inherent historical value.</p> <p>An <em>abandoned</em> project can be transferred to a new owner for purposes of reusing the name when ALL of the following are met:</p> <ul class="simple"> <li>the project has been determined <em>abandoned</em> by the rules described above;</li> <li>the candidate is able to demonstrate their own failed attempts to contact the existing owner;</li> <li>the candidate is able to demonstrate that the project suggested to reuse the name already exists and meets notability requirements;</li> <li>the candidate is able to demonstrate why a fork under a different name is not an acceptable workaround;</li> <li>download statistics on the Package Index for the existing package indicate project is not being used; and</li> <li>the maintainers of the Package Index don’t have any additional reservations.</li> </ul> </section> <section id="name-conflict-resolution-for-active-projects"> <h3><a class="toc-backref" href="#name-conflict-resolution-for-active-projects" role="doc-backlink">Name conflict resolution for active projects</a></h3> <p>The maintainers of the Package Index are not arbiters in disputes around <em>active</em> projects. There are many possible scenarios here, a non-exclusive list describing some real-world examples is presented below. None of the following qualify for package name ownership transfer:</p> <ol class="arabic simple"> <li>User A and User B share project X. After some time they part ways and each of them wants to continue the project under name X.</li> <li>User A owns a project X outside the Package Index. User B creates a package under the name X on the Index. After some time, User A wants to publish project X on the Index but realizes name is taken. This is true even if User A’s project X gains notability and the User B’s project X is not notable.</li> <li>User A publishes project X to the Package Index. After some time User B proposes bug fixes to the project but no new release is published by User A. This is true even if User A agrees to publish a new version and later doesn’t, even if User B’s changes are merged to the source code repository for project X.</li> </ol> <p>Again, the list above is not exclusive. The maintainers of the Package Index recommend users to get in touch with each other and solve the issue by respectful communication (see the PSF Code of Conduct <a class="footnote-reference brackets" href="#id14" id="id6">[6]</a>).</p> </section> <section id="invalid-projects"> <h3><a class="toc-backref" href="#invalid-projects" role="doc-backlink">Invalid projects</a></h3> <p>A project published on the Package Index meeting ANY of the following is considered invalid and will be removed from the Index:</p> <ul class="simple"> <li>project does not conform to Terms of Use;</li> <li>project is malware (designed to exploit or harm systems or users directly, to facilitate command-and-control attacks, or perform data exfiltration);</li> <li>project is spam (designed to advertise or solicit goods or services);</li> <li>project contains illegal content;</li> <li>project violates copyright, trademarks, patents, or licenses;</li> <li>project is name squatting (package has no functionality or is empty);</li> <li>project name, description, or content violates the Code of Conduct;</li> <li>project uses obfuscation to hide or mask functionality; or</li> <li>project is abusing the Package Index for purposes it was not intended.</li> </ul> <p>The Package Index maintainers pre-emptively declare certain package names as unavailable for security reasons.</p> </section> <section id="intellectual-property-policy"> <h3><a class="toc-backref" href="#intellectual-property-policy" role="doc-backlink">Intellectual property policy</a></h3> <p>It is the policy of Python Software Foundation and the Package Index maintainers to be appropriately responsive to claims of intellectual property infringement by third parties. It is not the policy of the Python Software Foundation nor the Package Index maintainers to pre-screen uploaded packages for any type of intellectual property infringement.</p> <p>Possibly-infringing packages should be reported to <a class="reference external" href="mailto:legal%40python.org">legal<span>@</span>python<span>.</span>org</a> and counsel to the Python Software Foundation will determine an appropriate response. A package can be removed or transferred to a new owner at the sole discretion of the Python Software Foundation to address a claim of infringement.</p> <p>A project published on the Package Index meeting ANY of the following may be considered infringing and subject to removal from the Index or transferral to a new owner:</p> <ul class="simple"> <li>project contains unlicensed copyrighted material from a third party, and is subject to a properly made claim under the DMCA;</li> <li>project uses a third party’s trademark in a way not covered by nominal or fair use guidelines;</li> <li>project clearly implicates a patented system or process, and is the subject of a complaint; or</li> <li>project is subject to an active lawsuit.</li> </ul> <p>In the event of a complaint for intellectual property infringement, a copy of the complaint will be sent to the package owner. In some cases, action may be taken by the Package Index maintainers before the owner responds.</p> </section> <section id="the-role-of-the-python-software-foundation"> <h3><a class="toc-backref" href="#the-role-of-the-python-software-foundation" role="doc-backlink">The role of the Python Software Foundation</a></h3> <p>The Python Software Foundation <a class="footnote-reference brackets" href="#id15" id="id7">[7]</a> is the non-profit legal entity that provides the Package Index as a community service.</p> <p>The Package Index maintainers can escalate issues covered by this document for resolution by the Packaging Workgroup if the matter is not clear enough. Some decisions <em>require</em> additional judgement by the Board, especially in cases of Code of Conduct violations or legal claims. Recommendations made by the Board are sent to the Packaging Workgroup <a class="footnote-reference brackets" href="#id16" id="id8">[8]</a> for review.</p> <p>The Packaging Workgroup has the final say in any disputes covered by this document and can decide to reassign or remove a project from the Package Index after careful consideration even when not all requirements listed here are met.</p> </section> </section> <section id="how-to-request-a-name-transfer"> <h2><a class="toc-backref" href="#how-to-request-a-name-transfer" role="doc-backlink">How to request a name transfer</a></h2> <p>If you want to take over an existing project name on PyPI, these are the steps to follow:</p> <ol class="arabic simple"> <li>Try to contact the current owner(s) directly: email them and open an issue if you can find a related repository. The processes described here are meant as a last resort if the owner cannot be contacted.</li> <li>Check the criteria above to see when a transfer is allowed. In particular, the criteria for <a class="reference internal" href="#reclaim-name">reusing a name for a different project</a> are more stringent than for <a class="reference internal" href="#continue-maintenance">continuing maintenance of the same project</a> - although it’s not easy to get a name transferred in either case.</li> <li>Search the <a class="reference external" href="https://github.com/pypa/pypi-support/issues">PyPI Support issues</a> to see if anyone else is already requesting the same name.</li> <li>If all the criteria are met to transfer ownership of the name, <a class="reference external" href="https://github.com/pypa/pypi-support/issues/new?labels=PEP+541&template=pep541-request.yml&title=PEP+541+Request%3A+PROJECT_NAME">open a new issue</a> to request it, detailing why you believe each relevant criterion is satisfied.</li> </ol> </section> <section id="prior-art"> <h2><a class="toc-backref" href="#prior-art" role="doc-backlink">Prior art</a></h2> <p>NPM contains a separate section linked from the front page called <a class="reference external" href="https://www.npmjs.com/policies/disputes">Package Name Disputes</a>. It is described as a “living document”, as of January 2017 its contents might be summarized as follows:</p> <ul class="simple"> <li>package name squatting is prohibited;</li> <li>users wanting to reuse a project name are required to contact the existing author, with cc to <a class="reference external" href="mailto:support%40npmjs.com">support<span>@</span>npmjs<span>.</span>com</a>;</li> <li>all contact must conform to the NPM Code of Conduct;</li> <li>in case of no resolution after a few weeks, npm inc. holds the right to the final decision in the matter.</li> </ul> <p>CPAN lets any user upload modules with the same name. PAUSE, a related index, only lists modules uploaded by the primary maintainer or listed co-maintainers. CPAN documentation doesn’t address disputes otherwise.</p> <p>GitHub’s terms of service contain an exhaustive list of behavior not meeting general conditions of use. While not codified anywhere, GitHub does agree for users to reclaim abandoned account names by archiving the abandoned account and letting the other user or organization rename their account. This is done on a case-by-case basis.</p> </section> <section id="rejected-proposals"> <h2><a class="toc-backref" href="#rejected-proposals" role="doc-backlink">Rejected Proposals</a></h2> <p>The original approach was to hope for the best and solve issues as they arise without written policy. This is not sustainable. The lack of generally available guidelines in writing on package name conflict resolution is causing unnecessary tensions. From the perspective of users, decisions made by the Package Index maintainers without written guidelines may appear arbitrary. From the perspective of the Package Index maintainers, solving name conflicts is a stressful task due to risk of unintentional harm due to lack of defined policy.</p> </section> <section id="references"> <h2><a class="toc-backref" href="#references" role="doc-backlink">References</a></h2> <aside class="footnote-list brackets"> <aside class="footnote brackets" id="id9" role="doc-footnote"> <dt class="label" id="id9">[<a href="#id1">1</a>]</dt> <dd>Terms of Use of the Python Package Index (<a class="reference external" href="https://pypi.org/policy/terms-of-use/">https://pypi.org/policy/terms-of-use/</a>)</aside> <aside class="footnote brackets" id="id10" role="doc-footnote"> <dt class="label" id="id10">[<a href="#id2">2</a>]</dt> <dd>The Python Package Index (<a class="reference external" href="https://pypi.org/">https://pypi.org/</a>)</aside> <aside class="footnote brackets" id="id11" role="doc-footnote"> <dt class="label" id="id11">[<a href="#id3">3</a>]</dt> <dd>The Comprehensive Perl Archive Network (<a class="reference external" href="http://www.cpan.org/">http://www.cpan.org/</a>)</aside> <aside class="footnote brackets" id="id12" role="doc-footnote"> <dt class="label" id="id12">[<a href="#id4">4</a>]</dt> <dd>Node Package Manager (<a class="reference external" href="https://www.npmjs.com/package/left-pad">https://www.npmjs.com/package/left-pad</a>)</aside> <aside class="footnote brackets" id="id13" role="doc-footnote"> <dt class="label" id="id13">[<a href="#id5">5</a>]</dt> <dd>GitHub (<a class="reference external" href="https://github.com/">https://github.com/</a>)</aside> <aside class="footnote brackets" id="id14" role="doc-footnote"> <dt class="label" id="id14">[<a href="#id6">6</a>]</dt> <dd>Python Community Code of Conduct (<a class="reference external" href="https://www.python.org/psf/codeofconduct/">https://www.python.org/psf/codeofconduct/</a>)</aside> <aside class="footnote brackets" id="id15" role="doc-footnote"> <dt class="label" id="id15">[<a href="#id7">7</a>]</dt> <dd>Python Software Foundation (<a class="reference external" href="https://www.python.org/psf/">https://www.python.org/psf/</a>)</aside> <aside class="footnote brackets" id="id16" role="doc-footnote"> <dt class="label" id="id16">[<a href="#id8">8</a>]</dt> <dd>Python Packaging Working Group (<a class="reference external" href="https://wiki.python.org/psf/PackagingWG/">https://wiki.python.org/psf/PackagingWG/</a>)</aside> </aside> </section> <section id="copyright"> <h2><a class="toc-backref" href="#copyright" role="doc-backlink">Copyright</a></h2> <p>This document has been placed in the public domain.</p> </section> <section id="acknowledgements"> <h2><a class="toc-backref" href="#acknowledgements" role="doc-backlink">Acknowledgements</a></h2> <p>The many participants of the Distutils and Catalog SIGs for their ideas over the years.</p> </section> </section> <hr class="docutils" /> <p>Source: <a class="reference external" href="https://github.com/python/peps/blob/main/peps/pep-0541.rst">https://github.com/python/peps/blob/main/peps/pep-0541.rst</a></p> <p>Last modified: <a class="reference external" href="https://github.com/python/peps/commits/main/peps/pep-0541.rst">2023-09-09 17:39:29 GMT</a></p> </article> <nav id="pep-sidebar"> <h2>Contents</h2> <ul> <li><a class="reference internal" href="#abstract">Abstract</a></li> <li><a class="reference internal" href="#rationale">Rationale</a></li> <li><a class="reference internal" href="#approval-process">Approval Process</a></li> <li><a class="reference internal" href="#specification">Specification</a></li> <li><a class="reference internal" href="#implementation">Implementation</a><ul> <li><a class="reference internal" href="#reachability">Reachability</a></li> <li><a class="reference internal" href="#abandoned-projects">Abandoned projects</a></li> <li><a class="reference internal" href="#continued-maintenance-of-an-abandoned-project">Continued maintenance of an abandoned project</a></li> <li><a class="reference internal" href="#removal-of-an-abandoned-project">Removal of an abandoned project</a></li> <li><a class="reference internal" href="#name-conflict-resolution-for-active-projects">Name conflict resolution for active projects</a></li> <li><a class="reference internal" href="#invalid-projects">Invalid projects</a></li> <li><a class="reference internal" href="#intellectual-property-policy">Intellectual property policy</a></li> <li><a class="reference internal" href="#the-role-of-the-python-software-foundation">The role of the Python Software Foundation</a></li> </ul> </li> <li><a class="reference internal" href="#how-to-request-a-name-transfer">How to request a name transfer</a></li> <li><a class="reference internal" href="#prior-art">Prior art</a></li> <li><a class="reference internal" href="#rejected-proposals">Rejected Proposals</a></li> <li><a class="reference internal" href="#references">References</a></li> <li><a class="reference internal" href="#copyright">Copyright</a></li> <li><a class="reference internal" href="#acknowledgements">Acknowledgements</a></li> </ul> <br> <a id="source" href="https://github.com/python/peps/blob/main/peps/pep-0541.rst">Page Source (GitHub)</a> </nav> </section> <script src="../_static/colour_scheme.js"></script> <script src="../_static/wrap_tables.js"></script> <script src="../_static/sticky_banner.js"></script> </body> </html>