EVE Online начала переход с Python 2 на Python 3

EVE Online, MMO-игра, которую уже больше двадцати лет приводят как один из самых показательных примеров использования Python в промышленных масштабах. Игра работает на Stackless Python с момента запуска в 2003 году, а в последний раз рантайм серьёзно обновляли 16 лет назад, в 2010-м, тогда перешли на Stackless Python 2.7. Теперь команда объявила о начале перехода на Python 3.

Первый шаг, автоматический прогон скрипта futurize по всей кодовой базе объёмом 2,4 млн строк. За ним последует ручной разбор порядка 20 000 мест в коде, где поведение Python 2 и Python 3 расходится. В анонсе приводят характерный пример такого расхождения: выражение 1 / 2 в Python 2 возвращает 0, а в Python 3, 0.5.

О том, как команда планирует заменить сам Stackless, в анонсе не говорится. Год назад на профильной конференции EVE Online уже рассказывала о похожей задаче: как отказались от Stackless в движке Carbon для другой, более новой игры, EVE Frontier, реализовав замену с помощью собственной, теперь открытой (open source) библиотеки carbonengine/scheduler. Дата завершения миграции самой EVE Online на Python 3 не называется, известно только, что процесс начался.

Ключевые факты

  • EVE Online работает на Stackless Python с 2003 года; последний крупный апгрейд рантайма был 16 лет назад, переход на Stackless Python 2.7 в 2010-м.
  • Команда объявила о начале перехода на Python 3: первый шаг, автоматический прогон скрипта futurize по 2,4 млн строк кода.
  • Дальше, ручная проверка около 20 000 мест, где поведение Python 2 и 3 расходится (пример из анонса: 1 / 2 даёт 0 в Python 2 и 0.5 в Python 3).
  • О замене самого Stackless в анонсе не сказано; год назад на конференции команда показывала, как заменила Stackless в движке Carbon для другой игры, EVE Frontier, с помощью открытой библиотеки carbonengine/scheduler.
  • Сроков завершения миграции на Python 3 анонс не называет.

Почему это важно

EVE Online уже больше двадцати лет остаётся одним из самых заметных примеров Python в промышленной эксплуатации: игра работает на Stackless Python с момента запуска в 2003 году, а последний крупный апгрейд рантайма был 16 лет назад, переход на Stackless Python 2.7 в 2010-м. Теперь команда объявила о начале перехода на Python 3, редкий публичный кейс переноса настолько старого и большого (2,4 млн строк) продакшен-кода.

Кому это важно

Инженерам, которые сами поддерживают код на Python 2 и годами откладывают переход, а также всем, кто следит за EVE Online как за одним из самых известных долгоживущих проектов на Python.

Как это применить

Порядок действий из анонса: сначала скрипт futurize автоматически прогоняется по всей кодовой базе, 2,4 млн строк, затем вручную разбираются около 20 000 конкретных мест, где Python 2 и 3 ведут себя по-разному. Пример такого расхождения из анонса: деление 1 / 2, которое в Python 2 даёт 0, а в Python 3, 0.5.

Можно ли доверять

Источник, блог Саймона Уиллисона (Simon Willison), который ссылается на официальный анонс команды EVE Online и приводит конкретные цифры (2,4 млн строк кода, около 20 000 расхождений между версиями Python). При этом это отчёт о начале работы, а не о её завершении: сроков окончания миграции в анонсе нет.

Риски и подводные камни

Анонс не говорит, как команда планирует заменить сам Stackless для основной EVE Online, этот шаг здесь не описан. Год назад на конференции EVE Online уже показывала похожее решение для другой, более новой игры EVE Frontier: там Stackless заменили в движке Carbon с помощью открытой библиотеки carbonengine/scheduler. Переносится ли тот же путь на основную EVE Online, из анонса не следует, как и сроки завершения перехода на Python 3.