diff --git a/pep-0594.rst b/pep-0594.rst index ddcfec15b23..03e4d29f294 100644 --- a/pep-0594.rst +++ b/pep-0594.rst @@ -13,8 +13,29 @@ Abstract ======== This PEP proposed a list of standard library modules to be removed from the -standard library. The modules are mostly historic data formats and APIs that -have been superseded a long time ago, e.g. Mac OS 9 and Commodore. +standard library. The modules are mostly historic data formats (e.g. Commodore +and SUN file formats), APIs and operating systems that have been superseded a +long time ago (e.g. Mac OS 9), or modules that have security implications and +better alternatives (e.g. password and login). + +The PEP follows in the foot steps of other PEPS like :pep:`3818`. The +*Standard Library Reorganization* proposal removed a bunch of modules from +Python 3.0. In 2007, the PEP referred to maintenance burden as: + + "Over the years, certain modules have become a heavy burden upon python-dev + to maintain. In situations like this, it is better for the module to be + given to the community to maintain to free python-dev to focus more on + language support and other modules in the standard library that do not take + up an undue amount of time and effort." + +The withdrawn :pep:`206` from 2000 expresses issues with the Python standard +library unvarnished and fortright: + + "[...] the standard library modules aren't always the best choices for a + job. Some library modules were quick hacks (e.g. ``calendar``, + ``commands``), some were designed poorly and are now near-impossible to + fix (``cgi``), and some have been rendered obsolete by other, more complete + modules [...]." Rationale @@ -91,7 +112,9 @@ just be *documented* as deprecated. Optionally modules may emit a `PendingDeprecationWarning`. All deprecated modules will also undergo a feature freeze. No additional -features should be added. Bug should still be fixed. +features should be added *unless* python-dev agrees that the deprecation of +the module is reverted and the code will not be removed. Bug should still be +fixed. 3.9 --- @@ -141,35 +164,45 @@ PyPI, e.g. Pillow for image processing or NumPy-based projects to deal with audio processing. .. csv-table:: Table 1: Proposed modules deprecations - :header: "Module", "Deprecated in", "To be removed", "Has expert?", "Replacement" - :widths: 1, 1, 1, 1, 2 - - aifc,3.8,3.10,**yes (inactive)**,\- - asynchat,**3.6**,3.10,**yes**,asyncio - asyncore,**3.6**,3.10,**yes**,asyncio - audioop,3.8,3.10,**yes**,\- - binhex,3.8,3.10,no,\- - cgi,3.8,3.10,no,\- - cgitb,3.8,3.10,no,\- - chunk,3.8,3.10,no,\- - crypt,3.8,3.10,**yes (inactive)**,"bcrypt, argon2cffi, hashlib, passlib" - formatter,3.4,3.10,no,\- - fpectl,**3.7**,**3.7**,n/a,\- - imghdr,3.8,3.10,no,"filetype, puremagic, python-magic" - imp,**3.4**,3.10,**yes**,importlib - macpath,**3.7**,**3.8**,n/a,\- - msilib,3.8,3.10,no,\- - nntplib,3.8,3.10,no,\- - nis,3.8,3.10,no,\- - ossaudiodev,3.8,3.10,no,\- - parser,**2.5**,**3.9**,**yes**,"ast, lib2to3.pgen2" - pipes,3.8,3.10,no,subprocess - smtpd,"**3.4.7**, **3.5.4**",3.10,**yes**,aiosmtpd - sndhdr,3.8,3.10,no,"filetype, puremagic, python-magic" - spwd,3.8,3.10,no,"python-pam, simplepam" - sunau,3.8,3.10,no,\- - uu,3.8,3.10,no,\- - xdrlib,3.8,3.10,no,\- + :header: "Module", "Deprecated in", "To be removed", "Added in", "Has maintainer?", "Replacement" + :widths: 2, 1, 1, 1, 1, 2 + + aifc,3.8 (3.0\*),3.10,1993,**yes (inactive)**,\- + asynchat,**3.6** (3.0\*),3.10,1999,**yes**,asyncio + asyncore,**3.6** (3.0\*),3.10,1999,**yes**,asyncio + audioop,3.8 (3.0\*),3.10,1992,**yes**,\- + binhex,3.8,3.10,1995,no,\- + cgi,3.8 (2.0\*\*),3.10,1995,no,\- + cgitb,3.8 (2.0\*\*),3.10,1995,no,\- + chunk,3.8,3.10,1999,no,\- + crypt,3.8,3.10,1994,**yes (inactive)**,"bcrypt, argon2cffi, hashlib, passlib" + email.message.Message,3.3,3.10,2001,yes,email.message.EmailMessage + email.mime,3.3,3.10,2001,yes,email.contentmanager + email.policy.Compat32,3.3,3.10,2011,yes,email.policy.EmailPolicy + formatter,**3.4**,3.10,1995,no,\- + fpectl,**3.7**,**3.7**,1997,n/a,\- + imghdr,3.8,3.10,1992,no,"filetype, puremagic, python-magic" + imp,**3.4**,3.10,1990/1995,no,importlib + macpath,**3.7**,**3.8**,1990,n/a,\- + msilib,3.8,3.10,2006,no,\- + nntplib,3.8,3.10,1992,no,\- + nis,3.8 (3.0\*),3.10,1992,no,\- + ossaudiodev,3.8,3.10,2002,no,\- + parser,**2.5**,**3.9**,1993,**yes**,"ast, lib2to3.pgen2" + pipes,3.8,3.10,1992,no,subprocess + smtpd,"**3.4.7**, **3.5.4**",3.10,2001,**yes**,aiosmtpd + sndhdr,3.8,3.10,1994,no,"filetype, puremagic, python-magic" + spwd,3.8,3.10,2005,no,"python-pam, simplepam" + sunau,3.8 (3.0\*),3.10,1993,no,\- + telnetlib,3.8 (3.0\*),3.10,1997,no,"telnetlib3, Exscript" + uu,3.8,3.10,1994,no,\- + xdrlib,3.8,3.10,1992/1996,no,\- + +Some module deprecations proposed by :pep:`3108` for 3.0 and :pep:`206` for +2.0. The *added in* column illustrates, when a module was originally designed +and added to the standard library. The *has maintainer* colum refers to the +`expert index `_, a list of domain +experts and maintainers in the DevGuide. Data encoding modules @@ -180,7 +213,7 @@ binhex The `binhex `_ module encodes and decodes Apple Macintosh binhex4 data. It was originally developed for -TSR-80. In the 1980s and early 1990s it was used on classic Mac OS 9 to +TRS-80. In the 1980s and early 1990s it was used on classic Mac OS 9 to encode binary email attachments. Module type @@ -245,8 +278,15 @@ File Format is an old audio format from 1988 based on Amiga IFF. It was most commonly used on the Apple Macintosh. These days only few specialized application use AIFF. +A user disclosed [8]_ that the post production film industry makes heavy +use of the AIFC file format. The usage of the ``aifc`` module in closed source +and internal software was unknown prior to the first posting of this PEP. This +may be a compelling argument to keep the ``aifc`` module in the standard +library. The file format is stable and the module does not require much +maintenance. The strategic benefits for Python may outmatch the burden. + Module type - pure Python (depends on `audioop`_ C extension) + pure Python (depends on some functions from `audioop`_ C extension) Deprecated in 3.8 To be removed in @@ -263,8 +303,13 @@ The `audioop `_ module contains helper functions to manipulate raw audio data and adaptive differential pulse-code modulated audio data. The module is implemented in C without any additional dependencies. The `aifc`_, `sunau`_, and `wave`_ -module depend on `audioop`_ for some operations. The byteswap operation in -the `wave`_ module can be substituted with little work. +module depend on `audioop`_ for some operations. + +The byteswap operation in the ``wave`` module can be substituted with little +extra work. In case ``aifc`` is not deprecated as well, a reduced version of +the ``audioop`` module is converted into a private implementation detail, +e.g. ``_audioop`` with ``byteswap``, ``alaw2lin``, ``ulaw2lin``, ``lin2alaw``, +``lin2ulaw``, and ``lin2adpcm``. Module type C extension @@ -327,6 +372,17 @@ support for newer sound devices and improvements were proprietary. Linux community abandoned OSS in favor of ALSA [1]_. Some operation systems like OpenBSD and NetBSD provide an incomplete [2]_ emulation of OSS. +To best of my knowledge, FreeBSD is the only widespread operating system +that uses Open Sound System as of today. The ``ossaudiodev`` hasn't seen any +improvements or new features since 2003. All commits since 2003 are +project-wide code cleanups and a couple of bug fixes. It would be beneficial +for both FreeBSD community and core development, if the module would be +maintained and distributed by people that care for it and use it. + +The standard library used to have more audio-related modules. The other +audio device interface (``audiodev``, ``linuxaudiodev``, ``sunaudiodev``) +were removed in 2007 as part of the :pep:`3108` stdlib re-organization. + Module type C extension Deprecated in @@ -427,9 +483,10 @@ cgi The `cgi `_ module is a support module for Common Gateway Interface (CGI) scripts. CGI is deemed as -inefficient because every incoming request is handled in a new process. PEP -206 considers the module as *designed poorly and are now near-impossible -to fix*. +inefficient because every incoming request is handled in a new process. +:pep:`206` considers the module as: + + "[...] designed poorly and are now near-impossible to fix (``cgi``) [...]" Several people proposed to either keep the cgi module for features like `cgi.parse_qs()` or move `cgi.escape()` to a different module. The @@ -442,7 +499,7 @@ with secure default values. Module type pure Python Deprecated in - 3.8 + 3.8 (originally proposed for 2.0 by :pep:`206`) To be removed in 3.10 Has a designated expert @@ -464,7 +521,7 @@ optional debugging middleware. Module type pure Python Deprecated in - 3.8 + 3.8 (originally proposed for 2.0 by :pep:`206`) To be removed in 3.10 Has a designated expert @@ -472,6 +529,39 @@ Has a designated expert Substitute **none** +email (legacy API) +~~~~~~~~~~~~~~~~~~ + +The `email `_ package is a +library for managing email messages. The email package contains several +legacy modules, legacy functions, and legacy classes, that provide backwards +compatibility to Python 3.2 and 2.7: + + * ``email.message.Message`` (replaced by ``email.message.EmailMessage``) + * ``email.mime`` (replaced by ``email.contentmanager``) + * ``email.header`` (replaced by dict-like API of ``EmailMessage`` class) + * ``email.charset`` + * ``email.encoders`` (replaced by ``EmailMessage.set_content``) + * ``email.utils`` (new API performs parsing and formatting automatically) + * ``email.iterators`` + * ``email.policy.Compat32`` + +The classes ``email.mime.audio.MIMEAudio`` and ``email.mime.image.MIMEImage`` +depend on the ``sndhdr`` and ``imghdr`` modules. In case the ``email.mime`` +package is not removed, the auto-detection of file formats must be deprecated +and ``_subtype`` argument a required argument. + +Module type + pure Python +Deprecated in + 3.8 (documented as legacy APIs since 3.3 or 3.4) +To be removed in + 3.10 +Has a designated expert + yes +Substitute + email (non-legacy APIs) + smtpd ~~~~~ @@ -521,6 +611,22 @@ Has a designated expert Substitute **none** +telnetlib +~~~~~~~~~ + +The `telnetlib `_ module +provides a Telnet class that implements the Telnet protocol. + +Module type + pure Python +Deprecated in + 3.8 +To be removed in + 3.10 +Substitute + `telnetlib3 `_, + `Exscript `_ + Operating system interface -------------------------- @@ -960,9 +1066,9 @@ Update 1 * Deprecate `parser`_ module * Keep `fileinput`_ module -* Elaborate why `crypt`_ and `spwd`_ are dangerous and bad +* Elaborate why ``crypt`` and ``spwd`` are dangerous and bad * Improve sections for `cgitb`_, `colorsys`_, `nntplib`_, and `smtpd`_ modules -* The `colorsys`_, `crypt`_, `imghdr`_, `sndhdr`_, and `spwd`_ sections now +* The `colorsys`_, ``crypt``, `imghdr`_, `sndhdr`_, and ``spwd`` sections now list suitable substitutions. * Mention that ``socketserver`` is going to stay for ``http.server`` and ``xmlrpc.server`` @@ -975,6 +1081,11 @@ Update 2 * Keep ``colorsys`` module * Add experts * Redirect discussions to discuss.python.org +* Deprecate `telnetlib`_ +* Deprecate compat32 policy of email package +* Add creation year to overview table +* Mention :pep:`206` and :pep:`3108` +* Update sections for ``aifc``, ``audioop``, ``cgi``, and ``wave``. References @@ -987,6 +1098,7 @@ References .. [5] https://twitter.com/dabeaz/status/1130278844479545351 .. [6] https://mail.python.org/pipermail/python-dev/2019-May/157464.html .. [7] https://discuss.python.org/t/switch-pythons-parsing-tech-to-something-more-powerful-than-ll-1/379 +.. [8] https://mail.python.org/pipermail/python-dev/2019-May/157634.html Copyright