The Monumental Modernization of EVE Online: Migrating 2.4 Million Lines of Code from Python 2 to Python 3.12

In the vast, player-driven universe of EVE Online, every spaceship eventually leaves the safety of the station to brave the uncertain expanse of space. However, the latest and perhaps most perilous voyage in the game’s twenty-three-year history involves no starships, weapons, or planetary conquests. Instead, it is the entire software architecture of the MMORPG itself making the jump. Since its official commercial launch in 2003, CCP Games has powered its sprawling, single-shard virtual world using Python 2—specifically running on 2.4 million lines of legacy code atop a custom Stackless interpreter. Last year, the upstream Stackless Python project officially ceased development at version 3.8 and was archived. Faced with an aging technological foundation and modern hardware requirements, CCP Games initiated a complex, multi-year migration route targeting Python 3.12, with plans to advance further to Python 3.15.
The technical hurdles of this migration are immense. The development team must refactor thousands of lines of mission-critical math logic, including 6,500 lines of division operations that dictate the exact outcomes of player-versus-player combat. Furthermore, the game relies on over 100 gigabytes of serialized, pickled Python objects stored across databases and redis caches, representing two decades of non-player character memory, player transactions, and economic state data. Unlike single-player software where developers can take systems offline indefinitely for maintenance, EVE Online operates as a continuous, unified universe where downtime is minimized, player assets are permanently vulnerable, and in-game destruction carries irreversible consequences. To manage this extraordinary feat, CCP Games assembled a veteran engineering task force, featuring Kristinn Sigurbergsen, Director of Gameplay Engineering for EVE Frontier; Jamie Bannister, Lead Engineer overseeing the active EVE Online migration; and Thomas Dähling, Principal Programmer on the platform segment who successfully guided the spin-off title EVE Frontier through the Python 3 transition first.
The Origins of Python in EVE Online
When CCP Games began developing EVE Online in the late 1990s and early 2000s, the technology stack chosen needed to support rapid iteration during the dot-com era while offering the flexibility required to build a massive multiplayer environment. Operating out of Iceland with a comparatively small talent pool compared to major global tech hubs, CCP turned to Python to accelerate development and enable designers and junior engineers to write straightforward, sequential code. To handle the unprecedented concurrency demands of thousands of players interacting within a single star system, the developers adopted Stackless Python. Maintained as a heavily modified fork of CPython, Stackless introduced cooperative micro-threads—conceptually similar to modern Go routines—long before asynchronous programming models became standard practice in mainstream languages.
Over the subsequent two decades, this custom stack became both EVE Online’s greatest asset and its most significant technical debt. While Stackless Python allowed CCP Games to maintain a single-shard architecture capable of hosting record-breaking battles involving thousands of concurrent combatants, it also isolated the game from the broader Python ecosystem. Because the underlying interpreter was so deeply customized, the development team could not easily adopt modern third-party libraries, take advantage of pip-based package management, or leverage upstream security patches. By the time Python 2 reached its formal end-of-life in 2020, EVE Online was stranded on an architecture that lacked native support for modern operating systems, modern silicon chips like Apple Silicon, and contemporary developer tooling.
The Strategic Blueprint: Stepping Stones and Forked Paths
Recognizing the existential risk of remaining on an unmaintained runtime, CCP Games devised a rigorous, multi-phased modernization strategy. The blueprint relied heavily on lessons learned from EVE Frontier, a newer survival-focused space title sharing a foundational code lineage with EVE Online. By executing the Python 3 transition on EVE Frontier first, platform engineers like Thomas Dähling were able to identify fatal bottlenecks, memory layout corruption risks, and incompatible native C++ extensions in a lower-stakes environment.
For EVE Online, the migration strategy avoided a risky "big bang" deployment where the entire server cluster and client base would switch versions simultaneously. Instead, the team initiated a meticulous cleanup phase designated as the "legacy-to-2.7" transition. Using automated refactoring scripts and custom linters, engineers systematically updated 2.4 million lines of code to eliminate archaic idioms—such as dictionary .has_key() methods and legacy exception syntax—while maintaining backward compatibility with Python 2.7.
By systematically running static analysis and build validation pipelines, the engineering team raised the syntactical compatibility of the codebase from 94 percent to over 99.8 percent before touching the interpreter runtime itself. Once the codebase achieved structural readiness, engineers forked the repository into a dedicated "Python 3 unstable" branch. This enabled the team to run automated test suites, isolate breaking changes, and address subtle logic shifts, such as the transition from integer truncation division to floating-point division across 6,500 critical math functions.
Overcoming Serialization and Data Persistence Challenges
One of the most complex engineering hurdles in migrating EVE Online is the preservation of its legendary player-driven economy and persistent universe state. EVE Online is globally renowned for its meticulously tracked economic data, which has frequently been studied by real-world economists due to its absolute transparency. Every transaction, asset transfer, and corporate ledger entry is permanently recorded.
Beyond financial records, the game’s persistent database contains approximately 100 gigabytes of pickled Python objects. These binary blobs represent the long-term memory of non-player characters, faction agents, mission states, and localized server caches accumulated over twenty years. Because Python’s native pickle module serializes objects based on internal memory structures and class layouts that shift significantly between Python 2 and Python 3, a direct database migration was impossible.
To solve this, CCP Games engineers designed specialized translation and ingestion pipelines. The team began systematically modernizing data schemas, transitioning legacy pickled structures toward standardized, version-independent serialization formats such as Protocol Buffers and FlatBuffers—technologies already heavily utilized in EVE Online’s modern microservices and external APIs. This painstaking data decontamination process ensures that when player characters log in and interact with non-player entities, historical relationships and mission statuses survive the technical leap intact.
Implications, Future Outlook, and Industry Significance
The successful execution of EVE Online’s migration to Python 3.12—with subsequent upgrades to Python 3.15 already mapped out—marks a watershed moment for long-lived enterprise software and game development. Most massively multiplayer online games from the early 2000s have either been decommissioned, completely rewritten in lower-level compiled languages like C++ or C#, or left to languish on unsupported legacy frameworks. By systematically modernizing a 2.4-million-line Python 2 codebase without taking the game offline, CCP Games has demonstrated that even the most deeply entrenched legacy systems can be rehabilitated through disciplined project management, automated tooling, and incremental deployment strategies.
Looking forward, the completion of this migration unlocks a vast array of modern engineering capabilities for CCP Games. Developers can finally integrate modern type hinting tools, eliminate custom interpreter maintenance overhead, and seamlessly onboard new software engineers who are already fluent in modern Python standards. While the engineering team remains cautious about adopting asynchronous frameworks like asyncio due to the sheer scale of the existing synchronous code base, the removal of the Python 2 barrier positions EVE Online to potentially explore future innovations, such as free-threaded Python execution, as the broader ecosystem matures. Ultimately, just as EVE Online players rely on careful fleet coordination and meticulous logistics to survive deep-space conflicts, CCP Games has navigated its own ultimate technical trial—securing the digital universe for decades of exploration to come.







