# Genode

Genode es un entorno de sistema operativo libre y de código abierto que está compuesto por una capa de abstracción micronúcleo y una colección de componentes de espacio de usuario. El proyecto destaca por ser uno de los pocos sistemas operativos de código abierto que no está inspirado en un sistema comercial como, por ejemplo, Unix. La filosofía tras el diseño se centra principalmente en que una base pequeña de computación fiable es esencial en un sistema operativo orientado a la seguridad.
Genode se puede usar como base para sistemas operativos de escritorios o de tabletas o como monitor de máquinas virtuales para sistemas operativos invitados. El entorno se ha utilizado como componente fiable de sistemas de virtualización seguros para las arquitecturas x86 y ARM.
Dado el escaso tamaño de su base de código, Genode es una alternativa flexible a otros sistemas operativos más complejos basados en Unix. Es por esto que el entorno se ha utilizado como sistema básico para la investigación en ámbitos tales como la virtualización, la comunicación entre procesos, el aislamiento de la pila IP, la monitorización y el desarrollo de software.

## Historia

Originalmente, Genode fue desarrollado en la Universidad Técnica de Dresde en el marco de un informe de investigación sobre la arquitectura de sistemas operativos llamado "Bastei". El informe se centraba en determinar la aplicabilidad de un sistema operativo basado en componentes utilizando una seguridad basada en lo que denominamos “capabilities”. El informe fue motivado en parte por los conocimientos adquiridos en las investigaciones que se llevaron a cabo simultáneamente sobre los microhipervisores L4. Debido al éxito de un prototipo anterior, los autores del informe fundaron la compañía Genode Labs con el objetivo de desarrollar Bastei bajo el nombre Genode OS Framework.

## Versiones

El proyecto se desarrolla como código abierto bajo los términos de la licencia pública general de Affero, pudiendo la entidad comercial ofrecer licencias alternativas. Se lanzan nuevas versiones cada tres meses para cambios en la ABI del sistema y las API y como documentación del progreso. El entorno está disponible en forma de código fuente y a partir de la versión 18.02 se proporciona también un derivado de propósito general llamado Sculpt con despliegue de archivos binarios.

## Características de arquitectura

Genode se basa en la filosofía general de micronúcleos – cuanto más pequeño y simple el código, más fácil se puede verificar su fiabilidad y corrección. Genode está extendiendo esta filosofía al espacio de usuario mediante la composición de aplicaciones complejas a partir de componentes de pequeño tamaño. Cada componente existe en una jerarquía estricta de relaciones de tipo "padre-hijo". Cualquier componente que actúe como padre puede aplicar políticas de recursos y de comunicación entre componentes a sus hijos. Este diseño jerárquico proporciona una compartimentación intuitiva y una deescalada de privilegios porque los subsistemas especializados están anidados dentro de subsistemas más genéricos, mitigando el problema conocido como “confused deputy problema” que es endémico en sistemas con políticas centralizadas o con superusuario.

## Crítica
### C++

A menudo se ha criticado a Genode por su elección de C++ como lenguaje de implementación (otros sistemas operativos que usan C++ son BeOS, Fuchsia, Ghost, Haiku, IncludeOS, OSv, Palm OS, ReactOS, Syllable, y los principales motores de navegación). Estas críticas con frecuencia afirman que C++ es una elección desacertada para la implementación de bibliotecas y API del sistema a causa de la complejidad inherente de C++ y a la dificultad que plantea el análisis del código para su correcto funcionamiento. Mientras que Genode utiliza herencia múltiple y plantillas en su biblioteca del sistema, no se permite el uso de la biblioteca estándar de C++ y las características que se basan en el estado global implícito, tales como el almacenamiento de hilo local y el asignador global han sido eliminadas del entorno del lenguaje. No es posible llevar a cabo un análisis estático completo de C++, sin embargo, el proyecto Genode publica tests de unidad para realizar análisis empíricos.

### XML

Los componentes de Genode utilizan y publican estados como datos estructurados serializados en XML, en contraste con los modelos de texto plano de los derivados de Unix. XML es criticado por sus características complejas, ineficaz representación y la relativa dificultad que plantea la edición manual de documentos XML. El entorno Genode usa XML de modo efectivo en todos sus componentes porque el programa genera e interpreta fácilmente XML, siendo también posible entenderlo y editarlo manualmente. El dialecto que utiliza Genode es un subconjunto simple del lenguaje XML, no obstante, algunos nuevos usuarios con frecuencia advierten de que la edición de XML resulta tediosa y proclive al error. Puesto que Genode no se basa en ninguna característica en especial de XML, el lenguaje de marcado de datos de Genode se podría sustituir por otros más simples tales como JSON o sexps. No obstante, no se han anunciado aun planes de migración.

### Espacio de nombres local

Genode no tiene ningún espacio de nombres global. No existe ningún sistema de archivos global ni registros de procesos o terminales de comunicación entre procesos. Esto contrasta con sistemas como UNIX que presentan un sistema de ficheros ubicuo y permite que un contexto de superusuario maneje arbitrariamente cualquier proceso dentro del sistema. Declarar explícitamente los permisos y las rutas de los componentes puede parecer que requiere más trabajo en comparación con UNIX. No obstante, la compartimentación de la administración permite que los subsistemas puedan ser gestionados por administradores mutuamente no confiables en la misma máquina sin recurrir a la virtualización, método común de aislamiento.

## Sculpt

El proyecto Genode publica un sistema operativo desktop llamado Sculpt, pensado para el usuario de laptops actual. Sculpt es un sistema de base pequeña con detección y configuración automática de dispositivo, algunas GUI de control y una interfaz para el gestor del paquete Genode. El sistema no contiene un entorno desktop completo, sino que requiere que los usuarios implementen máquinas virtuales que alojen sistemas operativos tradicionales para conseguir un desktop con características completas. Sculpt se distingue del sistema operativo Genode en que depende en gran medida en la reconfiguración dinámica mediante componentes privilegiados de control, en contraste con los sistemas especializados que tienen políticas estáticas.