GNU Hurd es el microkernel multiservidor escrito como parte de GNU . Ha sido desarrollado desde 1990 por el Proyecto GNU de la Free Software Foundation , diseñado como un reemplazo del kernel Unix , [3] 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 ralentizó, y en ocasiones se deslizó intermitentemente entre la estasis y la renovada actividad e interés. [4]
Desarrollador | Proyecto GNU Thomas Bushnell Roland McGrath Marcus Brinkmann Neal Walfield Samuel Thibault |
---|---|
Escrito en | Ensamblaje , C |
Familia OS | Tipo Unix |
Estado de trabajo | Actual |
Modelo fuente | Software libre |
Versión inicial | 1990 |
Último lanzamiento | 0,9 / 7 de julio de 2019 [1] |
Plataformas | IA-32 , i686 |
Tipo de grano | Micronúcleo multiservidor |
Licencia | GPLv2 + [2] |
Página web oficial | www |
El diseño de Hurd consiste en un conjunto de protocolos y procesos de servidor (o demonios , en terminología Unix ) que se ejecutan en el microkernel GNU Mach . [3] Hurd tiene como objetivo superar al kernel de Unix en funcionalidad, seguridad y estabilidad, sin dejar de ser compatible en gran medida con él. El Proyecto GNU eligió el microkernel multiservidor [5] para el sistema operativo, debido a las ventajas percibidas sobre la arquitectura de kernel monolítica tradicional de Unix , [6] una visión que había sido defendida por algunos desarrolladores en la década de 1980. [4]
Nombre y logo
En diciembre de 1991, el arquitecto principal de Hurd describió el nombre como un acrónimo recursivo entre sí : [7]
Es hora de explicar el significado de "Hurd". "Hurd" significa "Hird of Unix-Replacing Daemons". Y, luego, "Hird" significa "Hurd of Interfaces Representing Depth". Tenemos aquí, que yo sepa, el primer software en ser nombrado por un par de acrónimos recursivos entre sí.
Como hurd y hird son homófonos de la palabra inglesa herd , el nombre completo GNU Hurd también es un juego de palabras herd of gnus , que refleja cómo funciona el kernel. [8]
El logo se llama Hurd boxes y también refleja la arquitectura. El logotipo es un gráfico donde los nodos representan los servidores del kernel Hurd y los bordes dirigidos son mensajes IPC . [7]
Historia 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, surgió la GNU GPL y el único componente importante que faltaba era el kernel. [9] [10]
El desarrollo en Hurd comenzó en 1990 después de un intento de kernel abandonado en 1986, basado en el sistema operativo de investigación TRIX desarrollado por el profesor Steve Ward y su grupo en el Laboratorio de Ciencias de la Computación (LCS) del MIT . [11] 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 un lugar muy diferente hoy ". [12] En 1987 Richard Stallman propuso utilizar el microkernel 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 con una licencia adecuada. [11]
Con el lanzamiento del kernel de Linux en 1991, el principal usuario de GNU de espacio de usuario componentes pronto se convirtió en sistemas operativos basados en el kernel de Linux ( distribuciones de Linux ), que llevó a la acuñación del término GNU / Linux .
El desarrollo del Hurd ha avanzado lentamente. A pesar de un anuncio optimista de Stallman en 2002 que predice un lanzamiento de GNU / Hurd más tarde ese año, [13] 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 funciones faltantes. [14] Esto ha resultado en un producto más pobre de lo que muchos (incluido Stallman) esperaban. [15] En 2010, después de veinte años en desarrollo, Stallman dijo que "no era muy optimista acerca de GNU Hurd. Hace algunos avances, 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 resolvería el principal problema restante para un sistema operativo libre: el soporte de dispositivos. [dieciséis]
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. [17]
El 20 de agosto de 2015, en medio del Google Summer of Code , se anunció que GNU Guix se había adaptado a GNU Hurd. [18]
Arquitectura
A diferencia de la mayoría de los núcleos tipo Unix , Hurd utiliza una arquitectura servidor-cliente , construida sobre un microkernel que es responsable de proporcionar los servicios del núcleo más básicos : coordinando el acceso al hardware : la CPU (a través de la gestión y programación de procesos ), RAM (a través de gestión de memoria ) y otros dispositivos de entrada / salida (a través de la programación de E / S ) para sonido, gráficos, almacenamiento masivo, etc. En teoría, el diseño de microkernel permitiría que todos los controladores de dispositivos se construyan como servidores que trabajen en el espacio del 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 . [19]
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 colapsarí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. [20]
Desde el principio, Hurd se desarrolló para usar GNU Mach como microkernel. Esta fue una decisión técnica tomada por Richard Stallman , quien pensó que aceleraría el trabajo al salvar una gran parte del mismo. Ha admitido que estaba equivocado en eso. [21] Otros sistemas similares a Unix que trabajan en el micronúcleo Mach incluyen OSF / 1 , Lites y MkLinux . macOS y NeXTSTEP usan núcleos híbridos basados en Mach.
Otros micronúcleos
A partir de 2004, se lanzaron varios esfuerzos para trasladar el Hurd a micronúcleos más modernos. El micronúcleo 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 funcionar el código de inicio del proceso, 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 núcleo para HURD. [22] [23] En 2006, Brinkmann se reunió con Jonathan Shapiro (un arquitecto principal del Sistema Operativo Coyotos) para ayudar y discutir el uso del kernel Coyotos para GNU / Hurd. En una discusión adicional, los desarrolladores de HURD se dieron cuenta de que Coyotos (así como otros núcleos similares) no son adecuados para HURD. [24]
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", [25] y una propuesta sobre cómo se puede diseñar un sistema futuro, conocida como "el documento de posición". [26] En 2008, Neal Walfield comenzó a trabajar en el microkernel de Viengoos como un kernel nativo moderno para HURD. A partir de 2009[actualizar], el desarrollo en Viengoos se detiene debido a que Walfield no tiene tiempo para trabajar en él. [27]
Mientras tanto, otros han seguido trabajando en la variante Mach de Hurd. [28]
Extensiones Unix
Varios conceptos tradicionales de Unix se reemplazan o amplían en Hurd.
En 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 Hurd, por otro lado, se ejecuta bajo un conjunto de identificadores de usuario, que pueden contener varios identificadores, uno o ninguno. Un proceso con suficientes privilegios puede agregar y eliminar identificadores de otro proceso. Por ejemplo, hay un servidor de contraseñas que entregará identificadores 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 una jerarquía de directorios completa. Cada acceso al archivo traducido, o archivos por debajo de una jerarquía en el segundo caso, es de hecho 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. Traductores aún más poderosos son aquellos como UnionFS , que permite al usuario unificar múltiples directorios en uno; por lo tanto, enumerar el directorio unificado revela el contenido de todos los directorios.
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) con los siguientes nombres: [29]
Servidores centrales
- auth ( servidor de autenticación ): recibe solicitudes y contraseñas de los programas y les da una identificación, que cambia los privilegios del programa.
- crash ( crash server): maneja todos los errores fatales.
- eieio (servidor de traducción): TODO (ver Computadora compró la granja )
- exec (servidor de ejecución): traduce una imagen ejecutable (actualmente se admiten ELF y a.out ) a una imagen ejecutable en la memoria.
- FIFO ( FIFO traductor): Implementa tuberías con nombre.
- new- FIFO (nuevo servidor FIFO): servidor alternativo para canalizaciones con nombre.
- firmlink (el traductor firmlink): Implementa firmlinks - "a medio camino entre un enlace simbólico y un enlace duro ". [30]
- fwd (servidor de reenvío): reenvía las solicitudes a otros servidores, utilizados por los servidores de enlace simbólico y FIFO.
- hostmux (servidor multiplexor de host)
- ifsock (servidor para interfaz de sockets): ayuda con las direcciones de socket de dominio de UNIX.
- init ( servidor de inicio ): configuración y arranque básicos del sistema.
- magic ( servidor mágico ): Señala que una búsqueda de nombre debe ser resuelta internamente por un proceso cuando el resultado involucra el estado del proceso.
- null (servidor nulo): implementa / dev / null y / dev / zero.
- pfinet (servidor pfinet): Implementa la familia de protocolos PF_INET.
- pflocal (servidor pflocal): Implementa sockets de dominio UNIX .
- proc (servidor de procesos): asigna PID y gestiona acciones a nivel de proceso.
- enlace simbólico ( traductor de enlace simbólico ): implementa enlaces simbólicos para sistemas de archivos que no los admiten.
- término (servidor de terminal): un terminal POSIX .
- usermux (servidor multiplexor de usuario): invoca traductores específicos del usuario.
Servidores de sistema de archivos
- ext2fs
- El traductor del sistema de archivos ext2 . Recibe bloques de disco del microkernel y entrega archivos y directorios a las aplicaciones.
- isofs
- El traductor para el sistema de archivos ISO 9660 . Traduce bloques de un CD o DVD a archivos y directorios para las aplicaciones.
- nfs
- Consulte Sistema de archivos de red .
- ufs
- Traductor para el sistema de archivos BSD del mismo nombre, UFS .
- ftpfs
- Protocolo de transferencia de archivos traductor del sistema de archivos.
- storeio
- El traductor de almacenamiento.
Los servidores implementan colectivamente la API POSIX , y cada servidor implementa una parte de la interfaz. Por ejemplo, cada uno de los distintos servidores del sistema de archivos implementa las llamadas al sistema de archivos. El servidor de almacenamiento funcionará como una capa de envoltura, similar a la capa de bloque de Linux. Las bibliotecas libdiskfs y libpager logran el equivalente de VFS de Linux .
Distribuciones GNU que ejecutan Hurd
Las distribuciones GNU basadas en Hurd incluyen:
- Arch Hurd
- Bee GNU / Hurd (descontinuado) [31]
- Debian GNU / Hurd
- Gentoo GNU Hurd (descontinuado)
- GNU / Hurd Live CD [32] (descontinuado) [ verificación fallida ]
- Sistema Guix (en desarrollo)
Ver también
- Distribuciones GNU
- GNU Mach
- GNU Linux-libre : la versión gratuita del kernel de Linux
- Comparación de los núcleos del sistema operativo
- Software libre
- Máquina virtual basada en kernel (KVM)
- Especificación de arranque múltiple
Referencias
- ^ "2019-07-07-debian gnu hurd 2019" . GNU Hurd . Consultado el 19 de mayo de 2021 .
- ^ "COPIANDO - hurd / hurd.git - Hurd" . Git.savannah.gnu.org . Consultado el 25 de febrero de 2019 .
- ^ a b "¿Qué es GNU Hurd?" . GNU . Consultado el 4 de marzo de 2010 .
- ^ a b Tozzi, Christopher (20 de abril de 2015). "30 años después, HURD Lives: GNU actualiza el núcleo de Unix de código abierto" . Archivado desde el original el 24 de abril de 2015.
- ^ "¿Qué es un microkernel multiservidor?" . Gnu.org. 2013-04-13 . Consultado el 11 de agosto de 2015 .
- ^ "ventajas" . GNU . Consultado el 7 de diciembre de 2011 .
- ^ a b Vervloesem, Koen (7 de julio de 2010). "The Hurd: la búsqueda de GNU del núcleo perfecto" . LWN.net . Consultado el 5 de octubre de 2012 .
- ^ "GNU Hurd: origen del nombre" . GNU . Consultado el 4 de marzo de 2010 .
- ^ Hillesley, Richard (30 de junio de 2010). "GNU HURD: Visiones alteradas y promesa perdida" . Consultado el 1 de octubre de 2012 .
- ^ "Linux y el proyecto GNU" . GNU . 2010-01-26 . Consultado el 4 de marzo de 2010 .
- ^ a b "La historia de GNU Hurd, 'Cómo empezó ' " . GNU . Consultado el 27 de agosto de 2006 .
- ^ Salus, Peter . "El demonio, el GNU y el pingüino" . Consultado el 8 de agosto de 2006 .
- ^ Ribeiro, John (11 de marzo de 2002). "El software libre ve GNU suelto de Linux" . PC World . Archivado desde el original el 22 de septiembre de 2016 . Consultado el 5 de octubre de 2012 .
- ^ "Estado" . GNU . Consultado el 4 de marzo de 2010 .
- ^ Stallman, Richard (9 de marzo de 2006). "El movimiento del software libre y el futuro de la libertad" (ogg) . Fundación de Software Libre . Zagreb . Lay resumen .
Esta es también la forma en que la gente pensaba que era la forma más limpia posible de diseñar núcleos en 1990. Bueno, se necesitaron muchos, muchos años para que este núcleo se ejecutara, y todavía no funciona bien, y Parece que puede haber problemas fundamentales con este diseño, que nadie conocía en 1990.
- ^ Stallman, Richard (29 de julio de 2010). "RMS AMA" . Reddit . Consultado el 7 de diciembre de 2011 .
- ^ "Free Software Foundation cambia prioridades - SD Times" . Tiempos SD . 2017-01-17 . Consultado el 17 de abril de 2017 .
- ^ Ragkousis, Manolis (20 de agosto de 2015). "[Actualización de GSoC] Portando Guix a GNU / Hurd" (lista de correo). guix-devel . Consultado el 20 de agosto de 2015 .
- ^ Kousoulos, Constantine (21 de marzo de 2007). "Re: controladores de dispositivo en Mach?" . bug-hurd (lista de correo).
- ^ Doeppner, Thomas W. (20 de diciembre de 2010). Sistemas operativos en profundidad: diseño y programación . John Wiley e hijos. pag. 160. ISBN 978-0-471-68723-8. Consultado el 29 de noviembre de 2012 .
- ^ Stallman, Richard (12 de octubre de 2000). "En defensa de Red Hat" . Linux hoy . Consultado el 7 de diciembre de 2011 .
Asumo toda la responsabilidad de la decisión técnica de desarrollar el kernel GNU basado en Mach, decisión que parece haber sido responsable de la lentitud del desarrollo. Pensé que usar Mach aceleraría el trabajo al ahorrarnos una gran parte del trabajo, pero estaba equivocado.
- ^ Shapiro, Jonathan S. (27 de octubre de 2005). "Re: un comentario sobre el cambio de kernels" . l4-hurd (lista de correo).
- ^ Bachmann, Tom (7 de julio de 2006). "Re: seL4, L4.sec y lío de coyotos" . l4-hurd (lista de correo).
- ^ "Portando el Hurd a otro microkernel" . GNU Hurd . Fundación de Software Libre . Consultado el 6 de mayo de 2017 .
- ^ Walfield, Neal H .; Brinkmann, Marcus (julio de 2007). "Una crítica del sistema operativo multiservidor GNU Hurd" (PDF) . GNU . Consultado el 7 de diciembre de 2011 .
- ^ Walfield, Neal H .; Brinkmann, Marcus (4 de enero de 2007). "Mejora de la usabilidad mediante la descomposición del acceso y el perfeccionamiento de políticas" (PDF) . GNU . Consultado el 7 de diciembre de 2011 .
- ^ "viengoos" . GNU . Consultado el 4 de marzo de 2010 .
- ^ "¿Qué pasó con los micro-kernels L4 / Coyotos / viengoos?" . GNU . Consultado el 7 de enero de 2011 .
- ^ "Descripción preliminar de la interfaz de usuario de GNU / Hurd" . Debian . 1996-10-10 . Consultado el 4 de marzo de 2010 .
- ^ "GNU / Hurd - Documentación" . Debian. 1996-10-10 . Consultado el 12 de julio de 2012 .
- ^ "GNU Hurd / hurd / running / distrib" . Gnu.org . 2015-05-03 . Consultado el 21 de septiembre de 2017 .
- ^ "GNU Hurd / hurd / running / live cd" . Gnu.org . 2013-04-09 . Consultado el 21 de septiembre de 2017 .
enlaces externos
- Página web oficial