Todos los puertos Linux (es decir, el kernel de Linux en diferentes procesadores) usan ELF como el formato de archivo para ejecutables y bibliotecas. Un binario ELF específico está etiquetado con una arquitectura/sistema operativo único en el que se puede ejecutar (aunque algunos sistemas operativos tienen compatibilidad para ejecutar archivos binarios ELF de otros sistemas operativos).
La mayoría de los puertos admiten el formato anterior a.out. (Algunos procesadores son lo suficientemente nuevos como para que nunca haya existido ningún ejecutable para ellos.)
Algunos puertos también admiten otros formatos de archivos ejecutables; por ejemplo, el puerto PA-RISC es compatible con los ejecutables antiguos de HP-UX SOM, y los puertos μ cLinux (nonmmu) admiten su propio formato FLAT.
Linux también tiene binfmt_misc
, que permite al usuario registrar manejadores para formatos binarios arbitrarios. Algunas distribuciones aprovechan esto para poder ejecutar aplicaciones Windows, .NET o Java; en realidad todavía está lanzando un intérprete, pero es completamente transparente para el usuario.
Linux en alfa tiene soporte para carga de binarios de Intel, que se ejecutan a través de la em86
emulador.
Es posible registrar binfmt_misc
para ejecutables de otras arquitecturas, para ejecutar con qemu-user.
En teoría, se podría crear un nuevo formato, quizás registrar una nueva "arquitectura" en ELF, para binarios gordos. Luego, el cargador kernel binfmt
debería ser enseñado sobre este nuevo formato, y no querrá perderse el enlazador dinámico ld-linux.so
y toda la cadena de herramientas de compilación. Ha habido poco interés en tal característica, y hasta donde sé, nadie está trabajando en algo así.
"Algo sobre los archivos binarios de Linux": ¿qué tal pasar unos segundos más mejorando el resumen de esta pregunta? – scobi
Siempre puede editar el título/pregunta de otra persona, ¡aunque hágalo con cuidado! –
¿te refieres a universal en las distribuciones de Linux o en las distintas arquitecturas ...? – LB40