Following system colour scheme Selected dark colour scheme Selected light colour scheme

Python Enhancement Proposals

PEP 602 – Jährlicher Release-Zyklus für Python

Autor:
Łukasz Langa <lukasz at python.org>
PEP-Delegate:
Brett Cannon <brett at python.org>
Discussions-To:
Discourse thread
Status:
Aktiv
Typ:
Prozess
Erstellt:
04-Jun-2019
Python-Version:
3.9
Post-History:
09-Oct-2023
Resolution:
Python-Dev thread

Inhaltsverzeichnis

Zusammenfassung

Dieses Dokument beschreibt eine Änderung im Release-Kalender von Python, beginnend mit Python 3.9. Diese Änderung beschleunigt die Release-Kadenz, sodass Feature-Versionen voraussichtlich alle zwölf Monate, im Oktober eines jeden Jahres, veröffentlicht werden.

Implementierung

Siebzehn Monate zur Entwicklung einer Feature-Version

Dieses PEP schlägt vor, dass Python 3.X.0 etwa 17 Monate lang entwickelt wird

  • Die ersten *fünf Monate* überschneiden sich mit den Beta- und Release-Candidate-Phasen von Python 3.(X-1).0 und sind daher nicht versioniert.
  • Die nächsten *sieben Monate* werden für versionierte Alpha-Releases verwendet, bei denen schrittweise neue Features hinzugefügt und Fehler behoben werden.
  • Die folgenden *drei Monate* werden für vier versionierte Beta-Releases verwendet, bei denen **keine neuen Features** mehr hinzugefügt werden können, aber immer noch Fehler behoben werden.
  • Die letzten *zwei Monate* werden für zwei Release Candidates (oder mehr, falls erforderlich) verwendet und enden mit der Veröffentlichung der endgültigen Version von Python 3.X.0.

2 Jahre voller Support, 3 weitere Jahre mit Sicherheitsupdates

Nach der Veröffentlichung von Python 3.X.0 wird die 3.X-Serie fünf Jahre lang gepflegt

  • Während der *ersten vierundzwanzig Monate* (2 Jahre) erhält sie Bugfix-Updates und volle Releases (Quellen und Installer für Windows und macOS) werden ungefähr alle zwei Monate veröffentlicht.
  • Für die nächsten *sechsunddreißig Monate* (3 Jahre) erhält sie Sicherheitsupdates, und es werden nach Bedarf nur Quellcode-Releases veröffentlicht (keine feste Kadenz).
  • Das letzte Release nur mit Quellcode wird *fünf Jahre* nach 3.X.0 veröffentlicht.

Hinweis: 2 Jahre voller Support beginnen mit Python 3.13. Python-Versionen 3.9 - 3.12 arbeiten mit einem Kalender, der 1½ Jahre vollen Support und danach weitere 3½ Jahre Sicherheitsupdates vorsieht.

Jährliche Release-Kadenz

Die Feature-Entwicklung von Python 3.(X+1).0 beginnt, sobald Python 3.X.0 Beta 1 veröffentlicht wird. Dies schafft einen zwölfmonatigen Abstand zwischen den Python-Feature-Versionen.

Beispiel

  • Entwicklung von 3.9 beginnt: Dienstag, 04.06.2019
  • 3.9.0 Alpha 1: Montag, 14.10.2019
  • 3.9.0 Alpha 2: Montag, 18.11.2019
  • 3.9.0 Alpha 3: Montag, 16.12.2019
  • 3.9.0 Alpha 4: Montag, 13.01.2020
  • 3.9.0 Alpha 5: Montag, 17.02.2020
  • 3.9.0 Alpha 6: Montag, 16.03.2020
  • 3.9.0 Alpha 7: Montag, 13.04.2020
  • 3.9.0 Beta 1: Montag, 18.05.2020 (Keine neuen Features mehr ab diesem Zeitpunkt.)
  • 3.9.0 Beta 2: Montag, 08.06.2020
  • 3.9.0 Beta 3: Montag, 29.06.2020
  • 3.9.0 Beta 4: Montag, 20.07.2020
  • 3.9.0 Candidate 1: Montag, 10.08.2020
  • 3.9.0 Candidate 2: Montag, 14.09.2020
  • 3.9.0 Final: Montag, 05.10.2020
../_images/pep-0602-example-release-calendar.png

Abbildung 1. Konsequenzen des jährlichen Release-Zyklus auf den Kalender.

Im Vergleich dazu, wenn dieses PEP abgelehnt wird und Python den aktuellen Release-Zeitplan beibehält

  • Entwicklung von 3.9 beginnt: Dienstag, 04.06.2019
  • 3.9.0 Alpha 1: Montag, 03.08.2020 (10 Monate später)
  • 3.9.0 Alpha 2: Montag, 07.09.2020
  • 3.9.0 Alpha 3: Montag, 05.10.2020
  • 3.9.0 Alpha 4: Montag, 02.11.2020
  • 3.9.0 Beta 1: Montag, 30.11.2020 (6 Monate später)
  • 3.9.0 Beta 2: Montag, 04.01.2021
  • 3.9.0 Beta 3: Montag, 01.02.2021
  • 3.9.0 Beta 4: Montag, 01.03.2021
  • 3.9.0 Candidate 1: Montag, 29.03.2021
  • 3.9.0 Candidate 2: Montag, 05.04.2021 (falls erforderlich)
  • 3.9.0 Final: Montag, 19.04.2021 (6 Monate später)

Abhängige Richtlinien

Deprecations

Die aktuelle Richtlinie für Breaking Changes geht davon aus, dass mindestens zwei Releases vergehen, bevor eine veraltete Funktion aus Python entfernt oder ein `__future__`-Verhalten standardmäßig aktiviert wird. Dies ist in PEP 387 dokumentiert.

Dieses PEP schlägt vor, diese Richtlinie von **mindestens** zwei Releases beizubehalten, bevor eine Breaking Change vorgenommen wird.

Die Amtszeit des Steering Council

Die aktuelle Formulierung in PEP 13 besagt, dass „ein neuer Rat nach jedem Feature-Release gewählt wird“. Dieses PEP schlägt vor, diese Richtlinie beizubehalten, da dies zu einem konsistenten Wahlplan führt.

Die Amtszeit des Release Managers

Die aktuelle, undokumentierte Konvention ist, dass ein einzelner Release Manager zwei Feature-Releases von Python betreut. Dieses PEP schlägt vor, diese Richtlinie beizubehalten und die Amtszeit mit Zustimmung des Steering Council und des Cabal of Release Managers auf weitere Releases auszudehnen.

Insbesondere, da dieses PEP vom aktiven Release Manager verfasst wurde und seine Wirkung die Amtszeit des Release Managers verkürzen würde, ist der Autor bereit, die Veröffentlichung einer dritten Feature-Reihe zu übernehmen, um die Störung auszugleichen.

Begründung und Ziele

Diese Änderung bietet folgende Vorteile

  • macht Releases kleiner: Da die Verdopplung der Kadenz unsere verfügbaren Entwicklungsressourcen nicht verdoppelt, werden aufeinanderfolgende Releases kleiner in Bezug auf Features;
  • bringt Features und Bugfixes früher in die Hände der Benutzer;
  • schafft einen graduelleren Upgrade-Pfad für Benutzer, indem die Änderungsfläche in einzelnen Releases reduziert wird;
  • schafft einen vorhersehbaren Kalender für Releases, bei denen die finale Version immer im Oktober (also nach dem jährlichen Core Sprint) erscheint und die Beta-Phase Ende Mai beginnt (also nach den PyCon US Sprints), was besonders wichtig für Core Developer ist, die die Python-Beteiligung in ihren Kalender einplanen müssen;
  • verringert den Drang, Features kurz vor „Beta 1“ überstürzt einzubringen, da das Risiko besteht, dass sie „18 Monate lang verschoben“ werden;
  • ermöglicht die Synchronisierung des Release-Management-Zeitplans von Python mit externen Distributoren wie Fedora, die historisch sehr hilfreich waren, um Regressions frühzeitig nicht nur in Core Python, sondern auch in Drittanbieter-Bibliotheken zu finden und der Community zu helfen, die neueste Python-Version vom ersten Tag an zu unterstützen;
  • erhöht die explizite Alpha-Release-Phase, die aussagekräftige Momentaufnahmen des Fortschritts bei neuen Features liefert;
  • reduziert signifikant die implizite „Alpha 0“-Release-Phase, die für die Neuentwicklung ohnehin nur begrenzten Nutzen hat (sie überschneidet sich mit der Beta der *aktuell entwickelten*, noch nicht veröffentlichten Version).

Non-goals

Die Einführung eines jährlichen Release-Kalenders ermöglicht einen natürlichen Übergang zur Kalender-Versionierung, beispielsweise durch die Benennung von Python 3.9 als „Python 3.20“, da es im Oktober '20 veröffentlicht wird und so weiter („Python 3.23“ wäre das im Oktober '23 veröffentlichte).

Während die einfache Umstellung auf Kalender-Versionierung als Vorteil eines jährlichen Release-Zyklus betrachtet werden kann, befürwortet dieses PEP keine Änderung der Art und Weise, wie Python versioniert wird, oder spricht sich dagegen aus. Sollte der jährliche Release-Zyklus angenommen werden, wird die Frage der Versionierung in einem separaten PEP behandelt.

Nicht-Risiken

Diese Änderung verkürzt nicht den aktuell dokumentierten Support-Kalender für ein Python-Release, sowohl in Bezug auf Bugfix-Releases als auch auf Sicherheitsupdates.

Diese Änderung beschleunigt nicht die Entwicklungsgeschwindigkeit. Python wird nicht schneller inkompatibel oder entwickelt schneller neue Features. Es werden lediglich die Features schrittweiser veröffentlicht, sobald sie entwickelt werden.

Folglich ermöglicht diese Änderung zwar, dass Benutzer viel schneller upgraden können, zwingt sie aber nicht dazu. Wenn sie beispielsweise alle zwei Releases upgraden, wird ihre Erfahrung mit Python der aktuellen Situation ähneln.

Risiken

Python-Redistribution

Dies erfordert Änderungen daran, wie Integratoren, wie z.B. Linux-Distributionen, Python in ihren Systemen veröffentlichen.

Die Testmatrix

Dies erhöht letztendlich die Testmatrix für Bibliotheks- und Anwendungsmaintainer, die alle aktiv unterstützten Python-Versionen mit ein bis zwei zusätzlichen testen möchten.

../_images/pep-0602-overlapping-support-matrix.png

Abbildung 2. Testmatrix im 18-Monats-Rythmus vs. im 12-Monats-Rythmus

Die Phase der „erweiterten Bugfix-Unterstützung nach Ermessen des Release Managers“ des aktuellen Release-Zyklus ist nicht kodifiziert. Tatsächlich besagt PEP 101 derzeit, dass nach der Veröffentlichung von Python 3.(X+1).0 nur noch ein letztes Bugfix-Release für Python 3.X.0 durchgeführt wird. In der Praxis überschnitten sich jedoch mindestens die letzten vier Versionen von Python 3 für etwa sechs Monate mit stabilen Releases der nächsten Version. Abbildung 2 enthält diese Informationen, um zu zeigen, dass die Überschneidung zwischen stabilen Versionen mit der 12-monatigen Release-Kadenz nichts Neues sein wird.

Andere Richtlinien können von der Release-Kadenz abhängen

Obwohl identifizierte abhängige Richtlinien in einem früheren Abschnitt behandelt wurden, ist es durchaus möglich, dass es andere Bereiche gibt, die implizit vom Timing der Python-Releases abhängen.

Abgelehnte Ideen

Beibehalten der aktuellen 18-monatigen Release-Kadenz

Dies ist sowohl für Core Developer als auch für Endbenutzer unerwünscht. Aus Sicht des Core Developers

  • erschwert es die Terminplanung von Beiträgen aufgrund unregelmäßiger Veröffentlichungstermine jedes Jahr;
  • erzeugt es eine Flut von überstürzten Commits vor (und sogar nach!) Beta 1 aufgrund des Stresses, „eine Veröffentlichung zu verpassen“;
  • erzeugt es ironischerweise nach Beta 1 ein falsches Gefühl, „genug Zeit“ bis zur nächsten Veröffentlichung zu haben, Zeit, die unabhängig davon schnell vergeht;
  • verursacht es, dass bestimmte Elemente des Workflows so selten ausgeführt werden, dass sie nicht explizit dokumentiert, geschweige denn automatisiert werden.

Wichtiger noch, aus Sicht des Benutzers

  • führt es zu Releases mit vielen neuen Features, von denen einige explizit inkompatibel und andere versehentlich inkompatibel sind, was die Upgrade-Kosten jedes Mal relativ hoch macht;
  • hält es Features und inkompatible Bugfixes über ein Jahr zurück, bevor sie dem Benutzer zur Verfügung stehen; und genauer gesagt
  • macht es jede „Punkt Null“-Veröffentlichung für Benutzer besonders riskant. Obwohl wir Alphas und Betas bereitstellen und deren Testen empfehlen, ist „Punkt Null“ für viele Benutzer die erste Veröffentlichung einer bestimmten Python-Version. Je größer eine Veröffentlichung in Bezug auf Features ist, desto mehr potenzielle Probleme verbergen sich in „Punkt Null“-Releases.

Verdopplung der Release-Kadenz, um 9 Monate zwischen Feature-Releases zu erreichen

Dies wurde ursprünglich in PEP 596 vorgeschlagen und als sowohl zu unregelmäßig als auch zu kurz abgelehnt. Dies würde keine der Vorteile eines regelmäßigen Release-Kalenders bieten, aber es würde alle Entwicklungsphasen verkürzen, insbesondere die Beta- und RC-Phasen. Dies wurde als gefährlich angesehen.

Beibehalten von „4 Betas über 4 Monate und ein letzter Monat für den Release Candidate“

Obwohl dies den Release-Kalender etwas übersichtlicher machen würde, würde es externen Distributoren wie Fedora sehr schwer machen, die neueste Version von Python so schnell wie möglich zu veröffentlichen. Wir passen den Python-Kalender hier an, in der Hoffnung, dass dies Fedora in die Lage versetzen wird, die neueste Python-Version mit der neuesten Fedora-Version *während der Entwicklung beider Projekte* zu integrieren, was beide Projekte verbessert.

Verlangsamung der Releases, aber keine Einfrierung der Feature-Entwicklung mit Beta 1

Dies wird in PEP 598 beschrieben. Dieser Vorschlag beinhaltet nicht standardmäßige Konzepte wie die „inkrementelle Feature-Veröffentlichung“, was ihn schwer verständlich macht. Die dargestellten Vorteile sind unklar, während die Unbekanntheit des Schemas ein echtes Risiko von Verwirrung bei Benutzern und Integratoren birgt.

Long-Term Support Releases

Jede Version von Python ist effektiv ein Long-Term Support: Sie wird fünf Jahre lang unterstützt, wobei die ersten achtzehn Monate regelmäßige Bugfixes und Sicherheitsupdates beinhalten. Für die restliche Zeit werden Sicherheitsupdates akzeptiert und prompt veröffentlicht.

Keine erweiterte Unterstützung im Sinne von Python 2.7 ist für die Zukunft geplant.


Quelle: https://github.com/python/peps/blob/main/peps/pep-0602.rst

Zuletzt geändert: 2024-05-28 05:47:01 GMT