EVE Online migra 2,4M de líneas a Python 3 tras 16 años

La mayor migración de Python en producción: 2,4 millones de líneas

El MMORPG espacial EVE Online —lanzado en 2003 por la islandesa CCP Games— acaba de iniciar la migración de su base de código completa, 2,4 millones de líneas de Python, desde Stackless Python 2.7 a Python 3. Es el final de una era: la última vez que EVE cambió de versión de Python fue en 2010, hace dieciséis años.

La decisión llega tarde respecto al resto de la industria: Python 2.7 llegó a su fin de soporte oficial en 2020, según recuerda el comunicado oficial publicado por CCP, y desde entonces cualquier librería moderna, debugger o profiler dejó de darle soporte. EVE sobrevivió porque el código era estable, pero cada año la deuda técnica pesaba más.

Por qué migrar ahora: rendimiento, ecosistema y herramientas

Según el anuncio de CCP, las tres razones que justifican mover 23 años de código son:

👥 ¿Quieres ir más allá de la noticia?

En nuestra comunidad discutimos las tendencias, compartimos oportunidades y nos ayudamos entre emprendedores. Sin humo, solo acción.

👥 Unirme a la comunidad
  • Rendimiento. Las versiones recientes de Python 3 trajeron algunas de las mejoras de velocidad más grandes de la historia del lenguaje. A largo plazo, eso debería traducirse en un EVE más fluido en batallas de flotas y hubs de mercado.
  • Ecosistema. Las librerías y herramientas modernas ya no soportan Python 2. Cada año que pasa, mantener el juego viejo exige parches propios en lugar de mejoras para el usuario final.
  • Calidad del código. En Python 3, el texto se gestiona con un único tipo de string (mejor localización), los enteros no tienen límite arbitrario, y el sistema de clases se unificó. Mejores herramientas significan encontrar y arreglar bugs más rápido.

Los números detrás de la mudanza

CCP no se lanzó a ciegas. Antes de tocar una línea, escaneó sus ~20.000 archivos Python con dos intérpretes reales (Python 2.7 y Python 3). El resultado fue mejor de lo esperado: 95,9% de los archivos ya compilaba bajo ambas versiones, y solo unas 3.300 líneas de 2,4 millones bloqueaban la compilación.

El desglose de esas 3.300 líneas ilustra lo viejo que es el código, según el comunicado oficial:

  • ~1.500 sentencias print al estilo antiguo.
  • ~800 literales numéricos long como 123L, notación eliminada hace más de una década.
  • ~600 cláusulas except con sintaxis deprecada antes de que EVE siquiera existiera.
  • 50 usos de <> como operador de «no igual», tan arcaico que muchos desarrolladores Python activos nunca lo han visto.

El reto mayor, sin embargo, son las ~20.000 líneas que compilan en ambas versiones pero se comportan distinto. El ejemplo clásico: en Python 2 1 / 2 devuelve 0; en Python 3 devuelve 0.5. En un juego donde esos números pueden ser daño, ISK o coordenadas, cada una necesita una decisión humana, no un fix mecánico.

La estrategia en fases: limpiar antes que pensar

El plan se ejecuta en etapas bien delimitadas:

  • Etapa 1 (en curso). Reescritura mecánica con la herramienta Python-Future (basada en el mismo motor 2to3 que el propio Python distribuye). El código se vuelve compatible con Python 2.7 y Python 3 al mismo tiempo, mientras el juego sigue corriendo en Python 2.7.
  • Etapa 2. Revisión manual línea por línea de las ~20.000 divergencias semánticas. Aquí no hay atajo: cada caso requiere un ingeniero que entienda el dominio.
  • Etapas posteriores. Sustituir Stackless como runtime, integrar el motor Carbon (ya open source) y desplegar definitivamente en Python 3.

La regla de oro es que la transición debe ser invisible para el jugador: si todo va bien, la única señal será que algunas cosas funcionan un poco más suaves.

Frontier como conejillo de Indias y Carbon como legado open source

Una de las jugadas más interesantes de CCP fue hacer la prueba en EVE Frontier, la versión más reciente de su motor lanzada como juego independiente. La migración de Frontier saltó doce versiones menores de Python de una vez y ya corre en producción sobre Python 3, según describe el comunicado.

El motor Carbon, incluyendo su scheduler que reemplaza a Stackless, es ahora open source y está disponible en GitHub (carbonengine/scheduler). Para cualquier equipo que mantenga un sistema concurrente en Python, ese repositorio vale más que cualquier libro: es la respuesta de CCP a «cómo haces 23 años de código legacy escalar sin reescribirlo todo».

El reto del 99% de uptime

Un detalle operativo suele pasar desapercibido: el servidor Tranquility de EVE debe estar activo 23,75 horas de cada 24. El 0,25% restante se usa para mantenimiento. Cualquier deploy de una migración de esta magnitud tiene que convivir con esa disponibilidad casi total, sin apagar el juego. Por eso la primera tanda de cambios se probó en el servidor de test Singularity durante julio, y solo después se subió a producción.

Qué pueden aprender las startups de una migración así

La historia de EVE no es solo sobre videojuegos: es un caso de estudio de gestión de deuda técnica a escala. Tres lecciones concretas:

  • Estabilidad y evolución no son opuestas. EVE pasó 16 años sin tocar la versión de Python porque la base era estable. No migró por moda: migró cuando el coste de quedarse quieto superó al coste de moverse.
  • Mide antes de mover. El escaneo automatizado reveló que el 95,9% del código ya era compatible. Sin esa medición, el equipo habría sobreestimado el trabajo y posiblemente retrasado la decisión un año más.
  • Usa un producto gemelo como sandbox. Frontier funcionó como piloto de la migración de Tranquility. Si tienes dos productos en la misma base de código, esta estrategia reduce drásticamente el riesgo del cambio.

Para un founder técnico, la pregunta no es si habrá que migrar frameworks, runtimes o lenguajes —es cuándo. Y la respuesta corta: cuando el ecosistema deja de mantener lo que usas, el reloj corre en tu contra.

Conclusión

EVE Online demostró que una base de código de 2,4 millones de líneas escrita hace 23 años todavía puede evolucionar sin tirar el juego abajo, siempre que se haga por etapas, con medición y con un producto hermano como campo de pruebas. Mientras CCP completa la transición a Python 3 —y abre al mundo el motor que la hace posible— deja una lección que cualquier startup con deuda técnica debería tener pegada en la pared: la mejor migración es la que empieza por medir.

Fuentes

¿te gustó o sirvió lo que leíste?, Por favor, comparte.

👥 ¿Quieres ir más allá de la noticia?

En nuestra comunidad discutimos las tendencias, compartimos oportunidades y nos ayudamos entre emprendedores. Sin humo, solo acción.

👥 Unirme a la comunidad

Daily Shot: Tu ventaja táctica

Lo que pasó en las últimas 24 horas, resumido para que tú no tengas que filtrarlo.

Suscríbete para recibir cada mañana la curaduría definitiva del ecosistema startup e inversionista. Sin ruido ni rodeos, solo la información estratégica que necesitas para avanzar:

  • Venture Capital & Inversiones: Rondas, fondos y movimientos de capital.
  • IA & Tecnología: Tendencias, Web3 y herramientas de automatización.
  • Modelos de Negocio: Actualidad en SaaS, Fintech y Cripto.
  • Propósito: Erradicar el estancamiento informativo dándote claridad desde tu primer café.

📡 El Daily Shot Startupero

Noticias del ecosistema startup en 2 minutos. Gratis, todos los días.

Share to...