Цифровые раскопки: заводим Python 1.0.1

Всем привет! Сегодня мы будем пытаться собрать Python 1.0.1 (1994 год) на современном железе при помощи современного компилятора. Даже если Вы, как Python разработчик, никогда не компилировали проект на Си, то не волнуйтесь, я проведу Вас через весь путь. Я предполагаю, что у Вас:


мои версии
Fedora 33 x64
make 4.3
gcc 10.2.1
На другом дистрибутиве и с более старыми/новыми версиями компилятора и make тоже должно работать.

Для пользователей macOS инструкция для линукс должна сработать.

если установлен windows
Вы можете скомпилировать Python и в Windows.
Для этого Вам нужен make для Windows, он есть в составе MinGW

Для начала идем на официальный сайт и скачиваем архив с исходным кодом.

Загрузка исходников


В 1994 году никакого Гитхаба еще не было в помине, поэтому скачиваем с legacy HTTP сервера :-).

Для этого переходим по ссылке и выбираем 1.0.1.

После загрузки и распаковки открываем терминал в папке с питоном.

Сборка Python


Для сборки сначала необходимо запустить скрипт configure для конфигурации, а затем собрать проект при помочь make.

configure должен отработать нормально, после него надо запустить make.

make выплевывает слишком много информации по умолчанию, поэтому рекомендую использовать флаг s:

make -s

Нам показали ошибки, предупреждения и дали подсказку, что произошел конфликт между названиями функций — getline из файла Objects/fileobject.c уже определена в stdio.h
Чтож, переименовываем! Открываем ваш любимый редактор и заменяем getline на скажем Py_getline. В этом же файле указана функция filegetline, поэтому если Вы заменили getline на Py_getline во всем файле, то эту функцию Вам надо переименовать обратно: она используется вне это файла и поэтому переименовывать ее не стоит.

После переименования функции можно снова попробовать запустить сборку командой

make -s

О, теперь ошибки нет.

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

./python

Должен открыться питоновский REPL.

В python 1.0.1 не было огромного количества привычных нам функций, нет даже help и exit.
Если Вы вдруг захотели установить древний питон, то рекомендую воспользоваться командой

make install

Ее надо запустить от суперпользователя (например с помощью команды sudo). Но!
При этом ваш прежний питон будет недоступен, в случае если он вызывался по команде python, а не например python2/3.

Что дальше?


Дальше было бы неплохо исправить предупреждения, потому что некоторых из них могут вести к некорректной работе.Я создал репозиторий на Github, в котором первый коммит это оригинальный Python 1.0.1, а в 2 изменения, которые позволяют скомпилировать Python 1.0.1 актуальным компилятором (ну т.е те изменения, о которых я рассказывал в этой статье).

Если Вы захотите исправить предупреждения или еще что-то улучшить, то милости прошу сделать Pull Request.

Ну а у меня на этом все.

Счастливого Нового года и Рождества!

UPD: Большое спасибо eumorozov, который указал, что на Гитхабе все-таки есть версия 1.0.1
Обновил свой репозиторий, теперь там есть история коммитов до 1.0.1
@nagayev
29.12.2020 21:34 UTC
Первоисточник

Комментарии

@
29.12.2020 18:20 UTC
0
НЛО прилетело и опубликовало эту надпись здесь
@nagayev
29.12.2020 18:47 UTC
0
Да, Вы правы, я не нашел сразу.
Сделал новую ветку, учел ваши пожелания.
Обновил статью.
@lusic
05.01.2021 09:43 UTC
0
До python был perl 1987 год
https://www.my-old-version.com/perl/
05.01.2021 09:44 UTC
0
Кстати да, я написал эту статью вдохновившись после прочтения статьи на Хабре о компиляции Перл 87 года.
05.01.2021 09:49 UTC
0
НЛО прилетело и опубликовало эту надпись здесь
@Age1mar
30.12.2020 06:03 UTC
+1
Спасибо! Хочу добавить, что на просторах интернета есть статьи об использовании Python 1.5 в игре Severance: Blade Of Darkness. Может кому то будет интересно почитать :)
@BubaVV
03.01.2021 14:49 UTC
+1
Где-то рядом и Micropython, который поддерживает экзотические платформы типа DOS