Najstarszy plik binarny działający w systemie Linux?

34

W dyskusji na temat kompatybilności wstecznej w jądrze Linuksa i interfejsach graficznych GUI , Alan Cox zauważa, że ​​„ moje jądro 3.6rc będzie nadal uruchamiać fałszywy plik binarny zbudowany w 1992 roku. X jest z powrotem kompatybilny z aplikacjami znacznie starszymi niż Linux ”.

Więc w jaki sposób wstecznie kompatybilne są interfejsy binarne aplikacji Linux ?

Jaki jest najstarszy plik binarny, napisany i skompilowany przed laty, który nadal będzie działał na nowoczesnej standardowej dystrybucji Linuksa ogólnego przeznaczenia?

Jestem pewien, że wszystkie te słowa podlegają interpretacji. Moim głównym założeniem jest to, że uruchamianie go za pomocą emulatora lub specjalistycznej maszyny wirtualnej lub translatora binarnego jest niesprawiedliwe, ale niektóre z takich rzeczy są prawdopodobnie wbudowane w niektóre nowoczesne dystrybucje, a nauka o tym jest częścią zabawy.

Interesujące są również różnice w zależności od architektury sprzętowej, formatu pliku wykonywalnego , języka i głównych zależności dynamicznego ładowania biblioteki.

Uwaga: kiedy zasady są złagodzone, oto jeden przykład cofnięcia się. Strona 2002 web Running a.out wykonywalnych na nowoczesnych Red Hat Linux rozmów na temat korzystania naprawdę stary Linux pre-ELF-a.out formacie plików wykonywalnych po zrobieniu modprobe binfmt_aout oraz uzyskania /lib/ld.soi libc.so.4 znowu to interesujące obwodowych na to pytanie, ale ilustruje różne rzeczy, które może być zaangażowany w dalsze kopanie.

Aktualizacja dla was fanów BSD, wspaniale jest zobaczyć, że iBCS2 obsługiwał stare aplikacje Xenix (takie jak zork / dungeon-2.5.6 z 1990 r.) Oraz aplikacje SCO OpenServer 5.0.x, jak ostatnio NetBSD 4.0.1 (od 2008 r.): IBCS2 i NetBSD | Zabawa z wirtualizacją . Ale to samo wydaje się zepsute w NetBSD 5.0.x.

Aktualizacja 2 : Rok później, nawet po otrzymaniu plakietki „Spikera” na to pytanie, wciąż szukam odpowiedzi. Aby wyjaśnić, ponieważ chodzi o interfejsy API, powinien to być „prawdziwy” plik binarny (o niezerowej długości), który nadal przynajmniej w większości działa w oryginalny sposób.

nealmcb
źródło
6
IBCS powinien umożliwiać uruchamianie plików binarnych starszych o kilka lat niż Linux.
Gilles „SO- przestań być zły”
Zaskoczyło mnie, że nie widziałem tagu „ABI” i nie mogłem go jeszcze utworzyć. Dodaj więc, że jeśli uważasz, że ma to sens.
nealmcb,
@Gilles Wydaje się, że iBCS jest raczej nieaktualny. Np. Został zastąpiony przez „Linux ABI”, być może dekadę temu (Linux ABI - Korzystanie z innych plików binarnych Unixa w systemie Linux ), a najnowsza wersja linux-abi wydaje się pochodzić z 2002 roku dla wersji 2.4.18: kernel.org/pub/linux /kernel/people/hch/linux-abi/v2.4
nealmcb
1
1981 binarny Zork działa na IBM VM / 370, a więc przypuszczalnie ich prąd z / VM: Zork - Computer History Wiki . A binarny Zork z 1978 roku działa na RT-11, jeśli możesz go znaleźć ....
nealmcb
3
+1 Przeczytałem ten cytat również w zeszłym tygodniu i zastanawiałem się, czy się tu pojawi.
Michael

Odpowiedzi:

11

Myślę, że / bin / true musi być najstarszym działającym ..

Czy możesz nazwać plik zerowy bajtem?

touch /tmp/old_true
chmod 755 /tmp/old_true
/tmp/old_true
echo $?
Jeremy J Starcher
źródło
1
Uroczy. Czy wiesz, czy / bin / true został rozpowszechniony jako plik o zerowej długości, a jeśli tak, to kiedy i gdzie? Dla uśmiechów, patrz Solaris / bin / true - Fora
TDWTF
3
@nealmcb - Wywołano 0-bajtowy program go.comdla CP / M i DOS, który uruchomiłby ostatnio załadowany plik COM. Tak więc został nawet sprzedany. Tak więc w rzeczywistości wyprzedza Linuksa. Po prostu zmieniło to, co zrobiło, kiedy skoczyło z platformy. Mów o kompatybilności wstecznej! Mamy program CP / M, DOS i * nix wszystkie działające jednocześnie.
Jeremy J Starcher,
Co za dziwne zachowanie - uruchom ostatni plik COM… W każdym razie wciąż szukam „prawdziwego” pliku binarnego (o niezerowej długości), który nadal przynajmniej działa w oryginalny sposób.
nealmcb,
co ciekawe działa to w powłoce POSIX i csh, ale nie działa w zsh:zsh: exec format error
Marco
Tylko dla wyjaśnienia, chociaż uwielbiam tę boczną dyskusję, nie uważam jej za prawidłową odpowiedź, ponieważ nie była ona „napisana i skompilowana lata temu”. Pytam o kompatybilność ABI.
nealmcb
2

Więc w jaki sposób wstecznie kompatybilne są interfejsy binarne aplikacji Linux?

Możesz zobaczyć raport z analizy ABI jądra Linuksa tutaj (wersje 2.6.36-4.4.5):

wprowadź opis zdjęcia tutaj

Ten sam raport można znaleźć dla kilku bibliotek podstawowych Linux na tej stronie (Glibc, Qt, Cairo, ...). Wsteczna zgodność binarna jest szacowana dla każdego wydania w procentach, dzięki czemu można wyciągnąć wnioski na temat ogólnej kompatybilności ABI dla każdej biblioteki:

wprowadź opis zdjęcia tutaj

Znacznie więcej raportów dla około 700 bibliotek Linux można znaleźć na stronie upstream.rosalinux.ru . Ten zasób nie jest już obsługiwany ( zamiast tego użyj programu abi-tracker ), ale możesz przejrzeć raporty dotyczące starych wydań bibliotek.

linuxbuild
źródło
2
Wewnętrzne „jądro ABI” nie mówi nic o kompatybilności wstecznej aplikacji binarnych działających na systemie Linux. Co najwyżej mówi coś o kompatybilności wstecznej źródeł modułów jądra. Myślę, że istnieją zabezpieczenia zapobiegające ładowaniu modułów skompilowanych dla innej wersji jądra.
Depressed