Die Umstellung auf Python 3 beginnt!
Kapselpiloten,
EVE entwickelt sich als Teil der Initiative EVE Forever stetig weiter, und es ist an der Zeit, den Code selbst ins Rampenlicht zu rücken!
Hinter jedem Sprung durch ein Sprungtor, jedem Marktauftrag und jedem Flottenkampf in EVE Online steckt eine sehr große Menge Python. Es betreibt New Eden seit mehr als zwei Jahrzehnten und beginnt nun den Übergang zu Python 3. Für euch bedeutet das bessere Tools, um Fehler früher zu beheben, Raum für neue Features und mit der Zeit ein schnelleres EVE.
Unsere Definition von Erfolg bei dieser Migration ist einfach: Sie sollte völlig unbemerkt bleiben, abgesehen von gelegentlichen Momenten, in denen etwas reibungsloser läuft.
Viele von euch haben bereits unsere ersten Schritte auf Singularity getestet und diese Änderungen wurden heute implementiert. Dies ist erst der Anfang eines langen Weges, der vor uns liegt.
Eine Codebasis, die älter ist als einige von euch
EVE wurde 2003 veröffentlicht und basiert auf Stackless Python, einer PythonVersion, deren leichte „Tasklets“ es einem einzelnen Serverknoten ermöglichen, Tausende von Piloten gleichzeitig zu bewältigen. Fenris Creations übernahm Stackless nicht nur, sondern wurde zu einem der bedeutendsten Projektbeteiligten.
Einige von euch erinnern sich vielleicht noch an das Upgrade auf Stackless Python 2.5 im Jahr 2007 und anschließend auf Stackless Python 2.7 im Jahr 2010. Damals änderte EVE zuletzt seine Python-Version. Python 2.7 erreichte bereits 2020 offiziell sein Lebensende. Die restliche Softwarewelt entwickelte sich weiter, und eine ganze Generation von Kapselpiloten wurde geboren, ging zur Schule und begann, Fregatten zu fliegen, während EVE auf derselben Sprachversion blieb. Sie war zuverlässig genug, dass eine große, potenziell riskante Migration bis jetzt nie erforderlich war.
Sechzehn Jahre mit derselben Version sagen viel darüber aus, wie gut sie funktioniert hat. Die Carbon-Engine hat extrem geholfen, aber auch sie hat sich inzwischen weiterentwickelt!
Warum Python 3? Warum jetzt?

Die Kurzfassung: Bei Python 2 zu bleiben hält EVE zunehmend zurück, und der Umstieg auf Python 3 bedeutet für euch ein gesünderes, besser unterstütztes Spiel.
Ein Grund ist die Leistung. Aktuelle Python-3-Versionen haben einige der größten Geschwindigkeitssteigerungen in der Geschichte dieser Programmiersprache gebracht. Mit der Zeit eröffnet das die Möglichkeit für ein schnelleres EVE, auch wenn es noch zu früh ist, um genau zu sagen, was das bedeuten wird.
Ein weiterer Grund ist das Ökosystem. Moderne Bibliotheken, Debugger und Profiler sind alle für Python 3 entwickelt. Mit jedem Jahr, das wir bei Python 2 bleiben, geraten mehr davon außer Reichweite, und umso mehr müssen wir selbst instand halten, anstatt das Spiel zu verbessern. Bessere Tools ermöglichen es uns, Probleme schneller zu finden und zu beheben.
Python 3 vereinfacht viele der grundlegenden Bausteine der Programmiersprache.
Text wird über einen einzigen, einheitlichen String-Typ verarbeitet, wodurch die Lokalisierung zuverlässiger wird. Integer haben keine willkürlichen Größenbeschränkungen mehr und wachsen bei Bedarf automatisch. Selbst Pythons Klassensystem wurde vereinheitlicht, wodurch überholtes Verhalten entfernt und objektorientierter Code konsistenter wird.
Jeder Charakter, jeder Skillpunkt, jeder Besitz in jedem Hangar, jeder ISK auf jedem Konto wurde in Python-2-Code geschrieben, und all das muss unter Python 3 genau sowiedergegeben werden, wie es war.
Der Weg vor uns ist schwierig: Wir müssen eine riesige Menge an Code aktualisieren, während EVE für euch weiterläuft. Aber wir wissen, dass das Ziel erreichbar ist, denn EVE Frontier betreibt unsere Carbon-Engine bereits mit modernem Python 3, und es funktioniert.
Die Frontier-Migration umfasste zwölf kleinere Python-Versionen auf einmal, sechzehn Jahre Sprachentwicklung in einem einzigen Projekt. Tranquility verfügt über 23 Jahre angesammelten Code und, was noch wichtiger ist, über 23 Jahre echte Spielerdaten, die Geschichte der Kapselpiloten. Und es muss von 24 Stunden jeweils 23,75 Stunden weiterlaufen.
Ganz vorsichtig …
Die EVE-Codebasis besteht aus 2,4 Millionen Zeilen Python. Vieles davon entstand noch vor Python 2.7 und folgt Standards aus der Ära von 2.3 und 2.5, die Python 3 überhaupt nicht parsen kann.
Wie migriert man also 2,4 Millionen Zeilen Code?
Sehr sorgfältig und in mehreren Phasen.
Einige dieser Phasen werden von der Python-Community entwickelte Tools verwenden (z. B. Python Futurize), während andere sich stärker auf die einzigartigen Features von EVE konzentrieren.
Wenn wir wichtige Meilensteine erreichen, werden wir euch um eure Unterstützung bei Spieltests auf Singularity bitten, an denen ihr euch wie im Juli beteiligen könnt. Dabei können wir beobachten, wie sich Teile des aktualisierten Systems unter Bedingungen verhalten, die dem Tranquility-Server ähnlicher sind.
Die erste Phase, in der wir uns jetzt befinden, macht den Code für Python 3 bereit, während er noch unter Python 2.7 läuft.
Wir verwenden ein Tool namens Python-Future, das auf derselben CodeUmschreibungsmechanik (2to3) basiert, die Python selbst bereitgestellt hat, um genau diese Art von Migration zu erleichtern. Es wendet automatisierte „Fixer“ an, von denen jeder ein veraltetes Muster in eine moderne Form umschreibt, die sowohl Python 2.7 als auch Python 3 akzeptieren.
Sobald der gesamte Code unter beiden Versionen funktioniert, beginnt die wirklich harte Arbeit: der Code, der auf beiden läuft, sich aber unterschiedlich verhält.
Den Berg vermessen (und ihm beim Schrumpfen zusehen)

Woher weiß man überhaupt, wie weit man von Python 3 entfernt ist?
Wir messen es. Jede unserer ~20.000 Python-Dateien wird mit einem echten Python-2.7-Interpreter und einem echten Python-3-Interpreter kompiliert, denn der Compiler entscheidet, ob der Code syntaktisch korrekt ist.
Der erste Scan war eine angenehme Überraschung: 95,9 % der Dateien wurden bereits unter beiden Versionen kompiliert. Die problematischen Zeilen, die von Python 3 abgelehnte Syntax verwenden, beliefen sich auf etwa 3.300 von 2,4 Millionen.
Der Berg erwies sich als großer und sehr messbarer Hügel:
~ 1.500 alte Print-Anweisungen,
~ 800 „lange“ Zahlensymbole wie 123L,
~ 600 Ausnahmeklauseln in einer Syntax, die bereits vor EVE veraltet war,
50 Verwendungen von <>, einer so alten Schreibweise für „ungleich“, dass viele aktive Python-Entwickler sie noch nie gesehen haben.
Die bevorstehenden Herausforderungen

Das Parsen ist der einfache Teil.
Derselbe Scan zählt etwa 20.000 Zeilen Code, die unter beiden Versionen problemlos kompiliert werden, sich in Python 3 jedoch anders verhalten. Das klassische Beispiel ist die Division: In Python 2 ist 1 / 2 gleich 0, während das Ergebnis in Python 3 0,5 ist.
In EVE, wo diese Zahlen Schaden, ISK oder Koordinaten sein können, erfordert jede dieser Zeilen eine menschliche Entscheidung statt einer mechanischen Korrektur. Diese Arbeit ist Teil von Phase 2, weshalb Phase 1 zuerst kommt: den mechanischen Ballast beseitigen, damit sich Menschen auf die Fälle konzentrieren können, wo auch Menschen gebraucht werden.
Was das für euch bedeutet
Kurzfristig nichts – und das ist beabsichtigt. Änderungen in Phase 1 sollen unsichtbar sein. Langfristig ist dies eine der wertvollsten Grundlagen, die wir für die Zukunft von EVE schaffen können: ein schnellerer Interpreter für Flottenschlachten und Marktplätze, moderne Tools, die uns helfen, Fehler früher zu finden und zu beheben, sowie eine Codebasis, an der neue Entwickler produktiver arbeiten können, wodurch euch Features schneller erreichen. Es ist die Infrastruktur für die nächsten zwanzig Jahre von EVE Online.
Danke für eure Hilfe dabei, es zu beweisen
Nichts zu bemerken ist das Ziel, und ihr helft uns, es zu erreichen.
Ende Juli habt ihr die ersten Änderungen auf Singularity getestet. Vielen Dank an alle, die teilgenommen haben.
Jetzt spielen wir diese Änderungen auf Tranquility auf. Hier sind wir auf euch angewiesen: Tut weiterhin das, was ihr immer tut, und wenn sich etwas falsch anfühlt, lasst es uns bitte wissen, indem ihr eine Fehlermeldung einreicht.
Darüber hinaus bereiten wir das Backend für Agentenmissionen für Python 3 vor, aber ihr solltet davon nichts mitbekommen.
Dies ist nur der erste von vielen Schritten. Den mechanischen Ballast zu beseitigen, war der einfache Teil. Die eigentliche Arbeit, der Code, der Zeile für Zeile gelesen werden muss, liegt noch vor uns, und dabei werden wir euch am dringendsten brauchen.
Behaltet unsere Kanäle für zukünftige Tests im Auge. Wenn ihr euren CorporationMitgliedern schon immer sagen wolltet, dass ihr mitgeholfen habt, EVE auf Python 3 umzustellen, ist das eure Chance!
Guten Flug, egal auf welcher Python-Version ihr euch befindet.
