Safeguard
Developer Tools•

What do Python bugfix, security and end-of-life status mean?

Python versions pass through bugfix, security and end-of-life phases. Learn what each phase covers, which versions sit where today and when to upgrade.

Safeguard Security Team
3 min read

Bugfix means a Python version still gets fixes and regular binaries. Security means only security fixes, delivered mostly as source, with no more binaries. End-of-life means support has ended and nothing more changes. Per the Python devguide, 3.14 and 3.15 are bugfix, 3.11 to 3.13 are security, and 3.10 is end-of-life.

The three phases

The Python Developer's Guide defines them this way:

  • Bugfix: the version is fully released and accepts bug fixes and security fixes. New binaries come roughly every two months.
  • Security: only security fixes are accepted and no more binaries are released. For 3.13 and later this phase starts two years after release. For earlier versions it starts 18 months after.
  • End-of-life: five years after a release, support ends and the release cycle is frozen.

Source-only releases may still appear during the security phase as needed. That detail matters if you rely on installers: a security-phase version may have no new installer to download, so your fix could mean building from source or moving to a newer minor version.

Where each version sits today

VersionStatusFirst releaseScheduled end of life
3.15bugfix2026-10-092031-10
3.14bugfix2025-10-072030-10
3.13security2024-10-072029-10
3.12security2023-10-022028-10
3.11security2022-10-242027-10
3.10end-of-lifen/a2026-10-01

The devguide marks scheduled dates as adjustable by the release managers, so treat future dates as plans.

What to do with this

Python 3.10 reached its scheduled end on 1 October 2026. If any build agent, container or developer laptop still runs it, that is your first patch item. The end-of-life definition says no further changes are allowed, so a newly found flaw in that version will not be fixed upstream.

For the rest, a reasonable policy is to run a version in bugfix or early security phase, and start moving at least a year before the scheduled end.

Where to look for old Pythons

  • Base images in Dockerfiles
  • CI matrix entries that nobody pruned
  • System Python on developer machines and build agents
  • Virtual environments created long ago and never rebuilt
  • Lambda or function runtime settings

Rebuilding a virtual environment on a new minor version is usually quick. The slow part is dependencies that have not published wheels yet, so test early.

Safeguard's dependency scanning reads your lockfiles and can flag packages with known issues across Python projects. Try a free scan at gold.safeguard.sh/scan.

Common mistakes

One mistake is assuming a security-phase version still ships installers, then waiting for a binary that will not come. Another is leaving old versions in a CI matrix long after the project dropped them, which keeps unsupported runtimes alive in your pipeline. A third is upgrading Python but not rebuilding virtual environments, so old interpreters keep running under a new label.

A good habit is to check the status table every quarter and write the next move on your calendar.

Quick check

Does a security-phase Python still get fixes?

Yes, but only security fixes, and no more binaries are released, though source-only releases can still come out.

Is Python 3.10 still supported?

The devguide lists it as end-of-life with an end date of 2026-10-01.

Sources

Last reviewed: 19 October 2026.

Never miss an update

Weekly insights on software supply chain security, delivered to your inbox.

Self-healing security runs on Safeguard.

Your first fix PR is minutes away.

No sales call required, even your agent can complete the purchase over MCP.