@@ -106,8 +106,13 @@ The Python ecosystem is continuing to grow,
106106meaning that future deletions of projects can be reasonably assumed to
107107be *just, as if not more, * disruptive than the deletions sampled above.
108108
109- Given the above, this PEP concludes that deletions now present a greater risk
110- and detriment to the Python ecosystem than a benefit.
109+ Given all of the above, this PEP concludes that deletions now present a greater
110+ risk and detriment to the Python ecosystem than a benefit.
111+
112+ In addition to these technical arguments, there is also precedent
113+ from other packaging ecosystems for limiting the ability of users to delete
114+ projects and their constituent releases. This precedent is documented in
115+ :ref: `Appendix A <pep763-appendix-a >`.
111116
112117Specification
113118=============
@@ -264,6 +269,115 @@ usage, this PEP identifies several limitations to this approach:
264269 PyPI is not straightforward, and there is limited possibility to gather a
265270 project's download statistics from mirrors or other distributions systems.
266271
272+ .. _pep763-appendix-a :
273+
274+ Appendix A: Precedent in other ecosystems
275+ =========================================
276+
277+ The following is a table of support for deletion in different packaging
278+ ecosystems. An ecosystem is considered to **not ** support deletion
279+ if it restrict's a user's ability to perform deletions in a manner similar
280+ to this PEP.
281+
282+ An earlier version of this table, showing only deletion, was
283+ compiled by Donald Stufft and others on the Python discussion forum in
284+ `July 2022 <https://discuss.python.org/t/17227/59 >`__.
285+
286+ .. list-table ::
287+ :header-rows: 1
288+
289+ * - Ecosystem (Index)
290+ - Deletion
291+ - Yanking
292+ - Notes
293+ * - Python (PyPI)
294+ - ✅ [#f1 ]_
295+ - ✅ [#f2 ]_
296+ - Deletion currently completely unrestricted.
297+ * - Rust (crates.io)
298+ - ❌
299+ - ✅ [#f3 ]_
300+ - Deletion by users not allowed at all.
301+ * - JavaScript (npm)
302+ - ❌ [#f4 ]_
303+ - ✅ [#f5 ]_
304+ - Deletion is limited by criteria similar to this PEP.
305+ * - Ruby (RubyGems)
306+ - ✅ [#f6 ]_
307+ - ❌
308+ - RubyGems calls deletion "yanking." Yanking in PyPI's terms is not supported at all.
309+ * - Java (Maven Central)
310+ - ❌ [#f7 ]_
311+ - ❌
312+ - Deletion by users not allowed at all.
313+ * - PHP (Packagist)
314+ - ❌
315+ - ❌
316+ - Deletion restricted after an undocumented number of installs [#f8 ]_.
317+ * - .NET (NuGet)
318+ - ❌ [#f9 ]_
319+ - ✅ [#f10 ]_
320+ - NuGet calls yanking "unlisting."
321+ * - Elixir (Hex)
322+ - ❌ [#f11 ]_
323+ - ✅ [#f11 ]_
324+ - Hex calls yanking "retiring."
325+ * - R (CRAN)
326+ - ❌ [#f12 ]_
327+ - ✅ [#f12 ]_
328+ - Deletion is limited to within 24 hours of initial release or
329+ 60 minutes for subsequent versions. CRAN calls yanking "archiving."
330+ * - Perl (CPAN)
331+ - ✅
332+ - ❌
333+ - Yanking is not supported at all. Deletion seemingly encouraged,
334+ at least as of 2021 [#f13 ]_.
335+ * - Lua (LuaRocks)
336+ - ✅ [#f14 ]_
337+ - ✅ [#f14 ]_
338+ - LuaRocks calls yanking "archiving."
339+
340+ The following trends are present:
341+
342+ * A strong majority of indices **do not ** support deletion (7 vs. 4)
343+ * A strong majority of indices **do ** support yanking (7 vs. 4)
344+ * The overwhelming majority of indices support one or the other or neither,
345+ but **not ** both (13 vs. 2)
346+
347+ * PyPI and LuaRocks are notable outliers in supporting **both ** deletion and
348+ yanking.
349+
350+ Footnotes
351+ =========
352+
353+ .. [#f1 ] https://pypi.org/help/#deletion
354+
355+ .. [#f2 ] https://pypi.org/help/#yanked
356+
357+ .. [#f3 ] https://doc.rust-lang.org/cargo/commands/cargo-yank.html
358+
359+ .. [#f4 ] https://docs.npmjs.com/unpublishing-packages-from-the-registry
360+
361+ .. [#f5 ] https://docs.npmjs.com/deprecating-and-undeprecating-packages-or-package-versions
362+
363+ .. [#f6 ] https://guides.rubygems.org/removing-a-published-gem/
364+
365+ .. [#f7 ] https://central.sonatype.org/faq/can-i-change-a-component/
366+
367+ .. [#f8 ] https://github.com/composer/packagist/issues/875
368+
369+ .. [#f9 ] https://learn.microsoft.com/en-us/nuget/nuget-org/policies/deleting-packages
370+
371+ .. [#f10 ] https://learn.microsoft.com/en-us/nuget/nuget-org/policies/deleting-packages#unlisting-a-package
372+
373+ .. [#f11 ] https://hex.pm/docs/faq#can-packages-be-removed-from-the-repository
374+
375+ .. [#f12 ] https://cran.r-project.org/web/packages/policies.html
376+
377+ .. [#f13 ] https://neilb.org/2021/05/10/delete-your-old-releases.html
378+
379+ .. [#f14 ] https://luarocks.org/changes
380+
267381 Copyright
268382=========
269383
0 commit comments