¿Está macOS esencialmente construido sobre Linux?

Al principio, AT&T creó Unix. Sin embargo, debido a las leyes de monopolio, no se les permitió venderlo. Muchas organizaciones obtuvieron la licencia de Unix e hicieron sus propias variantes; la mayoría eran empresas comerciales, pero la Universidad de California en Berkeley hizo una versión no comercial, llamada BSD.

Mientras tanto, Richard Stallman en el MIT ideó el «software libre» -más comúnmente llamado «código abierto» hoy en día- e inició un proyecto para crear un sistema operativo «libre» compatible con Unix llamado GNU. La mayor parte del proyecto GNU fue muy bien, pero GNU Hurd, el componente central del núcleo, se retrasó repetidamente.*

Un joven programador llamado Linus Torvalds intervino, iniciando su propio y exitoso proyecto para crear un núcleo llamado Linux. Cuando se combinó con las herramientas de GNU, Linux proporcionó un sistema operativo completo que funcionaba como Unix, pero que había sido escrito desde cero y licenciado de tal manera que permanecería abierto para siempre.

Esencialmente, GNU y Linux son «imitaciones» de Unixes como BSD, imitaciones de muy alta calidad, sin duda, pero imitaciones al fin y al cabo. Todas las variantes de Unix -ya sean modificaciones como BSD o clones como Linux**- tienen pequeñas diferencias entre sí; en la práctica, Linux no es más diferente que cualquier otra variante de Unix.

Sin embargo, ese no es el final de la historia para OS X. Al igual que Linux adoptó las herramientas de GNU pero desechó su núcleo, Darwin (la parte Unix de OS X) adoptó las herramientas de BSD pero desechó su núcleo.

So, to review:

  1. Unix/Linux Family Tree 
  2.  
  3. +———– Unix – – – – – -+ 
  4. | (modify) (clone) |  
  5. BSD GNU 
  6. | (replace kernel) | 
  7. Darwin/OS X Linux 

If operating systems were families, OS X and Linux would not be the same person. Ni siquiera serían hermanos. Serían primos por adopción.

* ¿Por qué? La forma teóricamente «correcta» de diseñar un kernel se llama «microkernel». En un micronúcleo, cada componente del mismo es un programa independiente, que se comunica entre sí. Si quieres acceder a un archivo, envías mensajes al componente del sistema de archivos; si quieres algo de memoria, envías mensajes al componente de gestión de memoria; si quieres hacer una conexión a Internet, envías mensajes al componente de red. El problema es que esto es mucho más difícil de diseñar y construir que el enfoque «monolítico», en el que se construye todo el kernel en un gran componente y se permite que los programas llamen a él.

Hurd fue diseñado como un microkernel puro, basado en un proyecto de investigación de la CMU llamado Mach. Sin embargo, se ha demostrado que es muy difícil de implementar; después de 24 años de desarrollo, actualmente están en la versión 0.5, que funciona pero no muy bien. Linux, por otro lado, es un núcleo monolítico más simple y feo que funcionó bastante bien desde el principio; la mayor parte del trabajo desde entonces se ha centrado en la ampliación de su soporte de hardware, la mejora de su rendimiento y la adición de nuevas características.

Por cierto, BSD también es un núcleo monolítico. El kernel de Darwin es en realidad un extraño híbrido: utiliza la misma mensajería Mach que Hurd, pero todos los componentes del kernel están en un proceso monolítico. Mach es simplemente la forma en que los programas se comunican con el kernel y entre sí.

** Si quiere ser políticamente correcto sin una razón particularmente buena, finja que escribí GNU/Linux aquí y en otros lugares.