Subject: PG20 Minimum Dependency Thread

From: Jacob Champion <[email-masked]>
Date: Thu, 18 Jun 2026 13:01:47 -0700

...because I don't see one yet, and upcoming things like the Python
test port are going to need clarity in advance, and I wanna stir up
trouble right before I go eat lunch.

= Background =

The most recent (mailing list) discussions I am aware of are at

[1] https://postgr.es/m/16098.1745079444%40sss.pgh.pa.us (Python)
[2] https://postgr.es/m/42e13eb0-862a-441e-8d84-4f0fd5f6def0%40eisentraut.org
(Meson)

The discussion in [2] ended with a growing consensus that we need _a_
policy, and Andres proposed a framework of one, but I don't think one
was actually chosen. (If I missed that somewhere on the list, or at an
in-person meeting, I apologize. Most of this email is moot if that's
the case.)

The partial list of dependency versions for PG19 is here, and if you
know what's pinning one of the blank rows, please consider filling it
in:

     https://wiki.postgresql.org/wiki/Minimum_Dependency_Versions

But I intend this thread to be about PG20, which will release next
year (2027) and will presumably be supported until 2032.

= My Votes =

For PG20, I want to drop support for RHEL 8 (and prior -- we still
have CentOS 7 machines testing HEAD in the buildfarm).

For me, the most important reason is OpenSSL, because upstream has
already reached 4.0 and we still can't drop code written for 1.1.1. An
additional reason is Python 3.6, which was EOL in 2021; I'd like to
avoid pinning that for another six(!) years. It looks like ninja/meson
get a boost too.

RHEL 8 users in the paid Maintenance Support window (ending 2029) will
still be able to use PG19 for its entire lifetime. And the maintenance
window for RHEL 7 is long gone. People can update their machines if
they want shiny new features.

Cherry-picking from Tom's email on the topic in [2], which may not be
representative of his opinion today:

> Maybe we could compromise on
>
>   If the expected PG major version release date is more than N years
>   after the end of full support for an LTS distribution, that OS
>   version does not need to be supported.
>
> Defining it relative to "full support" also reduces questions about
> whether extended support means the same thing to every LTS vendor.
>
> If we set N=2 then we could drop RHEL8 support in PG 19; if we
> set N=3 then it'd be PG 20 (measuring from end of full support
> in May 2024).  I'd be okay with either outcome.

I propose that we adopt N=2. I think we should have stopped supporting
RHEL8 this year (our yum repos won't be shipping PG19 builds for
RHEL8). But I won't complain if consensus forms on N=3; I think it's
just important that we arrive at some agreement on getting rid of RHEL
8.

--Jacob

---

From: Daniel Gustafsson <[email-masked]>
Date: Thu, 18 Jun 2026 23:05:53 +0200

> On 18 Jun 2026, at 22:01, Jacob Champion <[email-masked]> wrote:

> already reached 4.0 and we still can't drop code written for 1.1.1.

The entire OpenSSL 3.x line will be down to just 3.5 LTS by the time we ship
v20.

One complicating factor when it comes to OpenSSL is that we need the 1.1.1 API
support in order to keep LibreSSL supported.  I have a patch almost done for
separating the two such that we can move them independently of each other, but
summer vacation and other $life stuff delayed it.  I'll try to get it posted
shortly so that we can start the discussion around that. 

--
Daniel Gustafsson

---

From: Tom Lane <[email-masked]>
Date: Thu, 18 Jun 2026 17:22:25 -0400

> in-person meeting, I apologize. Most of this email is moot if that's

FWIW, my impression of that thread was that we had agreed on pretty
much everything except the value of N; if there was some later meeting
that discussed it further, I wasn't there.  Concretely, Andres said:

>> I think we should have a policy roughly along these lines:
>> 1) We don't remove support for OS versions unless they block something
>> 2) We don't remove support for OS versions in minor releases
>> 3) If support for an old OS version makes something harder, it can be removed,
>>    if and only if the OS is older than $age_criteria.
>> 4) As an alternative to removing OS support via 3), somebody desiring
>>    continued support for an older OS version can instead do the work to
>>    develop an alternative to removal of support within $reasonable_timeframe

>> in May 2024).  I'd be okay with either outcome.

(hmm, I guess we didn't fill in $reasonable_timeframe, but that is
probably going to be case-by-case anyway)

> just important that we arrive at some agreement on getting rid of RHEL

It's too late to change anything for PG19, I think, so it kind of doesn't
matter today whether we set N to 2 or 3.  But I'd vote for N=3.  That
seems to match up better with LTS extended-support policies.

(I'm actually quite content with yum.pg.o cutting off support for
RHEL8 a year earlier than we stop supporting it at the source-code
level.  For one thing, we can pay attention to how much blowback
Devrim gets before we decide whether it's an okay source-code
change...)

			regards, tom lane

---

From: Jacob Champion <[email-masked]>
Date: Thu, 18 Jun 2026 14:32:23 -0700

> The entire OpenSSL 3.x line will be down to just 3.5 LTS by the time we ship

Yeah. Though RH have been apparently shipping breaking updates to
OpenSSL in RHEL 9+, so the conversation may look completely different
when we get to those EOLs.

> support in order to keep LibreSSL supported.

True -- but I think that even if your split didn't land, surrounding
the necessary code with `#ifdef LIBRESSL_VERSION_NUMBER` would be a
big maintainability upgrade compared to "all code paths must support
both OpenSSL 1.1.1 _and_ LibreSSL which is
kind-of-not-really-the-same".

--Jacob

---

From: Jacob Champion <[email-masked]>
Date: Thu, 18 Jun 2026 14:42:50 -0700

On Thu, Jun 18, 2026 at 2:22 PM Tom Lane <[email-masked]> wrote:
> that discussed it further, I wasn't there.

Cool.

> probably going to be case-by-case anyway)

Sure. The first instance, if/when it happens, would probably be a trendsetter.

> It's too late to change anything for PG19, I think,

(right -- I didn't intend to propose a retroactive change, sorry for
any confusion)

> so it kind of doesn't
> matter today whether we set N to 2 or 3.

I think it still matters for impending decisions. For example, we're
about to engineer how to backport a sliding window of Python across
the sliding window of backbranch support. Shorter windows tie our
hands less.

But I agree that if that other thread is otherwise settled, we've
effectively declared that RHEL 9 is the minimum for PG20, and that
would make me very happy.

Thanks,
--Jacob

---

From: Tom Lane <[email-masked]>
Date: Thu, 18 Jun 2026 18:26:06 -0400

> the sliding window of backbranch support. Shorter windows tie our

I dunno.  One of the points of the allegedly-agreed-to policy
framework was

>>> 2) We don't remove support for OS versions in minor releases

A strict reading of that is that a released branch can't increase
its minimum required Python version.

Now maybe we can finesse that, like "you can build PL/Python and
associated contrib modules with Python >= X, but if you want to
run these optional tests, they require Python >= Y".  Not sure
how comfortable I am with that.  I definitely don't want to get
into a situation where we require buildfarm owners to have
Python >= Y installed, because then we will not have any testing
that proves we didn't break the other part.  (So we'd need a
runtime check to skip these tests on too-old Python.)

In any case, if we do make such a decision, most likely we'd
use the same value of Y for all the active back branches.
So I think the value of N in the support policy really
only matters for future version-cutoff decisions.

			regards, tom lane

---

From: Tom Lane <[email-masked]>
Date: Thu, 18 Jun 2026 19:35:14 -0400

> runtime check to skip these tests on too-old Python.)

Granting that our pytest framework should silently give up if
Python is too old, the decision of which minimum version to target
is really kind of independent of what PL/Python does.  It becomes
a tradeoff of ease of coding versus "how many platforms do you want
this test to be able to run on?".  I have no insight on what the
coding benefits are of different Python versions, but I do have
this freshly-scraped data about how many buildfarm members are
reporting which major Python version:

      3 3.5
     39 3.6
      5 3.7
      5 3.8
     39 3.9
      6 3.10
     21 3.11
     45 3.12
     48 3.13
     12 3.14
      2 3.15

Just eyeing that, it seems like 3.9 or 3.11 would be choices that
still allow most animals to run the tests.

			regards, tom lane

---

From: "Tristan Partin" <[email-masked]>
Date: Fri, 19 Jun 2026 04:49:18 +0000

> still allow most animals to run the tests.

The latest versions of pytest require Python >= 3.10. In theory, we
could pin to an older pytest version.

For what it's worth, the latest version of Meson supports Python >=
3.7. I wonder if we should tie our Meson and pytest versions together 
such that they support the same Python version.

-- 
Tristan Partin
PostgreSQL Contributors Team
AWS (https://aws.amazon.com)

---

From: Andrew Dunstan <[email-masked]>
Date: Fri, 19 Jun 2026 09:39:20 -0400

> only matters for future version-cutoff decisions.

Buildfarm owners are going to have to opt in to pytest, in the same way 
that today they have to opt in to TAP tests, and in the same way there 
will be up front tests to check that what's installed meets the 
requirements. We could stick with X = 3.6 and make Y = 3.8.

cheers

andrew

--
Andrew Dunstan
EDB: https://www.enterprisedb.com

---

From: Jacob Champion <[email-masked]>
Date: Fri, 19 Jun 2026 11:18:51 -0700

On Thu, Jun 18, 2026 at 4:35 PM Tom Lane <[email-masked]> wrote:
> this test to be able to run on?".

Right.

> I have no insight on what the

wrasse too (Python 3.4.3, Solaris 11.3), which tests PG14-16.

In fact I want to use wrasse as a case study here...

> its minimum required Python version.

Solaris 11.3 was released in October 2015, with Python 2.6, 2.7, and
3.6. Standard support ended in 2021. So with your stricter reading of
the OS support policy, and N=3, it's lucky that we happened to drop
Python 2 support already. Otherwise, Solaris 11.3 would pin Python 2.6
support until PG17 drops off the matrix in 2028, fifteen years after
end of life.

I think that's patently unreasonable. We should either not adopt that
stricter reading, or else be a lot more proactive in pushing our
minimum dependency list forwards for every release, which is going to
feel punitive.

(Oracle themselves removed Python 2.6 support in the middle of their
11.3 support cycle. The Solaris 11.4 standard support window is now
ten years (2021-2031), and the versions of Python they support today
do not overlap at all with the Python versions they supported at 11.4
GA.)

--Jacob

---

From: Peter Eisentraut <[email-masked]>
Date: Sat, 20 Jun 2026 15:16:04 +0200

> [2] https://postgr.es/m/42e13eb0-862a-441e-8d84-4f0fd5f6def0%40eisentraut.org

Here is another relevant thread:

https://www.postgresql.org/message-id/flat/[email-masked]

This is now "ready for committer" for PG20 and would de-support RHEL 7.

Another unrelated data point is that making PL/Python thread-safe (at 
least in the way I have worked out) would require Python 3.10.

(But RHEL provides a supported way to install newer Python versions, so 
this doesn't necessarily have to mean de-supporting a given RHEL version 
altogether.  I don't have an opinion on that at this time.)

---

From: Zsolt Parragi <[email-masked]>
Date: Sun, 21 Jun 2026 03:57:45 -0400

> But RHEL provides a supported way to install newer Python versions, so
> altogether. I don't have an opinion on that at this time

That's possible on most (all?) platforms (pyenv/asdf/uv/mise/...). All
with a question mark because I have no idea which of these would work
on solaris, but some of them are pure bash scripts so those should
work. (and that ignores windows, but that also shouldn't be an issue
generally). These would be per user custom built pythons, so they
would only work with the different plpython/pytest python approach,
but would allow using the latest python for the test suite on all
platforms.

---

From: Andrew Dunstan <[email-masked]>
Date: Sun, 21 Jun 2026 09:23:38 -0400

> but would allow using the latest python for the test suite on all

I think the idea is that we should be able to build with what the distro 
itself supports.

cheers

andrew

---

From: Tom Lane <[email-masked]>
Date: Sun, 21 Jun 2026 10:02:49 -0400

> I think the idea is that we should be able to build with what the distro 

Quite honestly, if we demand that buildfarm owners install some
version of python that their platform doesn't package, they will
simply not enable pytest testing.  Care and feeding of a BF
animal is already a nontrivial investment of effort.  I'm especially
not believing that people will install two different python versions
in support of this.

			regards, tom lane

---

From: Jacob Champion <[email-masked]>
Date: Mon, 22 Jun 2026 13:50:37 -0700

On Sun, Jun 21, 2026 at 7:03 AM Tom Lane <[email-masked]> wrote:
> version of python that their platform doesn't package

I know you're responding to a bunch of people arguing different
things, but you and I are in agreement that when it comes to the
*core* testing framework, an out-of-distro Python installation
requirement is not what we should be targeting for "supported
platforms". And I don't think we're going to need that.

> I'm especially

I have a much harder time agreeing with this. The end user experience
we're going for is

    $ sudo dnf install python3.12-pytest
    $ meson configure -DPYTEST=pytest-3.12
    $ ninja reconfigure
    ...
    pytest                   : /usr/bin/pytest-3.12 7.4.2
    ...
    plpython                 : YES 3.9

That's not a burden. I doubt we'd be able to achieve that right away
with all of the PG15 supported platforms, but it's hard to believe we
couldn't get there eventually. (The above is from Rocky 9.)

--Jacob

---

From: Jacob Champion <[email-masked]>
Date: Wed, 8 Jul 2026 10:29:45 -0700

> support until PG17 drops off the matrix in 2028, fifteen years after

I pulled some data from the endoflife.date project [1] (which I
haven't completely verified yet, but seems to be at least somewhat
accurate). For a presumed PG20 release on 2027-09-23, our trailing
edge of distro support might look something like below. Conclusions up
front:

OpenSSL 1.1.1 is a problem. With N=2, we'd drop SLES 12.5, which
appears to be the final non-Oracle barrier to exit. (And I think we
should just declare 1.1.1 unsupported for PG20, regardless of N, but
in any case this gives weight to my preference of N=2.)

I additionally think we should take Solaris and Oracle Linux out of
the standard classification of "LTS". People who want to pay Oracle
for extended support of out-of-date Postgres versions are free to do
so without tying our development to RHEL8-vintage (or older)
dependencies for the next seven(!) years, or forcing us to lock into
an arbitrary snapshot of the Solaris rolling releases. We already
don't support OL7 because of OpenSSL 1.0.2.

If we did that, Python 3.9 looks within reach for PG20, which seems
reasonable considering it'll already have been dead for two years. (It
looks like LTS support for a spectrum of Pythons is now the norm
rather than the exception, and we should start making decisions
accordingly.) That'd only be a roadbump for our SUSE buildfarm owners,
who'd need to install an additional package beside the base Python 3.6
in order to run Python scripts.

= LTS Distros (N=3) =

Amazon Linux 2023 (End of Service 2027, End of Life 2029)
- Python 3.9 to 3.14+
- OpenSSL 3.0
Debian 12 Bookworm (EoS 2026, EoL 2028)
- Python 3.11
- OpenSSL 3.0
Oracle Linux 7 (EoS 2024-12, EoL 2028)
- Python 3.6 to 3.8
- OpenSSL 1.0.2 (!!)
RHEL/Rocky/Alma/CentOS Stream 9 (EoS 2027, EoL 2032/2035)
- Python 3.9 to 3.12+
- OpenSSL 3.0 (3.2? 3.5?)
SLES 12.5 (EoS 2024-10, EoL 2027)
- Python 3.4 to 3.6
- OpenSSL 1.1.1 (!)
Solaris 11.4 (EoS 2031, EoL 2037)
- Python 3.9 to 3.11 (rolling?)
- OpenSSL 3.0 (3.5 planned?)
Ubuntu 22.04 Jammy (EoS 2024-09, EoL 2027/2032)
- Python 3.10 to 3.11
- OpenSSL 3.0
Windows 11 24H2 Enterprise (EoS 2027, EoL 2029/2034)
Windows Server 2022 (EoS 2026, EoL 2031)

= LTS Distros (N=2) =

Only a few change:

Oracle Linux 8 (EoS 2029, EoL 2032)
- Python 3.8 to 3.12+
- OpenSSL 1.1.1 (!)
SLES 15.6 (EoS 2025-12, EoL 2028)
- Python 3.6 to 3.12+
- OpenSSL 3.1
Ubuntu 24.04 Noble (EoS 2029, EoL 2036)
- Python 3.12
- OpenSSL 3.0

= Non-LTS Distros (N=0?) =

I don't think this was explicitly discussed, but hopefully no one
feels the need to guarantee support for non-LTS distributions that go
EoL before we even release. (I.e. N is effectively zero for those
distros.) But buildfarm operators still need some baseline, and here's
what I think they could be for PG20:

AIX 7.2 TL5 (EoL TBD?)
- Python 3.10+ (?)
- OpenSSL 3.0
Alpine 3.23 (EoL 2027-11)
- Python 3.12
- OpenSSL 3.5
Fedora 45 (EoL 2027-11)
- probably Python 3.15
- probably OpenSSL 4.0
FreeBSD 14.x (EoL 2028)
- Python 3.11+
- OpenSSL 3.0
macOS 15 (Sequoia) (EoL 2027-09)
NetBSD 10.x (EoL TBD)
- Python 3.11 to 3.14
- OpenSSL 3.0
OpenBSD 8.0 (EoL TBD)
- Python 3.11 to 3.14
- LibreSSL 4.4
OpenIndiana Hipster 2027.x (EoL TBD)
- probably Python 3.14+
- probably OpenSSL 4.0
OpenSUSE Leap 16.0 (EoL 2027-10)
- Python 3.13
- OpenSSL 3.5

Thanks,
--Jacob

[1] https://github.com/endoflife-date/endoflife.date

---

From: Tom Lane <[email-masked]>
Date: Wed, 08 Jul 2026 14:34:52 -0400

> - OpenSSL 3.0 (3.2? 3.5?)

As far as that goes: my RHEL9 machine, with a perfectly vanilla
install, has

$ rpm -q python3
python3-3.9.25-7.el9_8.x86_64
$ rpm -q openssl
openssl-3.5.5-4.el9_8.x86_64

So in the Red Hat universe I think we could safely expect a minimum
of OpenSSL 3.5.  But that doesn't matter much given that your list
shows other LTS distros still on 3.0.

			regards, tom lane

---

From: Jacob Champion <[email-masked]>
Date: Wed, 8 Jul 2026 11:51:06 -0700

On Wed, Jul 8, 2026 at 11:34 AM Tom Lane <[email-masked]> wrote:
> of OpenSSL 3.5.

Yeah (and I think their decision to upgrade to 3.5 caused major
ripples recently).

> But that doesn't matter much given that your list

Right. I think 3.0 would be a reasonable floor for PG20, honestly. I'm
a little concerned about how long the Deb-alikes are going to end up
pinning it, but... one step at a time.

--Jacob

---

From: Michael Paquier <[email-masked]>
Date: Thu, 9 Jul 2026 14:35:28 +0900

> pinning it, but... one step at a time.

That would mean to drop OpenSSL 1.1.1, as there is nothing in-between
up to 3.0.0.  That feels OK to drop for PG20, even if support for 3.0
will end in a few months, as of September 2026:
https://openssl-library.org/roadmap/
--
Michael