Linux puede ejecutar binarios de otros sistemas operativos al almacenarlos en formatos diferentes y desviar la respuesta del sistema a las llamadas al sistema para emular el comportamiento de otros sistemas, como Solaris o UnixWare. Cada tarea Linux tiene una "personalidad" que puede configurarse para cambiar la forma en que el sistema trata llamadas al sistema específicas y emular fallos de otros sistemas, permitiendo ejecutar software escrito para sistemas defectuosos cuando el código fuente no está disponible.
2.
Linux soporta la carga de aplicaciones binarias de usuario desde disco. Más
interesantemente, los binarios pueden ser almacenados en formatos diferentes y
la respuesta del sistema operativo a los programas a través de las llamadas al
sistema pueden desviarla de la norma (la norma es el comportamiento de Linux)
tal como es requerido, en orden a emular los formatos encontrados en otros tipos
de UNIX (COFF, etc.) y también emular el comportamiento de las llamadas al
sistema de otros tipos (Solaris, UnixWare, etc.). Esto es para lo que son los
dominios de ejecución y los formatos binarios.
Cada tarea Linux tiene una personalidad almacenada en su ##task_struct## (##p-
>personality##). Las personalidades actualmente existentes (en el núcleo oficial o
en el parche añadido) incluyen soporte para FreeBSD, Solaris, UnixWare,
OpenServer y algunos otros sistemas operativos populares. El valor de ##current-
>personality## es dividido en dos partes:
~1) tres bytes altos - emulación de fallos: ##STICKY_TIMEOUTS##,
##WHOLE_SECONDS##, etc.
~1) byte bajo - personalidad propia, un número único.
Cambiando la personalidad, podemos cambiar la forma en la que el sistema
operativo trata ciertas llamadas al sistema, por ejemplo añadiendo una
##STICKY_TIMEOUT## a ##current->personality## hacemos que la llamada al
sistema select (2) preserve el valor del último argumento (timeout) en vez de
almacenar el tiempo no dormido. Algunos programas defectuosos confían en
sistemas operativos defectuosos (no Linux) y por lo tanto suministra una forma
para emular fallos en casos donde el código fuente no está disponible y por lo
tanto los fallos no pueden ser arreglados.