Самый старый двоичный файл, работающий на Linux?

34

В обсуждении обратной совместимости в ядре Linux и графическом интерфейсе пользователя Алан Кокс отмечает, что « мое ядро ​​3.6rc будет по-прежнему работать с двоичным файлом Rogue, созданным в 1992 году. X обратно совместим с приложениями, намного старше Linux ».

Итак, насколько обратно-совместимы двоичные интерфейсы приложений Linux ?

Какой самый старый двоичный исполняемый файл, написанный и скомпилированный много лет назад, будет работать на современном стандартном дистрибутиве Linux общего назначения?

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

Различия в аппаратной архитектуре, формате исполняемого файла , языке и основных зависимостях динамической загрузки библиотеки также представляют интерес.

Обратите внимание, что когда правила смягчены, вот один из примеров перехода назад. Веб-страница 2002 года « Запуск исполняемых файлов a.out в современной Red Hat Linux» рассказывает об использовании действительно старых исполняемых файлов Linux в формате a.out в формате pre-ELF после выполнения modprobe binfmt_aout и получения, /lib/ld.soи libc.so.4 опять же, это второстепенный интерес для этого вопроса, но иллюстрирует такие вещи, которые может быть вовлечено при копании дальше назад.

Обновление для вас, поклонников BSD, приятно видеть, что iBCS2 поддерживал старые приложения Xenix (например, zork / dungeon-2.5.6 от 1990 г.) и приложения SCO OpenServer 5.0.x совсем недавно, как NetBSD 4.0.1 (с 2008 г.): iBCS2 & NetBSD | Веселье с виртуализацией . Но то же самое кажется сломанным в NetBSD 5.0.x.

Обновление 2 : Год спустя, даже после получения значка «Извещатель» по этому вопросу, я все еще ищу ответ. И чтобы уточнить, поскольку речь идет об API, это должен быть «настоящий» двоичный файл (ненулевой длины), который по крайней мере в основном работает в оригинальном режиме.

nealmcb
источник
6
IBCS должен позволять вам запускать двоичные файлы, которые на несколько лет старше Linux.
Жиль "ТАК ... перестать быть злым"
Я был удивлен, что не увидел тег «ABI», и я пока не смог его создать. Поэтому добавьте это, если считаете, что это имеет смысл.
nealmcb
@ Жиль Кажется, что iBCS устарела. Например, его заменили на «Linux ABI», возможно, десять лет назад ( Linux ABI - использование других бинарных файлов Unix в Linux ), а последняя версия linux-abi, по-видимому, была выпущена в
nealmcb
1
Двоичный файл Zork 1981 года работает на IBM VM / 370 и, следовательно, предположительно на их текущей z / VM: Zork - Computer History Wiki . И бинарник Zork 1978 года работает на RT-11, если вы можете найти это ...
nealmcb
3
+1 Я прочитал эту цитату и на прошлой неделе, и подумал, не появится ли она здесь.
Майкл

Ответы:

11

Я думаю, что / bin / true должен быть самым старым из работающих ..

Ну, вы можете назвать нулевой файл двоичным файлом?

touch /tmp/old_true
chmod 755 /tmp/old_true
/tmp/old_true
echo $?
Джереми Дж. Старчер
источник
1
Милый. Вы знаете, был ли / bin / true распространен как файл нулевой длины, и если да, то когда и где? Об улыбках см. В Solaris / bin / true - Форумы
TDWTF
3
@nealmcb - была запущена 0-байтовая программа go.comдля CP / M и DOS, которая перезапустила бы последний загруженный COM-файл. Итак, это было даже продано. Так что, на самом деле, это предшествует Linux. Он просто изменил то, что сделал, когда прыгнул с платформы. Разговор о обратной совместимости! У нас есть программы на CP / M, DOS и * nix, работающие одновременно.
Джереми Дж. Старчер
Какое странное поведение - запустить последний COM-файл .... В любом случае, я все еще ищу «настоящий» двоичный файл (ненулевой длины), который по крайней мере в основном работает в оригинальном режиме.
nealmcb
Интересно, что это работает в оболочке POSIX и csh, но не работает в zsh:zsh: exec format error
Marco
Просто для пояснения, хотя мне нравится эта побочная дискуссия, я не считаю это правильным ответом, поскольку он не был «фактически написан и скомпилирован много лет назад». Я спрашиваю о совместимости ABI.
nealmcb
2

Итак, насколько обратно-совместимы двоичные интерфейсы приложений Linux?

Вы можете посмотреть отчет об анализе ABI ядра Linux здесь (версии 2.6.36-4.4.5):

введите описание изображения здесь

Тот же отчет вы можете найти для нескольких базовых библиотек Linux на этой странице (Glibc, Qt, cairo, ...). Обратная двоичная совместимость оценивается для каждого выпуска в процентах, поэтому вы можете сделать вывод об общей совместимости ABI для каждой библиотеки:

введите описание изображения здесь

Еще больше отчетов о 700 библиотеках Linux вы можете найти на сайте upstream.rosalinux.ru . Этот ресурс больше не поддерживается (используйте вместо этого abi-tracker ), но вы можете посмотреть отчеты о старых выпусках библиотек.

linuxbuild
источник
2
Внутреннее «ядро ABI» ничего не говорит о обратной совместимости бинарных приложений, работающих на Linux. Самое большее, это говорит о обратной совместимости модулей ядра. Я думаю, что существуют меры предосторожности, которые не позволяют загружать модули, скомпилированные для другой версии ядра.
ДепрессияДаниэль