I would like to start a discussion about identifying a guideline for
answering questions like:

1. When will Beam support a new Python version (say, Python 3.8)?
2. When will Beam drop support for an old Python version (say, Python 3.5)?
3. How many Python versions should we aim to support concurrently
(investigate issues, have continuous integration tests)?
4. What comes first: adding support for a new version (3.8) or deprecating
older one (3.5)? This may affect the max load our test infrastructure needs
to sustain.

We are already getting requests for supporting Python 3.8 and there were
some good reasons[1] to drop support for Python 3.5 (at least, early
versions of 3.5). Answering these questions would help set expectations in
Beam user community, Beam dev community, and  may help us establish
resource requirements for test infrastructure and plan efforts.

PEP-0602 [2] establishes a yearly release cycle for Python versions
starting from 3.9. Each release is a long-term support release and is
supported for 5 years: first 1.5 years allow for general bug fix support,
remaining 3.5 years have security fix support.

At every point, there may be up to 5 Python minor versions that did not yet
reach EOL, see "Release overlap with 12 month diagram" [3]. We can try to
support all of them, but that may come at a cost of velocity: we will have
more tests to maintain, and we will have to develop Beam against a lower
version for a longer period. Supporting less versions will have
implications for user experience. It also may be difficult to ensure
support of the most recent version early, since our  dependencies (e.g.
picklers) may not be supporting them yet.

Currently we support 4 Python versions (2.7, 3.5, 3.6, 3.7).

Is 4 versions a sweet spot? Too much? Too little? What do you think?

[1] https://github.com/apache/beam/pull/10821#issuecomment-590167711
[2] https://www.python.org/dev/peps/pep-0602/
[3] https://www.python.org/dev/peps/pep-0602/#id17

Reply via email to