featured image

Cuando hablamos de GNU/Linux, hablamos de un sistemas operativo con núcleo monolítico creado en inspiración de MINIX, inspirado a su vez en Unix. Unix sin embargo es un sistema operativo con un micronúcleo que le confiere unas características específicas y Darwin es una de sus evoluciones mantenidas dentro de Apple, ¿sabías sus ventajas e inconvenientes?

En principio debemos concretar. GNU/Linux es un sistema operativo mientras que Linux es solo su núcleo. GNU es todo lo que rodea al núcleo y permite identificarlo como sistema operativo completo. En la misma comparativa Darwin es un sistema operativo y XNU es su núcleo.

Como nota curiosa y agregada, ¿sabías que kernel significa núcleo en finlandés (lengua madre de Linus Torvalds)? ¿Y Además que XNU significa de forma recursiva XNU Not Unix?

Tanto Darwin como XNU son open source, sin embargo todos los frameworks empleados para construir la interfaz de usuario son propietarios. Estos frameworks junto con el sistema operativo es como se conoce a macOS o anteriormente OS X. De ahí radica que PureDarwin aún teniendo la misma base que los sistemas ejecutados en Mac, no tenga el mismo aspecto.

NeXT y Darwin

Steve Jobs fue expulsado de Apple en 1985. Esto propició la evolución y desarrollo de empresas en las que Jobs se centró entonces: Pixar y NeXT. En 1997 Apple estaba en declive y decidió volver a traer a Jobs a la compañía. Apple compró NeXT y Jobs cambió los productos empleando los desarrollos hechos en NeXT.

Cabe destacar que el padre de Internet desarrolló el primer servidor web en un NeXT.

En el año 2000 Apple lanzó Darwin como un sistema operativo basado en BSD, NeXTSTEP y Mach. Este sistema operativo se ha estado empleando como base para todos los sistemas operativos desarrollados por Apple: OS X, macOS, iOS, watchOS, tvOS y iPadOS. Es mayormente compatible con POSIX y su versión Leopard fue certificada como compatible con la Especificación Única UNIX versión 3 (SUSv3).

XNU es un núcleo híbrido donde la parte a bajo nivel se realiza a través del código de Mach (micronúcleo) y la parte de alto nivel está conectada a través de servidor por el código de BSD como monolítico. Sin embargo, para realizar mantenimiento, el núcleo permite detener los servidores o reiniciarlos si es necesario. Es muy estable gracias a esta característica.

¿En qué se diferencian XNU y Linux?

Linux es un sistema monolítico 100%. No existen subdivisiones en las tareas de gestión de memoria, CPU, comunicación entre procesos, controladores de dispositivos, sistemas de archivos y llamadas al sistema.

En 1992 Andrew Tanenbaum, autor de MINIX, comenzó un debate con Linus sobre el hecho de desarrollar un sistema operativo monolítico. Tanenbaum consideraba obsoleta esa infraestructura, además de más lenta y propensa a errores que los micronúcleos.

La respuesta de Torvalds no se hizo esperar. Decía encontrar el diseño de micronúcleo superior pero solo desde un punto de vista teórico y estético. No obstante, reconoció que el principal motivo de crear Linux fue educativo y limitado (únicamente al 386), lo dejó abierto y gratuito. Pero igualmente se contradijo diciendo haber diseñado una interfaz de programación de aplicaciones muy portable de vista al futuro y la posibilidad de programación multihilo (carente en MINIX).

Por otra parte, Theodore Ts'o, un antiguo contribuidor de Linux, dijo acerca de GNU/Hurd que aunque un micronúcleo tendría beneficios: Linux está aquí, a diferencia de GNU: y la gente ha estado trabajando en Hurd durante mucho más tiempo que el que Linus ha estado trabajando en Linux.

En sí, se pueden ver muchas diferencias entre rendimiento de sistemas iPhone y teléfonos Android. No obstante, no es una comparativa justa porque existen cientos de dispositivos diferentes para Android y la forma de desarrollar cada aplicación y cómo se ejecuta también influye en el resultado final.

Torvalds ha tenido que responder en diferentes ocasiones a porqué seguir empleando un núcleo monolítico en lugar de un micronúcleo y su respuesta tajante fue:

La teoría tras los micronúcleos es que lo sistemas operativos son complicados. Así que intentas eliminar algo de esa complejidad modularizando un montón. El principio del enfoque del micronúcleo es que el núcleo, el cual es el núcleo del núcleo del núcleo, debe ser tan pequeño como sea posible. Su principal función es comunicar. Todas las diferentes cosas que un computador ofrece son servicios que están disponibles a través de canales de comunicación del micronúcleo. En el enfoque micronúcleo, se supone que dividimos el espacio del problema tanto que ninguno de estos espacios es complejo. Pensé que esto era estúpido. Sí, hacer cada pieza individual sea simple. Pero las interacciones hacerlas mucho más complejas de lo que serían si muchos de los servicios estuvieran dentro en el propio núcleo, tal y como lo están en Linux. Piense en su cerebro. Cada pieza es simple, pero las interacciones entre las piezas crean un sistema muy complejo. El problema completo es más grande que las partes. Si toma un problema y lo divide por la mitad y dice que las mitades son la mitad de complicadas, está ignorando el hecho de que debe agregar la complejidad de la comunicación entre las dos mitades. La teoría detrás del micronúcleo era que se divide el núcleo en cincuenta partes independientes, y cada una de las partes es una quincuagésima parte de la complejidad. Pero entonces todo el mundo ignora el hecho de que la comunicación entre las partes es en realidad más complicada de lo que era el sistema original, sin importar el hecho de que las partes todavía no son triviales. Ese es el mayor argumento en contra de los micronúcleos. La sencillez que intentas alcanzar es una falsa sencillez.

En resumen, Torvalds asume que al dividir no se consigue simplificar, solo dividir la complejidad en unidades más pequeñas debiendo agregar la nueva complejidad de la comunicación entre esas partes teóricamente más simples.

Conclusiones

En verdad el debate es bastante reñido. Los detractores de Linux y los micronúcleos argumentarán las bondades indicadas por los micronúcleos y podrán poner de ejemplos los núcleos existentes así como estar de acuerdo en los argumentos de Tanenbaum. Los seguidores de Linux y los núcleos monolíticos podrán estar de acuerdo completamente con Torvalds y sus argumentos. El debate está servido y para poder decir quien tiene más o menos razón habría que realizar estudios en estas áreas así como tomar las pruebas empíricas y ponerlas en bancos de pruebas.

Hay que reconocer que mientras que Linux es un núcleo que se desarrolló de forma muy rápida gracias a su simplicidad inicial y la necesidad de tener ese tipo de software libre y gratuito, Hurd no pudo progresar por encontrarse con una comunidad de desarrolladores demasiado exigentes que no consideran tener algo funcional ya, sino algo perfecto y como se suele decir: lo perfecto es enemigo de lo bueno. Sin embargo Darwin sí fue desarrollado, quizás no completamente como micronúcleo.

¿Y tú? ¿Qué sensación te produce la arquitectura de micronúcleo? ¿Has probado Darwin? ¿Te parece mejor a tu criterio Linux o XNU? ¡Déjanos tu comentario!