stamatios
← Voltar ao feed
Painel de nave espacial troca cabos antigos por dutos luminosos, migração do EVE Online para Python 3
Dev & Engenharia

EVE Online começa a migração do Python 2.7 para o Python 3

resumo de ~3 min

A equipe do EVE Online anunciou o início da migração do jogo do Python 2.7 para o Python 3, dentro da iniciativa EVE Evolved. Sob cada salto de portal e batalha de frota existe muita linguagem Python, que mantém New Eden no ar há mais de duas décadas. A definição de sucesso, segundo a equipe, é que a transição passe completamente despercebida, a menos que, de vez em quando, algo rode com mais fluidez.

Uma base mais velha que parte dos jogadores

O EVE estreou em 2003 sobre o Stackless Python, variante da linguagem cujas 'tasklets' leves permitem que um único nó de servidor atenda milhares de pilotos simultaneamente. A Fenris Creations não apenas adotou o Stackless: tornou-se uma de suas maiores contribuidoras. O jogo passou ao Stackless Python 2.5 em 2007 e ao 2.7 em 2010, última troca de versão até hoje. Como o Python 2.7 chegou ao fim oficial de vida em 2020, mas continuou confiável, uma migração grande e arriscada nunca se justificou. Dezesseis anos na mesma versão, avalia a equipe, dizem muito sobre o quanto ela funcionou.

Por que Python 3, e por que agora

Ficar no Python 2, ressalva o texto, cada vez mais segura o EVE. Um motivo é desempenho: versões recentes do Python 3 trouxeram alguns dos maiores ganhos de velocidade da história da linguagem, o que abre caminho para um jogo mais rápido, embora seja cedo para dizer o que isso significará. Outro é o ecossistema: bibliotecas, depuradores e profilers modernos nascem para o Python 3, e cada ano parado no Python 2 afasta mais deles, forçando manutenção própria em vez de melhorias. A linguagem também simplificou blocos centrais: um único tipo consistente de string deixa a localização mais confiável, inteiros crescem sem limite arbitrário e o sistema de classes foi unificado. A condição é rígida: personagens, pontos de habilidade, itens de hangar e ISK de carteira foram gravados em código Python 2 e precisam ser lidos pelo Python 3 exatamente como eram.

Frontier mostrou o caminho; Tranquility exige outro ritmo

A equipe considera o destino atingível porque o EVE Frontier já roda a engine Carbon em Python 3 moderno - migração que cobriu doze versões menores de uma só vez. O Tranquility, porém, tem vinte e três anos de código e de dados reais de jogadores, e funciona 23,75 horas a cada 24. A base soma 2,4 milhões de linhas de Python, boa parte escrita segundo padrões das eras 2.3 e 2.5, sintaxe que o Python 3 se recusa a interpretar. Por isso a migração ocorre em estágios, com ferramentas da comunidade, como o Python Futurize, e trabalho dedicado às particularidades do EVE. Na etapa atual, a primeira, o código é preparado para o Python 3 seguindo no 2.7: a ferramenta Python-Future, construída sobre a maquinaria do 2to3, aplica 'fixers' que reescrevem padrões obsoletos em formas aceitas pelas duas versões. Só depois chega o trabalho difícil: cerca de 20 mil linhas que compilam nos dois intérpretes, mas se comportam de modo diferente - a divisão devolve 0 no Python 2 e 0,5 no Python 3. Como esses números podem significar dano, ISK ou coordenadas, cada linha vai exigir decisão humana, tarefa da segunda etapa.

Medindo o tamanho do problema

Cada um dos cerca de 20 mil arquivos é compilado sob intérpretes reais de Python 2.7 e Python 3, pois o compilador é a prova de que o código é lido. O primeiro levantamento trouxe alívio: 95,9% dos arquivos já compilam nas duas versões. Entre as 2,4 milhões de linhas, restam aproximadamente 3.300 bloqueantes: cerca de 1.500 comandos print no estilo antigo, uns 800 literais numéricos como 123L, quase 600 cláusulas de exceção numa sintaxe abandonada antes do próprio lançamento do jogo e 50 usos do operador <>, forma tão antiga de escrever 'diferente' que muitos desenvolvedores nunca a viram.

Impacto para o jogador

No curto prazo, nada - e essa é a intenção. No longo prazo, a equipe trata o movimento como infraestrutura para os próximos vinte anos: um intérprete mais rápido para as batalhas de frota e os hubs de mercado, ferramentas modernas que apressam a correção de bugs e uma base mais produtiva para novos desenvolvedores. As primeiras mudanças foram testadas em julho no servidor Singularity e agora vão ao Tranquility; qualquer comportamento estranho deve virar relatório de bug. O backend das missões de agente também está sendo preparado, sem mudanças perceptíveis.