¿Son intercambiables diferentes núcleos Linux / Unix?

14

¿Puedo tomar un kernel de Linux y usarlo con, por ejemplo, FreeBSD y viceversa (kernel de FreeBSD en, por ejemplo, un Debian)? ¿Hay una respuesta universal? ¿Cuáles son las limitaciones? ¿Cuáles son las obstrucciones?

RonJohn
fuente
55
No absolutamente no. Un buen ejercicio sería probarlo y ver cómo se rompe. Ni siquiera puede reemplazar un kernel de Linux con un kernel de Linux mucho más antiguo de manera confiable. Sin embargo, reemplazar las herramientas de usuario es definitivamente factible (si se vuelve a compilar).
Kusalananda
@Kusalananda con respecto al reemplazo de herramientas de usuario, pasar de BSD a Linux puede ser doloroso: algunas herramientas BSD son bastante difíciles de construir en sistemas que no son BSD ... He encontrado algunas herramientas a lo largo de los años que me hubiera gustado portar. , pero resultó no ser trivial: - /.
Stephen Kitt
1
@StephenKitt Lo contrario también es cierto :-) Especialmente cuando el software hace suposiciones acerca de poder acceder /procu otras campanas y silbatos específicos de Linux.
Kusalananda
Lo que puede hacer es tomar un kernel x86_64 (linux) e instalarlo a la fuerza en una distribución i386 de 32 bits (suponiendo una CPU Intel de 64 bits y soporte para binarios de 32 bits compilados). Esto es bastante conocido, pero no inmediatamente obvio ...
Radovan Garabík

Respuestas:

39

No, los núcleos de diferentes implementaciones de sistemas operativos de estilo Unix no son intercambiables, en particular porque todos presentan interfaces diferentes al resto del sistema (espacio de usuario): sus llamadas al sistema (incluidos los ioctldetalles), los diversos sistemas de archivos virtuales que utilizan. ..

Lo que es intercambiable hasta cierto punto, a nivel fuente, es la combinación del núcleo y la biblioteca C, o más bien, las API de nivel de usuario que el núcleo y las bibliotecas exponen (esencialmente, la vista en la capa descrita por POSIX, sin considerando si en realidad es POSIX). Ejemplos de esto incluyen Debian GNU / kFreeBSD , que construye un sistema Debian sobre un núcleo FreeBSD, y Debian GNU / Hurd , que construye un sistema Debian sobre Hurd.

Esto no está en el nivel de intercambiabilidad del kernel, pero ha habido intentos de estandarizar una interfaz binaria de aplicación común, para permitir que los binarios se usen en varios sistemas sin necesidad de recompilación. Un ejemplo es el Estándar de compatibilidad binaria de Intel , que permite que los binarios que se ajustan a él se ejecuten en cualquier sistema Unix que lo implemente, incluidas las versiones anteriores de Linux con la capa iBCS 2. Usé esto a fines de los 90 para ejecutar WordPerfect en Linux.

Vea también Cómo construir un chroot de FreeBSD dentro de Linux .

Stephen Kitt
fuente
1
Algunas personas tienen opiniones bastante firmes sobre lo importante que es mantener el núcleo y las API de usuario sincronizadas :)
tonysdg
44
De hecho @tonysdg, y créeme, sé todo sobre eso : - /.
Stephen Kitt
@tonysdg Me sale una página que no se encuentra en su enlace. (¿A menos que sea una broma que me estoy perdiendo?)
mbrig
1
@mbrig: Hasta ayer, estaba allí; aquí hay una versión archivada: web.archive.org/web/20171102142621/http://…
tonysdg
@StephenKitt: Ouch :( ¡Lo siento! ¡Pero felicitaciones importantes por tener incluso el código en el núcleo para empezar!
tonysdg
4

Algunos núcleos tienen compatibilidad binaria que le permite mezclar programas de espacio de usuario con diferentes ABI (p. Ej., Freebsd puede trabajar con binarios linux hasta cierto punto); sin embargo, los binarios principales (p. Ej., El programa init, el cargador de módulos, las herramientas de configuración del controlador del dispositivo, la biblioteca C , las herramientas necesarias para configurar los sistemas de archivos ...) en la práctica tendrán demasiada necesidad de saber acerca de las interfaces de nivel de kernel para arrancar un sistema con un kernel extraño con éxito.

Además, los sistemas de archivos tendrían que ser compatibles. Además, las opciones de compatibilidad binaria tendrían que compilarse "duro" en el núcleo; cualquier cosa implementada como un módulo del núcleo desearía fallar porque no podría ejecutar el cargador de módulos.

Como se mencionó, los entornos de usuario tienden a ser algo portátiles si está dispuesto a recompilar, como los sistemas debian basados ​​en freebsd, o configurar el sistema netbsd pkgsrc en linux (¡absolutamente no trivial, pero compatible y posible!).

rackandboneman
fuente