Para entender por que FreeBSD usa el formato a.out
, debes
saber primero un poco sobre los tres formatos dominantes actualmente
en UNIX:
El antiguo y clásico formato de objeto. Usa una corta y compacta cabecera con un número mágico en el inicio que es usado para caracterizar el formato (mira en a.out(5) para más detalles). Contiene tres segmentos cargados: .text, .data y .bss más una tabla de símbolos y una tabla de cadenas de carácteres.
El formato de objeto SVR3. La cabecera comprime una sección de tablas, de manera que puedas tener más de una sola sección .test, .data y .bss
El sucesor de COFF
, ofreciendo múltiples secciones y
valores posibles de 32 o 64 bits. Un problema importante: ELF
fue diseñado con la presunción de que solo
existiría un único ABI por arquitectura de sistema.
Esta presunción actualmente es incorrecta, incluso en el
mundo comercial (el cual tiene al menos tres ABIs: SVR4, Solaris y SCO).
FreeBSD intenta solucionar este problema de manera que provee
de una utilidad para marcar un ejecutable ELF
con
información sobre el ABI con el que es compatible. Para más información, mira el man de brandelf.
FreeBSD viene del sistema clásico y tradicionalmente ha
utilizado el formato
a.out, una tecnología probada y testeada a través
de muchas generaciones de releases de BSD. También es posible
construir y ejecutar binarios nativos ELF
(y kernels) en sistemas
FreeBSD. FreeBSD inicialmente se resistió al salto de cambiar a
ELF
como su formato por defecto. Porqué?, bien, cuando el
mundo Linux hizo su transición a ELF
no era nada fácil
abandonar el formato ejecutable a.out
debido a su inflexible
mecanismo de tablas basadas en librerías compartidas. Esto hizo
muy difícil para los fabricantes y desarrolladores la
creación de librerías compartidas. A partir del momento en
el que se ofrecieron una serie de herramientas que ofrecían la
solución al problema de las librerías compartidas, el
coste de la migración fue aceptado como necesario y la
transición se hizo.
En el caso de FreeBSD, el mecanismo de librerías compartidas
esta más basado en el estilo de SunOS, mucho más sencillo
de usar. De todas maneras, empezando con la version 3.0, FreeBSD
soportará oficialmente binarios ELF
como el formato por
defecto. Aunque pensamos que el formato ejecutable a.out
nos ha
servidor muy bién, la gente de GNU, que hacen las herramientas de
compilación que usamos, ha dejado de dar soporte para el formato
a.out
. Esto nos ha forzado a mantener dos versiones divergentes del
compilador y lincador.