EVE Online begins Python 3 migration across 2.4 million lines of code

EVE Online has been cited as a case study in large-scale Python use for over twenty years, and it has now begun moving from Python 2 to Python 3. The game has run on Stackless Python since its 2003 launch, and its last major Python upgrade came 16 years ago, when it moved to Stackless Python 2.7 in 2010.

The migration starts with an automated pass: the futurize script is being run against the game's 2.4 million lines of code. That will be followed by manual review of roughly 20,000 places in the codebase where Python 2 and Python 3 behave differently. One example given is integer division, where 1 / 2 evaluates to 0 in Python 2 but to 0.5 in Python 3.

The announcement does not say how the team plans to replace Stackless Python itself, which EVE Online has run on since launch. There is a related precedent, though: at a conference last year, the team described replacing Stackless in the Carbon engine that powers EVE Frontier, a newer game from the same team, in a talk titled "Scheduling in Carbon: Leaving Stackless Python Behind." That replacement used the carbonengine/scheduler library, which has since been open-sourced.

Key facts

  • EVE Online has run on Stackless Python since its 2003 launch, and has been cited as a Python-at-scale case study for over twenty years.
  • The last major Python upgrade came 16 years ago, moving to Stackless Python 2.7 in 2010.
  • The Python 3 migration starts with the futurize script run against 2.4 million lines of code.
  • About 20,000 places in the codebase where Python 2 and Python 3 behave differently, such as 1 / 2 returning 0 instead of 0.5, need manual review.
  • The announcement does not cover replacing Stackless Python itself, though the team already did so for EVE Frontier's Carbon engine, using the now open source carbonengine/scheduler library.

Why it matters

EVE Online is one of the most cited real-world examples of Python running at scale, a live production codebase in continuous use since 2003. How a two-decade-old, 2.4-million-line system approaches a move to Python 3 rather than a full rewrite is a concrete data point for anyone still maintaining a large legacy Python 2 codebase.

Who it affects

The immediate work falls on EVE Online's own engineering team, who have to work through the roughly 20,000 flagged spots in the code by hand after the automated futurize pass. The case is also being watched more broadly in the Python community, where EVE Online has been referenced for over two decades as a prominent example of the language running at scale in production.

How to use it

The approach described is a two-stage one that applies to any large Python 2 codebase: run an automated conversion tool, here futurize, across the whole codebase first, then manually work through the specific runtime behavior differences that automation cannot safely resolve on its own. Integer division, where 1 / 2 returns 0 in Python 2 but 0.5 in Python 3, is given as one concrete example of the kind of difference that needs a human check rather than a blind find-and-replace.

How solid is it

The account comes from a link blog post describing EVE Online's own migration announcement, and it states concrete figures directly: 2.4 million lines of code and about 20,000 flagged behavior differences. No individual is named or quoted, and the post gives no completion date for the migration itself.

Risks and caveats

No timeline is given for when the Python 3 migration will finish, and the announcement is silent on how or when the team will replace Stackless Python itself, the runtime EVE Online has depended on since 2003. Manual review of roughly 20,000 behavior-difference sites is exactly the kind of work where a missed case, such as an integer division that silently changes a result, can turn into a subtle production bug rather than a loud failure.