EVE Online Embarks on Historic Python 3 Migration to Future-Proof Two-Decade-Old Universe

For more than twenty years, the expansive, player-driven universe of EVE Online has operated on a foundational architecture that predates modern social media, cloud computing, and contemporary web development frameworks. Since its commercial launch in 2003 by CCP Games, the iconic massively multiplayer online role-playing game (MMORPG) has relied entirely on Python 2, running across roughly 2.4 million lines of customized code. However, as the software ecosystem evolves and legacy interpreters face permanent retirement, the developers behind the legendary sci-fi sandbox have initiated an unprecedented technical overhaul. The ultimate destination for EVE Online is Python 3.12, a major leap that requires updating millions of lines of code, rewriting critical math routines that govern player combat, and safely migrating nearly a hundred gigabytes of historical data without a single moment of scheduled universe downtime.
The scale of this migration is monumental, driven by the unique design constraints of EVE Online. Operating as a single-shard universe, every player across the globe exists within the same continuous space, where cooperative economies, massive corporate logistics, and legendary player-led conflicts unfold in real-time. In EVE, destruction is permanent; a defeated starship is permanently removed from the game, and player assets hold genuine economic value. Consequently, the underlying server infrastructure must remain active and stable 24/7. Upgrading the core runtime of such an enduring, complex virtual ecosystem represents one of the most complex software engineering undertakings in the history of the gaming industry.
The Legacy of Stackless Python and the Need for Change
To understand the complexity of the current migration, one must examine the technical origins of EVE Online. When development began in the late 1990s and early 2000s, CCP Games sought a programming language that could accelerate development speeds and allow developers—and even game designers—to write sequential, readable code. Python provided this agility. To handle the immense concurrency required to simulate thousands of simultaneous ships in a single star system, the developers adopted Stackless Python, a specialized fork of CPython that introduces microthreads (tasklets) and channel-based communication.
While Stackless Python successfully powered EVE Online through two decades of unprecedented interstellar warfare and economic simulation, it eventually became a technical bottleneck. Stackless Python 3.8 reached its end of life, and the project itself was officially archived. Continuing to run a custom, heavily patched fork of an unsupported interpreter meant that CCP Games had to dedicate precious engineering resources solely to maintaining the runtime environment. Furthermore, modern development tools, standardized packaging solutions, and updated native extensions for platforms like Apple Silicon and modern Linux distributions became increasingly difficult to integrate into the aging Python 2 infrastructure.
The transition to Python 3 unlocks long-awaited modernization opportunities for the EVE development team. Beyond security patches and ongoing performance improvements built into modern CPython releases, upgrading the language empowers engineers to leverage modern type hinting, standardized asynchronous patterns, and cleaner data structures. These advancements are expected to significantly reduce maintenance overhead and improve developer onboarding times, addressing longstanding internal challenges.
A Phased Engineering Strategy and the Role of EVE Frontier
The roadmap to Python 3.12 has been carefully orchestrated to mitigate operational risk. CCP Games did not approach the EVE Online codebase blindly; instead, the team utilized a proving ground through its sister project, EVE Frontier. Frontier, which shares a heavily modified version of the same foundational technology stack and Carbon framework, acted as the vanguard, taking the initial plunge through the Python 3 transition.
Insights gained from the EVE Frontier migration provided critical lessons for Jamie Bannister, the engineer leading the EVE Online migration project, alongside gameplay engineering director Kristinn Sigurbergsson and principal platform programmer Thomas Döhling. By observing how native extensions, memory layouts, and third-party modules reacted under Python 3 in Frontier, the team established a predictable pipeline for the primary game.
The migration strategy is divided into rigorous, incremental phases. The initial phase focused on moving legacy codebases from Python 2.5 and 2.7 idioms toward syntax that is forward-compatible. Utilizing automated code refactoring tools and rigorous linting checks, the team successfully brought 99.8% of EVE’s 2.4 million code lines into syntactic compliance with Python 3 while remaining runnable on the legacy runtime during a transitional period.
The subsequent phase involves addressing subtle behavioral changes between Python versions. Most notably, the codebase contains approximately 6,500 lines involving division operations. Because Python 2 historically performed integer truncation on standard division whereas Python 3 outputs floating-point numbers, engineers must meticulously audit these calculations. In a virtual economy and combat simulator where damage outputs and resource yields dictate the outcome of multi-trillion-isk battles, ensuring mathematical consistency is paramount.
Preserving a 20-Year Virtual Economy and Memory at Rest
Perhaps the most formidable challenge of the migration does not lie within the runtime execution code, but within the persistence layer. Over the past twenty years, EVE Online has accumulated approximately 100 gigabytes of pickled Python objects stored within databases and Redis caches. These objects represent vital state data, including the long-term memory and narrative progression of non-player characters known as agents, who issue missions and track player interactions across decades.
Because raw SQL databases cannot natively interpret or convert pickled Python binary blobs from older interpreter versions, the engineering team cannot simply execute a blanket database migration script. Instead, specialized deserialization and translation pipelines are being developed to safely parse historical data structures and convert them into version-independent formats, such as Protocol Buffers, which are widely utilized across EVE’s modern microservices and APIs.
To further minimize risk, CCP Games plans to implement a mixed-mode deployment architecture. Rather than executing a high-stress, all-or-nothing "big bang" release across the cluster of roughly 200 server nodes, the team aims to selectively upgrade individual nodes and client components incrementally. This gradual rollout allows engineers to isolate anomalies, monitor server performance under live conditions, and protect the uninterrupted uptime that EVE Online’s player base expects.
Broader Implications and Industry Significance
The successful migration of EVE Online to Python 3.12 serves as a case study for long-term software preservation in the gaming industry. Few multiplayer titles survive for more than a decade, and even fewer attempt to rewrite their foundational engine languages while maintaining a live, uninterrupted service.
By bridging the gap between a 2003 codebase and modern Python standards, CCP Games is demonstrating that legacy systems do not necessarily require a complete rewrite from scratch to remain viable. As the team looks beyond the initial Python 3.12 deployment toward subsequent updates and the potential evaluation of free-threaded Python capabilities in later versions, EVE Online continues to push the boundaries of what large-scale interpreted languages can achieve in high-performance virtual environments.







