EVE Online Undertakes Massive Engineering Feat to Migrate 2.4 Million Lines of Legacy Code from Python 2 to Python 3.12

For more than two decades, the sprawling, player-driven universe of EVE Online has operated under a singular, monumental technological constraint: Python 2. Since its launch in 2003 by CCP Games, the legendary massively multiplayer online role-playing game (MMORPG) has relied on a custom Stackless Python interpreter to power its intricate single-shard universe. However, as the software landscape evolved and the original Stackless interpreter reached its end-of-life—ultimately being mothballed after version 3.8—the developers faced an existential technical imperative. Today, CCP Games is executing one of the most complex, high-stakes software migrations in gaming history, transitioning the entirety of EVE Online to Python 3.12.
The undertaking is not merely a routine software update; it is an intricate deep-space navigation through millions of lines of aging logic, deep-seated runtime dependencies, and decades of accumulated digital history, all while keeping a living virtual economy and persistent universe online without interruption.
The Architectural Challenge of Stackless Python
To understand the magnitude of the migration, one must examine why EVE Online relied on Stackless Python for so long. Developed initially by CCP Games alongside creator Christian Tismer, Stackless Python removed the C call stack from the execution model, enabling microthreads (tasklets) that allowed developers to write straightforward, sequential code that executed asynchronously. This breakthrough allowed thousands of players to engage in massive, localized space battles—such as the infamous battles of B-R5RB—without bringing the server cluster to a complete halt.
Over the years, however, maintaining a heavily modified, custom Python 2.7 fork became an unsustainable burden. As modern operating systems, hardware architectures like Apple Silicon, and security standards advanced, keeping a legacy interpreter viable required dedicating valuable engineering resources entirely to interpreter maintenance rather than gameplay innovation. Furthermore, the absence of a modern standard library, type hinting frameworks, and performance optimizations left the development team isolated from the broader Python ecosystem.
The transition path was pioneered first by EVE Frontier, a newer survival-focused title sharing the core CCP technology stack, which successfully navigated the upgrade jump ahead of EVE Online. Armed with the lessons learned from EVE Frontier, principal engineers Thomas Dähling and Jamie Bannister, alongside gameplay engineering director Kristinn Sigurbergsen, initiated the current migration blueprint for the flagship MMORPG.
Chronology of the Transition: From Legacy to Python 3
The journey to Python 3.12 is structured in deliberate, highly calculated phases designed to mitigate the immense risk inherent in updating a live production system where in-game assets destroyed are permanently lost.
Phase 1: Legacy to Python 2.7 Standardization
The initial phase required scouring a 2.4-million-line code base for archaic idioms, syntax anomalies, and outdated libraries dating back to Python 2.3 and 2.5. Using automated tooling such as Futurize scripts, the engineering team systematically brought legacy code up to a modern 2.7 standard that maintained strict backwards compatibility while preparing syntax structures for Python 3 syntax validity. By the completion of this phase, syntactic compliance rose from 94 percent to an astounding 99.8 percent.
Phase 2: Addressing Mathematical and Structural Divergences
Beyond raw syntax, the migration team had to confront semantic shifts in how Python handles core operations. Most notably, the codebase contains approximately 6,500 lines involving division operations. In Python 2, integer division was the default behavior, whereas Python 3 shifts to true float division. In a simulated universe governed by precise damage calculations, shield recharges, and economic pricing algorithms, an unaddressed division change could inadvertently upend combat mechanics and economic balances across the entire galaxy.
Phase 3: The Pickle and Data Persistence Hurdle
Perhaps the most daunting technical hurdle involves data persistence. EVE Online relies heavily on serialized Python objects—colloquially known as "pickles"—to store game state, market transactions, and NPC memory structures across its server architecture and Redis databases. Over 20 years of continuous operation, this has accumulated roughly 100 gigabytes of pickled Python objects. Because standard database migration scripts cannot interpret complex Python object layouts across interpreter versions, engineers have had to design custom translation pipelines to safely unpack legacy pickles and migrate them into version-independent formats, such as Google Protocol Buffers (protobuf).
Mixed-Mode Deployment and Risk Mitigation
Unlike traditional enterprise software updates that can afford scheduled maintenance windows or temporary offline periods, EVE Online operates as a continuous, single-shard universe. Ships undocking from stations, player corporations managing trillion-isk treasuries, and massive alliance wars cannot simply be paused for a multi-day server patch.
To solve this, CCP Games is implementing a "mixed-mode" deployment strategy. Instead of a high-risk, all-or-nothing "Big Bang" release, the engineering team is building infrastructure that allows a heterogeneous cluster of approximately 200 server nodes to run a mix of legacy and Python 3 environments concurrently. By selectively upgrading individual solar systems, background services, and client modules incrementally, the team can isolate anomalies, measure performance deltas in real-time, and distribute operational risk over an extended timeline.
Industry Implications and Broader Impact
The successful migration of EVE Online carries profound implications for the broader software engineering community. Large-scale migrations of legacy enterprise applications trapped in Python 2 have historically been abandoned as "too big to fail" or rewritten entirely from scratch in alternative languages like Go or Rust.
By demonstrating that a 24-year-old, 2.4-million-line monolithic Python application can be successfully modernized to Python 3.12—with plans already underway for subsequent updates to version 3.15—CCP Games is establishing a pragmatic blueprint for technical debt remediation in long-lived software systems.
As the migration advances toward completion, EVE Online will finally unlock access to modern static typing tools, performance enhancements introduced in recent CPython releases, and a revitalized developer experience. For the thousands of pilots navigating the stars of New Eden, the transition will happen seamlessly behind the scenes—ensuring that the universe they have built, fought, and traded in for over two decades remains online, robust, and ready for the next generation of space exploration.







