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.so
y 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.