По ряду причин я затягиваю переход на новые версии Windows как можно дольше.
Одна из этих причин - огромное количество багов в новых версиях, другая - то что каждая новая версия больше и тормознутее.
Я долго пользовался Windows 98, когда другие уже использовали XP. Я даже пропатчил Doom 3 так что он смог запускаться на 98-й. (Исправить пришлось всего один байт, так что, похоже, его несовместимость с этой осью была искусственной).
Дальше я так же долго использовал XP. Патчил по возможности несовместимые программы, но однажды их стало слишком много. А также они стали занимать намного больше ОЗУ, а XP не видит память больше 2 гигабайт.
Теперь я использую Windows 7 x64. До сих пор получаю обновления (ESU Bypass) и буду их получать до 2023 года примерно. Дальше посмотрим.
Относительно недавно была выпущена новая версия Python 3.9, которая не совместима с Windows 7. У меня было три варианта:
Перейти на Windows 10
Оставаться на ветке Python 3.8
Сделать свой форк питона, в котором исправить несовместимость
Ну и выбрал я, конечно, третий вариант. Скачал исходники версии 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 инструкции по сборке, и есть два готовых релиза. Я не знаю, может там остались еще какие-то несовместимости, хотя, по идее, не должны, у меня пока никаких ошибок не вылезало. Но если вдруг наткнетесь, пишите багрепорт, буду очень благодарен.