Il binario più vecchio funziona su Linux?


34

In una discussione sulla retrocompatibilità nel kernel Linux e nelle ABI della GUI , Alan Cox osserva che "il mio kernel 3.6rc eseguirà ancora un binario Rogue creato nel 1992. X è tornato compatibile con app molto più vecchie di Linux " .

Quindi, quanto sono compatibili con le versioni precedenti le interfacce binarie delle applicazioni Linux ?

Qual è il più vecchio eseguibile binario, effettivamente scritto e compilato anni fa, che funzionerà ancora su una moderna distribuzione Linux per scopi generici?

Sono sicuro che tutte quelle parole sono soggette a interpretazione. La mia idea principale è che non è corretto eseguirlo tramite un emulatore o una macchina virtuale specializzata o un traduttore binario, ma alcune di queste cose sono probabilmente incorporate in alcune distro moderne e imparare a farlo fa parte del divertimento qui.

Anche le variazioni in base all'architettura hardware, al formato del file eseguibile , alla lingua e alle principali dipendenze dinamiche di caricamento della libreria sono interessanti.

Nota, quando le regole sono allentate, ecco un esempio di tornare indietro. La pagina Web del 2002 Running a.out eseguibili su Red Hat Linux moderno parla dell'utilizzo di eseguibili pre-ELF a.out in formato Linux molto vecchi dopo aver fatto modprobe binfmt_aout e ottenuto /lib/ld.soe libc.so.4 Ancora questo è di interesse periferico per questa domanda, ma illustra il tipo di cose che può essere coinvolto quando si scava più indietro.

Aggiornamento per i tuoi fan di BSD, è bello vedere che iBCS2 supportava le vecchie app Xenix (come zork / dungeon-2.5.6 dal 1990) e le app SCO OpenServer 5.0.x di recente come NetBSD 4.0.1 (dal 2008): iBCS2 & NetBSD | Divertimento con la virtualizzazione . Ma la stessa cosa sembra rotta in NetBSD 5.0.x.

Aggiornamento 2 : un anno dopo, dopo aver persino ottenuto un badge "Annunciatore" per questa domanda, sto ancora cercando una risposta. E per chiarire, dal momento che si tratta di API, dovrebbe essere un binario "reale" (lunghezza diversa da zero), che almeno almeno funziona nel modo originale.


6
IBCS dovrebbe consentirti di eseguire binari di qualche anno più vecchi di Linux.
Gilles 'SO- smetti di essere malvagio' il

Sono stato sorpreso di non vedere un tag "ABI" e non sono ancora riuscito a crearne uno. Quindi aggiungilo se pensi che abbia senso.
nealmcb,

@Gilles Sembra che iBCS sia piuttosto obsoleto. Ad esempio è stato sostituito da "Linux ABI" forse un decennio fa ( Linux ABI- Utilizzo di altri binari Unix su Linux ) e la versione più recente di linux-abi sembra essere del 2002 per la 2.4.18: kernel.org/pub/linux /kernel/people/hch/linux-abi/v2.4
nealmcb

1
Un binario del 1981 di Zork gira su VM / 370 di IBM e quindi presumibilmente il loro attuale z / VM: Zork - Computer History Wiki . E un binario del 1978 di Zork gira su RT-11 se riesci a trovarlo ....
nealmcb

3
+1 Ho letto questa citazione anche la scorsa settimana e mi chiedevo se sarebbe venuta qui.
Michael,

Risposte:


11

Penso che / bin / true debba essere il lavoro più vecchio ..

Bene, puoi chiamare un file a zero byte un binario?

touch /tmp/old_true
chmod 755 /tmp/old_true
/tmp/old_true
echo $?

1
Carino. Sai se / bin / true è stato distribuito come file di lunghezza zero e, in caso affermativo, quando e dove? Per i sorrisi, vedi Solaris / bin / true - Forum
TDWTF

3
@nealmcb - Esisteva un programma a 0 byte chiamato go.comsia per CP / M che per DOS che avrebbe rieseguito l'ultimo file COM caricato. Quindi, è stato persino venduto. Quindi, in effetti, precede Linux. Ha appena cambiato quello che ha fatto quando ha saltato la piattaforma. Parliamo di compatibilità con le versioni precedenti! Abbiamo un programma CP / M, DOS e * nix tutti in esecuzione contemporaneamente.
Jeremy J Starcher,

Che comportamento strano - esegui l'ultimo file COM .... Ad ogni modo, sto ancora cercando un binario "reale" (lunghezza diversa da zero), che comunque funzioni almeno nella maniera originale.
nealmcb,

interessante questo funziona in una shell POSIX e csh, ma non riesce in zsh:zsh: exec format error
Marco

Solo per chiarimenti, mentre adoro questa discussione laterale, non considero questa una risposta valida, poiché non è stata "effettivamente scritta e compilata anni fa". Sto chiedendo informazioni sulla compatibilità ABI.
nealmcb,

2

Quindi, quanto sono compatibili con le versioni precedenti le interfacce binarie delle applicazioni Linux?

Puoi consultare il rapporto di analisi per l'ABI del kernel Linux qui (versioni 2.6.36-4.4.5):

inserisci qui la descrizione dell'immagine

Lo stesso rapporto che puoi trovare per diverse librerie di base Linux in questa pagina (Glibc, Qt, cairo, ...). La compatibilità binaria all'indietro è stimata per ogni versione in percentuale, quindi è possibile trarre conclusioni sulla compatibilità ABI complessiva per ciascuna libreria:

inserisci qui la descrizione dell'immagine

Molti altri report per circa 700 librerie Linux sono disponibili su upstream.rosalinux.ru . Questa risorsa non è più supportata (utilizzare invece abi-tracker ), ma è possibile esaminare i report per le vecchie versioni delle librerie.


2
Il "kernel ABI" interno non dice nulla sulla retrocompatibilità delle applicazioni binarie in esecuzione su Linux. Al massimo, dice qualcosa sulla compatibilità con le versioni precedenti dei moduli del kernel. Penso che ci siano delle misure di sicurezza per impedirti di caricare i moduli compilati per una diversa versione del kernel.
Depresso
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.