Как стать автором
Обновить

Подружить новый питон со старой виндой

По ряду причин я затягиваю переход на новые версии Windows как можно дольше.

Одна из этих причин - огромное количество багов в новых версиях, другая - то что каждая новая версия больше и тормознутее.

Я долго пользовался Windows 98, когда другие уже использовали XP. Я даже пропатчил Doom 3 так что он смог запускаться на 98-й. (Исправить пришлось всего один байт, так что, похоже, его несовместимость с этой осью была искусственной).

Дальше я так же долго использовал XP. Патчил по возможности несовместимые программы, но однажды их стало слишком много. А также они стали занимать намного больше ОЗУ, а XP не видит память больше 2 гигабайт.

Теперь я использую Windows 7 x64. До сих пор получаю обновления (ESU Bypass) и буду их получать до 2023 года примерно. Дальше посмотрим.

Относительно недавно была выпущена новая версия Python 3.9, которая не совместима с Windows 7. У меня было три варианта:

  1. Перейти на Windows 10

  2. Оставаться на ветке Python 3.8

  3. Сделать свой форк питона, в котором исправить несовместимость

Ну и выбрал я, конечно, третий вариант. Скачал исходники версии 3.8.6 и 3.9.0 и начал сравнивать Meld-ом.

Во-первых, поправить пришлось Tools\msi\bundle\bootstrap\PythonBootstrapperApplication.cpp

Это часть инсталлятора, которая, помимо всего прочего, определяет операционную систему, в функции ValidateOperatingSystem. Скопировал туда код из 3.8.6.

Теперь что касается работоспособности самого питона. Вот патч, который поломал совместимость с Windows 7.

В ветке 3.8 тот же самый "unsafe DLL load" был решен другим способом - заменой LoadLibraryW на LoadLibraryExW с добавлением аргумента LOADLIBRARYSEARCH_SYSTEM32:

https://github.com/python/cpython/commit/561c59777c8426fde0ef48b57cf02eddaeb2a5b8

Это именно то, чего я хочу от 3.9.

Ну а дальше все просто и банально - сделал форк, убрал ненужные ветки и тэги, внес нужные изменения (помимо этих двух файлов понадобилось поправить еще три), сбилдил и сделал релиз.

На сегодняшний день это уже второй релиз, потому что питон обновился до 3.9.1, и конечно, я внес соответствующие изменения.

Посмотреть на это вы можете здесь.

В файле Win7.rst инструкции по сборке, и есть два готовых релиза. Я не знаю, может там остались еще какие-то несовместимости, хотя, по идее, не должны, у меня пока никаких ошибок не вылезало. Но если вдруг наткнетесь, пишите багрепорт, буду очень благодарен.

Теги:
Хабы:
Данная статья не подлежит комментированию, поскольку её автор ещё не является полноправным участником сообщества. Вы сможете связаться с автором только после того, как он получит приглашение от кого-либо из участников сообщества. До этого момента его username будет скрыт псевдонимом.