GNU Hurd
GNU Hurd es una colección de servidores microkernel escritos como parte de GNU, para el microkernel GNU Mach. Ha estado en desarrollo desde 1990 por el Proyecto GNU de la Free Software Foundation, diseñado como un reemplazo para el kernel de Unix y lanzado como software libre bajo la Licencia Pública General GNU. Cuando el kernel de Linux demostró ser una solución viable, el desarrollo de GNU Hurd se desaceleró, alternando en ocasiones entre estancamiento y actividad e interés renovados.
El diseño de Hurd consiste en un conjunto de protocolos y procesos de servidor (o demonios, en la terminología de Unix) que se ejecutan en el micronúcleo GNU Mach. Hurd tiene como objetivo superar el kernel de Unix en funcionalidad, seguridad y estabilidad, sin dejar de ser en gran medida compatible con él. El Proyecto GNU eligió el micronúcleo multiservidor para el sistema operativo, debido a las ventajas percibidas sobre la arquitectura tradicional del núcleo monolítico de Unix, una visión que habían defendido algunos desarrolladores en la década de 1980.
Nombre y logotipo
En diciembre de 1991, el arquitecto principal de Hurd describió el nombre como un acrónimo mutuamente recursivo:
Es hora de explicar el significado de "Hurd". "Hurd" significa "Hird of Unix-Replacing Daemons". Y, entonces, "Hird" significa "Hurd of Interfaces Representando la Profundidad". Tenemos aquí, a mi conocimiento, el primer software que debe ser nombrado por un par de acrónimos mutuamente recursivos.
—Thomas (entonces Michael) Bushnell
Como tanto hurd como hird son homófonos de la palabra inglesa herd, el nombre completo GNU Hurd es también un juego de palabras manada de ñus, que refleja cómo funciona el núcleo.
El logo se llama Hurd boxes y también reflexiona sobre la arquitectura. El logotipo es un gráfico donde los nodos representan los servidores del núcleo Hurd y los bordes dirigidos son mensajes IPC.
Historial de desarrollo
Richard Stallman fundó el Proyecto GNU en septiembre de 1983 con el objetivo de crear un sistema operativo GNU libre. Inicialmente, se escribieron los componentes necesarios para el desarrollo del kernel: editores, shell, compilador, depurador, etc. En 1989, se creó la GPL de GNU y el único componente importante que faltaba era el kernel.
El desarrollo de Hurd comenzó en 1990 después de un intento de núcleo abandonado en 1986, basado en el sistema operativo TRIX de investigación desarrollado por el profesor Steve Ward y su grupo en el Laboratorio de Ciencias de la Computación (LCS) del MIT. Según Thomas Bushnell, el arquitecto inicial de Hurd, su plan inicial era adaptar el núcleo 4.4BSD-Lite y, en retrospectiva, "ahora es perfectamente obvio para mí que esto habría tenido un éxito espléndido y el mundo sería un lugar muy diferente hoy." En 1987, Richard Stallman propuso usar el micronúcleo Mach desarrollado por Richard Rashid en la Universidad Carnegie Mellon. El trabajo en esto se retrasó durante tres años debido a la incertidumbre sobre si CMU lanzaría el código Mach bajo una licencia adecuada.
Con el lanzamiento del kernel de Linux en 1991, el usuario principal de los componentes de la zona de usuario de GNU pronto se convirtió en sistemas operativos basados en el kernel de Linux (distribuciones de Linux), lo que provocó la acuñación del término GNU/Linux.
El desarrollo de Hurd ha sido lento. A pesar de un anuncio optimista de Stallman en 2002 prediciendo el lanzamiento de GNU/Hurd más tarde ese año, Hurd todavía no se considera adecuado para entornos de producción. El desarrollo en general no ha cumplido con las expectativas, y todavía hay una cantidad significativa de errores y características que faltan. Esto ha resultado en un producto más pobre de lo que muchos, incluido Stallman, esperaban. En 2010, después de veinte años de desarrollo, Stallman dijo que "no era muy optimista sobre GNU Hurd". Hace algunos progresos, pero para ser realmente superior requeriría resolver muchos problemas profundos", pero agregó que "terminarlo no es crucial" para el sistema GNU porque ya existía un kernel libre (Linux), y completar Hurd no abordaría el principal problema restante para un sistema operativo libre: soporte de dispositivos.
El proyecto Debian, entre otros, ha trabajado en el proyecto Hurd para producir distribuciones binarias de sistemas operativos GNU basados en Hurd para sistemas compatibles con IBM PC.
Después de años de estancamiento, el desarrollo se recuperó nuevamente en 2015 y 2016, con cuatro lanzamientos durante estos dos años.
El 20 de agosto de 2015, en medio del Google Summer of Code, se anunció que GNU Guix se había migrado a GNU Hurd.
Arquitectura
A diferencia de la mayoría de los kernels similares a Unix, Hurd utiliza una arquitectura de servidor-cliente, construida sobre un microkernel que es responsable de proporcionar los servicios de kernel más básicos: coordinar el acceso al hardware: la CPU (a través de la gestión y programación de procesos), RAM (a través de la gestión de la memoria) y otros dispositivos de entrada/salida (a través de la programación de E/S) para sonido, gráficos, almacenamiento masivo, etc. espacio de usuario, pero hoy en día la mayoría de los controladores de este tipo todavía están contenidos en el espacio del núcleo GNU Mach.
Según los desarrolladores de Hurd, la principal ventaja del diseño basado en microkernel es la capacidad de extender el sistema: desarrollar un nuevo módulo no requeriría un conocimiento profundo del resto del kernel, y un error en un módulo no fallaría todo el sistema. Hurd proporciona un concepto de traductores, un marco de módulos que se utiliza para ampliar la funcionalidad de un sistema de archivos.
Desde el principio, Hurd se desarrolló para utilizar GNU Mach como micronúcleo. Esta fue una decisión técnica de Richard Stallman, quien pensó que aceleraría el trabajo al salvar una gran parte del mismo. Ha admitido que se equivocó al respecto. Otros sistemas similares a Unix que funcionan en el micronúcleo Mach incluyen OSF/1, Lites y MkLinux. macOS y NeXTSTEP utilizan núcleos híbridos basados en Mach.
Otros micronúcleos
Desde 2004 en adelante, se lanzaron varios esfuerzos para migrar Hurd a microkernels más modernos. El microkernel L4 fue la elección original en 2004, pero el progreso se detuvo. Sin embargo, durante 2005, el desarrollador de Hurd, Neal Walfield, terminó el marco de gestión de memoria inicial para el puerto L4/Hurd, y Marcus Brinkmann portó partes esenciales de glibc; es decir, hacer que el código de inicio del proceso funcione, permitiendo que los programas se ejecuten, permitiendo así que se ejecuten los primeros programas de usuario (los triviales como el programa hello world) en C.
Desde 2005, Brinkmann y Walfield comenzaron a investigar Coyotos como un nuevo kernel para HURD. En 2006, Brinkmann se reunió con Jonathan Shapiro (un arquitecto principal del sistema operativo Coyotos) para ayudar y discutir el uso del núcleo Coyotos para GNU/Hurd. En una discusión posterior, los desarrolladores de HURD se dieron cuenta de que Coyotos (al igual que otros kernels similares) no son adecuados para HURD.
En 2007, los desarrolladores de Hurd, Neal Walfield y Marcus Brinkmann, hicieron una crítica de la arquitectura de Hurd, conocida como "la crítica", y una propuesta sobre cómo se puede diseñar un sistema futuro, conocida como "el documento de posición". En 2008, Neal Walfield comenzó a trabajar en el microkernel Viengoos como un kernel nativo moderno para HURD. A partir de 2009, el desarrollo de Viengoos se detuvo debido a que Walfield no tuvo tiempo para trabajar en él.
Mientras tanto, otros han seguido trabajando en la variante Mach de Hurd.
Extensiones de Unix
Varios conceptos tradicionales de Unix se reemplazan o amplían en Hurd.
Bajo Unix, cada programa en ejecución tiene una identificación de usuario asociada, que normalmente corresponde al usuario que inició el proceso. Esta identificación dicta en gran medida las acciones permitidas al programa. Ningún proceso externo puede cambiar la identificación de usuario de un programa en ejecución. Un proceso de Hurd, por otro lado, se ejecuta bajo un conjunto de identificaciones de usuario, que pueden contener varias identificaciones, una o ninguna. Un proceso suficientemente privilegiado puede agregar y eliminar identificadores de otro proceso. Por ejemplo, hay un servidor de contraseñas que entregará identificaciones a cambio de una contraseña de inicio de sesión correcta.
Con respecto al sistema de archivos, se puede designar un programa adecuado como traductor para un solo archivo o para toda una jerarquía de directorios. Cada acceso al archivo traducido, o archivos debajo de una jerarquía en el segundo caso, es manejado por el programa. Por ejemplo, un traductor de archivos puede simplemente redirigir las operaciones de lectura y escritura a otro archivo, como un enlace simbólico de Unix. El efecto del montaje de Unix se logra configurando un traductor del sistema de archivos (usando el comando "settrans"). Los traductores también se pueden utilizar para proporcionar servicios al usuario. Por ejemplo, el traductor ftpfs permite a un usuario encapsular sitios FTP remotos dentro de un directorio. Luego, se pueden usar herramientas estándar como ls, cp y rm para manipular archivos en el sistema remoto. Los traductores aún más potentes son algunos como UnionFS, que permite al usuario unificar varios directorios en uno solo; por lo tanto, enumerar el directorio unificado revela el contenido de todos los directorios.
The Hurd requiere un cargador de arranque compatible con arranque múltiple, como GRUB.
Arquitectura de los servidores
Según la documentación de Debian, hay 24 servidores (18 servidores centrales y 6 servidores de sistema de archivos) nombrados de la siguiente manera:
Servidores centrales
- auth (authentication server): Recibe solicitudes y contraseñas de programas y les da un ID, que cambia los privilegios del programa.
- accidente (servidor de malla): Maneja todos los errores fatales.
- eieio (servidor de traducción): TODO
- exec (servidor de ejecución): Traduce una imagen ejecutable (actualmente ELF y a.out son compatibles) a una imagen ejecutable en memoria.
- fifo (Traductor FIFO): Implementa tubos nombrados.
- nuevo-fifo (nuevo servidor FIFO): Un servidor alternativo para tuberías llamadas.
- Firmlink (el traductor de firmlink): Implementa firmlinks – "la mitad de camino entre un enlace simbólico y un enlace duro".
- Fwd (servidor futuro): Procede solicitudes a otros servidores, utilizados por fifo y servidores de enlace.
- hostmux (host multiplexer server)
- Sisock (servidor para la interfaz de tomas): Ayuda con direcciones de socket de dominio UNIX.
- init (servidor inicial): Sistema básico de arranque y configuración.
- magia (servidor mágico): Signals that a name lookup must be resolved internally by a process when the result involves the process's state.
- nulo (servidor nulo): Implements /dev/null y /dev/zero.
- pfinet (pfinet server): Implementa la familia de protocolo PF_INET.
- pflocal (servidor pflocal): Implementa sockets de dominio UNIX.
- proc (proceso servidor): Assigns PIDs and manages process-level actions.
- Symlink (Traductor de enlace simbólico): Implementa enlaces simbólicos para sistemas de archivos que no los soportan.
- mandato (servidor final): Un terminal POSIX.
- usermux (user multiplexer server): Invoca traductores específicos para usuarios.
Servidores de sistemas de archivos
- ext2fs
- El traductor ext2 del sistema de archivos. Recibe bloques de disco del microkernel y da archivos y directorios a las aplicaciones.
- isofs
- El traductor del sistema de archivos ISO 9660. Traduce bloques de un CD o DVD a archivos y directorios para las aplicaciones.
- nfs
- Ver Sistema de Archivo de Redes.
- ufs
- Traductor para el sistema de archivos BSD del mismo nombre, UFS.
- ftpfs
- Traductor del protocolo de transferencia de archivos del sistema.
- storeio
- El traductor de almacenamiento.
Los servidores implementan colectivamente la API POSIX, y cada servidor implementa una parte de la interfaz. Por ejemplo, los distintos servidores del sistema de archivos implementan las llamadas al sistema de archivos. El servidor de almacenamiento funcionará como una capa envolvente, similar a la capa de bloques de Linux. El equivalente de VFS de Linux se logra con las bibliotecas libdiskfs y libpager.
Distribuciones GNU que ejecutan Hurd
Las distribuciones de GNU basadas en Hurd incluyen:
- Arch Hurd
- Bee GNU/Hurd (continuación)
- Debian GNU/Hurd
- Gentoo GNU Hurd (discontinued)
- GNU/Hurd Live CD (discontinued)
- Sistema Guix (en desarrollo)
Contenido relacionado
8.3 nombre de archivo
Proceso zombi
Tasa efectiva de transferencia de datos