[New-bugs-announce] [issue42173] Drop Solaris support

STINNER Victor report at bugs.python.org
Tue Oct 27 11:59:08 EDT 2020


New submission from STINNER Victor <vstinner at python.org>:

In past years, very few Python core developers took care of the Solaris support. The latest significant Solaris enhancement was in 2018 with the addition of a new Solaris st_fstype attribute to os.stat(), in Python 3.7, by Jesús Cea Avión (bpo-32659).

Another recent Solaris-related change is bpo-41687: "Fix implementation of sendfile to be compatible with Solaris".

On the Oracle side, there was an article about Python on Solaris in 2019:
"Future of Python on Solaris" by  Darren Moffat 
https://blogs.oracle.com/solaris/future-of-python-on-solaris

I now that Giampaolo Rodola cares of the Solaris support for his psutil project:
https://github.com/giampaolo/psutil/

It's unclear to me if Oracle still plans to maintain Solaris. The latest release was published 2 years ago. The Wikipedia article says: "While Oracle did have a large layoff of Solaris development engineering staff, development continues today of which Solaris 11.4 was released in 2018."
https://en.wikipedia.org/wiki/Solaris_(operating_system)

There is currently 25 open issues which could be closed if we drop the Solaris support.

See also the PEP 11 for the process.

I asked asked 4 years ago (in 2016) if Solaris support should/can be removed:
"OpenIndiana and Solaris support"
https://mail.python.org/archives/list/python-dev@python.org/message/NOT2RORSNX72ZLUHK2UUGBD4GTPNKBUS/

Python has no longer buildbot workers running on Solaris or a Solaris variant (OpenIndiana, Illumos, etc.).

I propose to drop the Solaris support in Python to reduce the maintenance burden.

Python has a few features specific to Solaris:

* st_fstype attribute of os.stat()
* select.devpoll and selectors.DevpollSelector
* time.CLOCK_HIGHRES constant
* stat.S_ISDOOR()
* tarfile: "Solaris extended header" (no need to remove this one)

Solaris has many names and variants:

* SunOS
* SRV4
* Solaris
* Illumos (still active in July 2020 at least)
* OpenSolaris: "On Friday, August 13, 2010, details started to emerge relating to the discontinuation of the OpenSolaris project and the pending release of a new closed-source, proprietary version of Solaris, Solaris 11." says Wikipedia
* OpenIndiana (latest release in 2020)

I'm not sure on how to process? Deprecate all Solaris-specific features in Python 3.10, make sure that Python 3.11 cannot be built on Solaris anymore, and drop the code in Python 3.12? Or drop everything as soon as possible in Python 3.10?

The alternative is to leave the code unchanged and let the code slowly die, as we did for other platforms like HP-UX and IRIX.

See also my notes on platforms supported by Python:
https://pythondev.readthedocs.io/platforms.html

Attached draft PR gives an idea on how much code can be removed if Solaris support is removed. A coase estimation is the removal of 700 lines:

 Doc/c-api/init.rst                           |   3 +-
 Doc/distutils/apiref.rst                     |   1 -
 Doc/library/gettext.rst                      |  10 +-
 Doc/library/os.rst                           |  12 +-
 Doc/library/platform.rst                     |   5 +-
 Doc/library/posix.rst                        |   8 +-
 Doc/library/sys.rst                          |   3 +-
 Doc/library/sysconfig.rst                    |   1 -
 Doc/library/time.rst                         |  13 +-
 Doc/using/unix.rst                           |   7 -
 Include/pyport.h                             |   5 -
 Lib/cgi.py                                   |   4 +-
 Lib/ctypes/test/test_byteswap.py             |   2 +-
 Lib/ctypes/util.py                           | 100 ++--------
 Lib/distutils/command/bdist.py               |   2 +-
 Lib/distutils/tests/support.py               |   2 +-
 Lib/distutils/tests/test_build_ext.py        |  21 --
 Lib/distutils/util.py                        |  11 --
 Lib/gettext.py                               |   3 -
 Lib/logging/handlers.py                      |   2 -
 Lib/platform.py                              |  27 +--
 Lib/sysconfig.py                             |  11 --
 Lib/test/fork_wait.py                        |   4 +-
 Lib/test/subprocessdata/fd_status.py         |   3 -
 Lib/test/test__locale.py                     |  24 ---
 Lib/test/test_asyncio/test_sendfile.py       |   6 -
 Lib/test/test_asyncore.py                    |   2 -
 Lib/test/test_cmd_line.py                    |   2 +-
 Lib/test/test_curses.py                      |   2 +-
 Lib/test/test_fileio.py                      |   2 +-
 Lib/test/test_importlib/import_/test_path.py |   2 +-
 Lib/test/test_locale.py                      |   2 +-
 Lib/test/test_os.py                          |  14 +-
 Lib/test/test_posix.py                       |   7 +-
 Lib/test/test_pty.py                         |   4 -
 Lib/test/test_selectors.py                   |   2 +-
 Lib/test/test_shutil.py                      |   2 +-
 Lib/test/test_socket.py                      |   4 -
 Lib/test/test_strftime.py                    |   3 +-
 Lib/test/test_sys.py                         |   2 +-
 Lib/uuid.py                                  |   5 -
 Modules/Setup                                |   4 -
 Modules/_ctypes/ctypes.h                     |   4 -
 Modules/_cursesmodule.c                      |   2 +-
 Modules/_multiprocessing/multiprocessing.h   |  15 --
 Modules/_posixsubprocess.c                   |  11 --
 Modules/errnomodule.c                        |  23 +--
 Modules/mathmodule.c                         |   2 +-
 Modules/posixmodule.c                        |  65 +-----
 Modules/signalmodule.c                       |   2 +-
 Modules/socketmodule.c                       |   7 -
 Modules/termios.c                            |   8 +-
 Modules/timemodule.c                         |   9 +-
 Python/bootstrap_hash.c                      |  17 +-
 Python/fileutils.c                           |   3 +-
 Python/import.c                              |   3 +-
 Tools/freeze/README                          |   5 -
 Tools/i18n/pygettext.py                      |   3 +-
 Tools/pynche/Main.py                         |   2 -
 Tools/pynche/README                          |   2 +-
 Tools/scripts/nm2def.py                      |   2 +-
 configure                                    | 285 +--------------------------
 configure.ac                                 | 101 +---------
 pyconfig.h.in                                |  19 +-
 setup.py                                     |  20 +-
 65 files changed, 91 insertions(+), 868 deletions(-)

----------
components: Interpreter Core
messages: 379767
nosy: giampaolo.rodola, jcea, pablogsal, vstinner
priority: normal
severity: normal
status: open
title: Drop Solaris support
versions: Python 3.10

_______________________________________
Python tracker <report at bugs.python.org>
<https://bugs.python.org/issue42173>
_______________________________________


More information about the New-bugs-announce mailing list