Genode es un marco de sistema operativo (SO) de software gratuito 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 se destaca como uno de los pocos sistemas operativos de código abierto que no deriva de un sistema operativo propietario, como Unix . La filosofía de diseño característica es que una pequeña base informática confiable es la principal preocupación en un sistema operativo 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 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 más complejos derivados de Unix. Por esta razón, el marco se ha utilizado como sistema base para la investigación en campos tales como virtualización, [12] comunicación entre procesos , [13] aislamiento de pila IP , [14] [15] monitoreo, [16] y desarrollo de software . [17] [18]
Genode se concibió por primera vez 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 utilice seguridad basada en capacidades . Este informe fue motivado en parte por una investigación sobre microhipervisores L4 [20] realizada durante el mismo tiempo. Tras el éxito de uno de los primeros prototipos, los autores del informe fundaron la empresa Genode Labs para desarrollar Bastei como Genode OS Framework.
El proyecto se desarrolla públicamente como un proyecto de código abierto publicado bajo los términos de la Licencia Pública General GNU Affero 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 aplicaciones del sistema (ABI), 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 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 confiabilidad y corrección. Genode extiende esta filosofía al espacio del usuario componiendo aplicaciones complejas a partir de componentes pequeños. 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 jerárquico del sistema produce una partición intuitiva y una reducción de privilegios a medida que los subsistemas especializados se anidan dentro de subsistemas más generales, lo que mitiga el problema adjunto confuso endémico de la política de sistema centralizado o de superusuario .
El marco está diseñado para ser alojado en microkernels; sin embargo, las características de cualquier microkernel determinado se encuentran principalmente dentro de un conjunto común, y los kernels monolíticos implementan un superconjunto de esas características. Resumir estas características permite a Genode actuar como espacio de usuario para una variedad de microkernels L4, [21] [22] y Linux.
Genode es a menudo criticado por la elección de su lenguaje de implementación, C++ (algunos otros sistemas operativos implementados en C++ incluyen BeOS , Fuchsia , Ghost, Haiku , IncludeOS , OSv , Palm OS , ReactOS , SerenityOS , Syllable y Symbian ). Esta crítica generalmente afirma que C++ es una mala elección para implementar API y bibliotecas del sistema debido a la complejidad inherente de C++ y la dificultad para analizar el código para determinar su comportamiento correcto. Si bien Genode utiliza herencia múltiple y plantillas en su biblioteca del 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 de el tiempo de ejecución del lenguaje. [23] No es posible un análisis estático completo de C++. Sin embargo, el proyecto Genode publica pruebas unitarias para análisis empíricos.
Los componentes de Genode consumen y publican el estado utilizando datos estructurados serializados en XML , en contraste con el modelo de texto plano de los derivados de Unix. El marco Genode utiliza XML de manera efectiva en todos sus componentes porque XML se analiza y genera fácilmente mediante programación y, al mismo tiempo, es posible comprenderlo y editarlo manualmente.
Genode carece de cualquier espacio de nombres global práctico ; no existe 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 componentes puede percibirse como una labor intensa en comparación con Unix. Sin embargo, la administración compartimentada permite que los subsistemas sean administrados por administradores de sistemas que no son de confianza entre sí 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 sistema básico pequeño con detección y configuración automática de dispositivos, algunas interfaces de control GUI y interfaces para el administrador de paquetes Genode. El sistema no incluye un entorno de escritorio completo, pero requiere que los usuarios implementen máquinas virtuales que alojen sistemas operativos tradicionales para obtener un escritorio con todas las funciones. Sculpt se distingue del marco del sistema operativo Genode en que depende en gran medida de la reconfiguración dinámica utilizando componentes de control privilegiados en contraste con los sistemas especializados con políticas estáticas.