¿El binario más antiguo que funciona en Linux?

34

En una discusión sobre la compatibilidad con versiones anteriores en el kernel de Linux y las ABI de GUI , Alan Cox señala que " mi kernel 3.6rc seguirá ejecutando un binario Rogue construido en 1992. X es compatible con aplicaciones mucho más antiguas que Linux " .

Entonces, ¿cuán compatibles son las interfaces binarias de la aplicación Linux ?

¿Cuál es el ejecutable binario más antiguo, realmente escrito y compilado hace años, que aún se ejecutará en una distribución moderna de Linux de propósito general?

Estoy seguro de que todas esas palabras están sujetas a interpretación. Mi idea principal es que no es justo ejecutarlo a través de un emulador o una máquina virtual especializada o un traductor binario, pero algunas de estas cosas probablemente están integradas en algunas distribuciones modernas, y aprender sobre eso es parte de la diversión aquí.

También son interesantes las variaciones por arquitectura de hardware, formato de archivo ejecutable , idioma y las principales dependencias de carga dinámica de la biblioteca.

Tenga en cuenta que cuando las reglas se relajan, aquí hay un ejemplo de ir más atrás. La página web de 2002 Ejecutando ejecutables a.out en Red Hat Linux moderno habla sobre el uso de ejecutables de formato a.out en formato pre-ELF de Linux muy antiguos después de hacer modprobe binfmt_aout y obtener, /lib/ld.soy de libc.so.4 nuevo es de interés periférico para esta pregunta, pero ilustra el tipo de cosas que puede estar involucrado al cavar más atrás.

Actualización para sus fanáticos de BSD, es genial ver que iBCS2 era compatible con las aplicaciones antiguas de Xenix (como zork / dungeon-2.5.6 de 1990) y las aplicaciones SCO OpenServer 5.0.x tan recientemente como NetBSD 4.0.1 (de 2008): iBCS2 & NetBSD | Diversión con virtualización . Pero lo mismo parece roto en NetBSD 5.0.x.

Actualización 2 : Un año después, incluso después de obtener una insignia de "Anunciador" para esta pregunta, todavía estoy buscando una respuesta. Y para aclarar, dado que esto se trata de API, debería ser un binario "real" (longitud distinta de cero), que todavía al menos funciona principalmente en la forma original.

nealmcb
fuente
66
IBCS debería permitirle ejecutar archivos binarios que son unos años más antiguos que Linux.
Gilles 'SO- deja de ser malvado'
Me sorprendió no ver una etiqueta "ABI" y aún no podía crearla. Agregue eso si cree que tiene sentido.
nealmcb
@Gilles Parece que iBCS está bastante desactualizado. Por ejemplo, fue reemplazado por "Linux ABI" hace una década ( Linux ABI- Usando otros binarios de Unix en Linux ) y la versión más reciente de linux-abi parece ser de 2002 para 2.4.18: kernel.org/pub/linux /kernel/people/hch/linux-abi/v2.4
nealmcb
1
Un binario de Zork de 1981 se ejecuta en el VM / 370 de IBM y, por lo tanto, presumiblemente su z / VM actual: Zork - Computer History Wiki . Y un binario de 1978 de Zork se ejecuta en RT-11 si puedes encontrar eso ...
nealmcb
3
+1 También leí esta cita la semana pasada y me pregunté si aparecería aquí.
Michael

Respuestas:

11

Creo que / bin / true tiene que ser el trabajo más antiguo ...

Bueno, ¿puedes llamar binario a un archivo de cero bytes?

touch /tmp/old_true
chmod 755 /tmp/old_true
/tmp/old_true
echo $?
Jeremy J Starcher
fuente
1
Linda. ¿Sabe si / bin / true se ha distribuido como un archivo de longitud cero y, en caso afirmativo, cuándo y dónde? Para sonrisas, vea Solaris / bin / true - Foros de
TDWTF
3
@nealmcb: hubo un programa de 0 bytes llamado go.comtanto para CP / M como para DOS que volvería a ejecutar el último archivo COM cargado. Entonces, incluso se vendió. Entonces, de hecho, es anterior a Linux. Simplemente cambió lo que hizo cuando saltó la plataforma. ¡Habla sobre compatibilidad con versiones anteriores! Tenemos un programa CP / M, DOS y * nix ejecutándose todos a la vez.
Jeremy J Starcher
Qué comportamiento más extraño: ejecute el último archivo COM ... De todos modos, todavía estoy buscando un binario "real" (longitud distinta de cero), que al menos funciona principalmente en la forma original.
nealmcb
Curiosamente, esto funciona en un shell POSIX y csh, pero falla en zsh:zsh: exec format error
Marco
Solo para aclarar, aunque me encanta esta discusión paralela, no considero que sea una respuesta válida, ya que no fue "realmente escrita y compilada hace años". Estoy preguntando sobre la compatibilidad ABI.
nealmcb
2

Entonces, ¿hasta qué punto son compatibles con las interfaces binarias de aplicaciones de Linux?

Puede consultar el informe de análisis de la ABI del kernel de Linux aquí (versiones 2.6.36-4.4.5):

ingrese la descripción de la imagen aquí

El mismo informe que puede encontrar para varias bibliotecas base de Linux en esta página (Glibc, Qt, El Cairo, ...). La compatibilidad binaria hacia atrás se estima para cada versión en porcentajes, por lo que puede llegar a una conclusión sobre la compatibilidad global ABI para cada biblioteca:

ingrese la descripción de la imagen aquí

Puede encontrar muchos más informes sobre aproximadamente 700 bibliotecas de Linux en upstream.rosalinux.ru . Este recurso ya no es compatible (use abi-tracker en su lugar), pero puede consultar los informes de las versiones anteriores de las bibliotecas.

linuxbuild
fuente
2
El "núcleo ABI" interno no dice nada acerca de la compatibilidad con versiones anteriores de aplicaciones binarias que se ejecutan en Linux. A lo sumo, dice algo sobre la compatibilidad con fuentes anteriores de los módulos del núcleo. Creo que existen medidas de seguridad para evitar que cargue módulos compilados para una versión de kernel diferente.
Deprimido Daniel