Genode es un sistema operativo (SO) de software libre y de código abierto que consta de una capa de abstracción de microkernel y un conjunto de componentes de espacio de usuario . [4] [5] [6] El marco es notable por ser uno de los pocos sistemas operativos de código abierto que no se deriva de un SO propietario, como Unix . La filosofía de diseño característica es que una base informática pequeña y confiable es la principal preocupación en un SO orientado a la seguridad.
Genode se puede utilizar como base para un sistema operativo de computadora de escritorio [7] [8] o tableta [9] o como monitor de máquina virtual para sistemas operativos invitados. El marco se ha utilizado como un componente confiable de sistemas de virtualización seguros tanto para x86 [10] como para ARM . [11]
La pequeña base de código de Genode lo convierte en una alternativa flexible a los sistemas operativos derivados de Unix más complejos. Por esta razón, el marco se ha utilizado como sistema base para la investigación en campos como la virtualización, [12] la comunicación entre procesos , [13] el aislamiento de la pila IP , [14] [15] la monitorización, [16] y el desarrollo de software . [17] [18]
Genode fue concebido inicialmente como el informe de investigación Bastei OS Architecture [19] en la Universidad Técnica de Dresde ( TU Dresden ). El objetivo del informe era determinar la viabilidad de un sistema operativo basado en componentes que utilizase seguridad basada en capacidades . Este informe estuvo motivado en parte por la investigación sobre microhipervisores L4 [20] realizada durante el mismo tiempo. Tras el éxito de un prototipo inicial, los autores del informe fundaron la empresa Genode Labs para desarrollar Bastei como el marco del sistema operativo Genode.
El proyecto se desarrolla públicamente como un proyecto de código abierto publicado bajo los términos de la Licencia Pública General Affero de GNU con una entidad comercial que ofrece licencias alternativas. Los lanzamientos se programan en intervalos de tres meses para realizar cambios en la interfaz binaria de la aplicación (ABI) del sistema, la interfaz de programación de aplicaciones (API) y la documentación de problemas. El marco del sistema operativo está disponible en forma de código fuente y, tras el lanzamiento de la versión 18.02, se proporciona un derivado de propósito general llamado Sculpt con implementación binaria en el destino.
Genode se basa en la filosofía general de los microkernels: cuanto más pequeño y simple sea el código, más fácil será verificar su fiabilidad y corrección. Genode extiende esta filosofía al espacio de usuario al componer aplicaciones complejas a partir de pequeños componentes. Cada componente existe en una estricta jerarquía de relaciones padre-hijo. Cualquier componente que actúe como padre puede aplicar políticas de acceso a recursos y comunicación entre procesos (IPC) a sus hijos. Este diseño de sistema jerárquico produce particiones intuitivas y desescalada de privilegios a medida que los subsistemas especializados se anidan dentro de subsistemas más generales, lo que mitiga el confuso problema de los subordinados endémico de las políticas de sistemas centralizados o de superusuarios .
El marco está diseñado para ser alojado por microkernels, sin embargo, las características de cualquier microkernel dado caen mayoritariamente dentro de un conjunto común, y los kernels monolíticos implementan un superconjunto de esas características. La abstracción de estas características permite que Genode actúe como espacio de usuario para una variedad de microkernels L4, [21] [22] y Linux.
Genode es criticado a menudo por la elección de su lenguaje de implementación, C++ (algunos otros sistemas operativos implementados en C++ incluyen BeOS , Fuchsia , Ghost, Haiku , IncludeOS , Managarm, OSv , Palm OS , ReactOS , SerenityOS , Syllable y Symbian ). Esta crítica generalmente afirma que C++ es una mala elección para implementar bibliotecas de sistema y API debido a la complejidad inherente de C++ y la dificultad de analizar el código para un comportamiento correcto. Si bien Genode hace uso de herencia múltiple y plantillas en su biblioteca de sistema, el uso de la biblioteca estándar de C++ no está permitido y las características del lenguaje que dependen del estado global implícito, como el almacenamiento local de subprocesos y el asignador global, se han eliminado del entorno de ejecución del lenguaje. [23] No es posible realizar un análisis estático completo de C++. Sin embargo, el proyecto Genode publica pruebas unitarias para el análisis empírico.
Los componentes de Genode consumen y publican el estado utilizando datos estructurados serializados en XML , en contraste con el modelo de texto simple de los derivados de Unix. El marco Genode hace uso de XML en la práctica en todos sus componentes porque XML se analiza y genera fácilmente de manera programática y, al mismo tiempo, es posible comprenderlo y editarlo manualmente.
Genode carece de un espacio de nombres global práctico ; no hay un sistema de archivos global ni un registro de procesos ni puntos finales de IPC. Esto contrasta con sistemas como Unix, que cuentan con un sistema de archivos ubicuo y permiten que un contexto de superusuario administre arbitrariamente cualquier proceso dentro del sistema. Declarar explícitamente los permisos y el enrutamiento de los componentes puede percibirse como una tarea laboriosa en comparación con Unix. Sin embargo, la administración compartimentalizada permite que los subsistemas sean administrados por administradores de sistemas que no son de confianza mutua en la misma máquina sin recurrir a la virtualización, un método de aislamiento común.
El proyecto Genode publica un sistema operativo de escritorio llamado Sculpt que apunta a las computadoras portátiles de consumo contemporáneas . [24] Sculpt es un pequeño sistema base con detección y configuración automática de dispositivos, algunas interfaces de control GUI y frontends para el administrador de paquetes Genode. El sistema no cuenta con un entorno de escritorio completo, sino que requiere que los usuarios implementen máquinas virtuales que alojan sistemas operativos tradicionales para un escritorio con todas las funciones. Sculpt se distingue del marco del sistema operativo Genode en que se basa en gran medida en la reconfiguración dinámica utilizando componentes de control privilegiados en contraste con los sistemas especializados con políticas estáticas.