Description
Would it be ok to remove the legacy "buffer" API in Python 3.13, scheduled for October 2024? I'm talking about functions:
- PyObject_AsCharBuffer()
- PyObject_CheckReadBuffer()
- PyObject_AsReadBuffer()
- PyObject_AsWriteBuffer()
This API is deprecated since Python 3.0 and is older than the new Py_buffer
API. The Py_buffer
API is safer: it has a PyBuffer_Release() method to notify when the consumer is done: the resource can be released. The Py_buffer
API is now commonly used.
In June 2020, there was a first attempt to remove these functions in issue #85275: commit 6f8a6ee. It caused too many troubles and had to be reverted the following year (commit ce5e1a6, July 2021). The removed functions were still used by at least 6 projects:
- PyQt4: FIXED in PyQt5 by using the safe PyObject_GetBuffer()/PyBuffer_Release() functions. PyQt4 is now legacy.
- libsolv: FIXED. it seems like it has been solved in libsolv fails with Python 3.10: _solv.so: undefined symbol: PyObject_AsReadBuffer openSUSE/libsolv#410
- m2crypto: FIXED in m2crypto 0.37.1 by https://gitlab.com/m2crypto/m2crypto/-/commit/6bb65c27f01dd69f08c4654ce531fb283c7bcc07
- apsw: FIXED in 3.35.4-r1, deprecated buffer protocol API rogerbinns/apsw#301
- wsaccel: FIXED in v0.6.3: deprecated buffer protocol API methane/wsaccel#22 and methane/wsaccel@b171314
- djvulibre: It seems like it stills uses PyObject_AsWriteBuffer(). But https://github.com/jwilk-archive/python-djvulibre project has been archived by the owner on Oct 4, 2022 and is now read-only!
The webassets project was also mentioned, but I'm not sure that its failure is related to these removal: see https://bugzilla.redhat.com/show_bug.cgi?id=1899555 I cannot find these functions in https://github.com/Kronuz/pyScss code right now.
Sadly, the 4 functions are part of the stable ABI and have to be kept there. I'm only asking to remove them in the C API. The issue #88775 was complaining that the functions were removed wheareas they are part of the stable ABI.