Los desarrolladores de AerynOS, anteriormente conocido como SerpentOS, han publicado un artículo detallado que revela detalles del concepto y la implementación técnica del proyecto, con una justificación de las decisiones arquitectónicas tomadas. El líder del proyecto, Ikey Doherty, enfatiza que AerynOS no es simplemente “otra distribución de Linux”, sino una plataforma, una base y un conjunto de herramientas construido con una visión clara.
La idea principal del proyecto se formula como una pregunta: "¿Qué pasaría si el sistema operativo se comportara como una infraestructura moderna?" AerynOS se presenta como una respuesta a esta pregunta: un sistema construido desde cero en lugar de seguir el modelo tradicional de mutaciones integradas dentro de una distribución. El proyecto se basa en la experiencia de los autores en el desarrollo de otras distribuciones, incluidas Solus y Clear Linux.
Entre las soluciones técnicas clave de AerynOS se encuentran:
- Usando la cadena de herramientas LLVM en lugar de GNU, con libc++ y compiler-rt de forma predeterminada. Los desarrolladores explican esta decisión no simplemente como una preferencia por LLVM, sino como una elección estratégica para utilizar mejores diagnósticos y garantizar la corrección y portabilidad de los paquetes. El sistema utiliza glibc en lugar de musl, lo que es una elección deliberada en favor de la compatibilidad y el rendimiento.
Como afirma el artículo: "La ventaja de rendimiento de glibc sobre musl está bien documentada, especialmente para cargas de trabajo con uso intensivo de recursos informáticos y aplicaciones que requieren un rendimiento multihilo óptimo". Los creadores enfatizan que su objetivo es construir un sistema funcional y utilizable para una variedad de escenarios de aplicación.
- El concepto de "apatridia": no se permite que los paquetes contengan ningún archivo fuera del directorio /usr. Como explican los desarrolladores, este enfoque fuerza valores predeterminados sensatos en todos los niveles y elimina "horribles conflictos de fusión de tres vías al actualizar paquetes". No hay conflictos porque todo en /etc y /var pertenece al usuario, y /usr pertenece exclusivamente al sistema. El concepto se desarrolló durante los tiempos de Clear Linux y Solus, y se desarrolló aún más en AerynOS.
- Actualizaciones atómicas: cada transacción de Moss es atómica. El sistema crea rápidamente un nuevo árbol /usr utilizando enlaces duros del caché deduplicado. Una vez creado y preparado con éxito, el nuevo árbol se reemplaza atómicamente. La transacción preparada en realidad se intercambia con el directorio real /usr utilizando renameat2 con el indicador RENAME_EXCHANGE. La actualización se realiza completamente o no se realiza en absoluto, sin estados intermedios.
- Gestión de arranque basada en los proyectos blsforme y disks-rs. La particularidad de este enfoque es que el sistema genera dinámicamente parámetros para la línea de comandos del kernel leyendo los superbloques de los dispositivos del sistema de archivos raíz, por lo que AerynOS no tiene un archivo de configuración que contenga el parámetro "root=". Además, el identificador de transacción de musgo se codifica en la línea de comandos del kernel y se procesa durante el arranque inicial en initramfs. "En resumen, esto significa que cada núcleo está correctamente sincronizado con su sistema de archivos raíz correspondiente, y la reversión es barata, fácil y accesible directamente desde el menú de arranque", explican los desarrolladores. Otra ventaja es que no existe /etc/default/grub, y si se borra el ESP, Moss puede reconstruirlo desde cero.
- El formato de paquete .stone es un formato de paquete binario propietario con un encabezado independiente de la versión para adaptarse a cambios futuros. Cada paquete .stone contiene cuatro tipos de carga útil específicos, cada uno de los cuales puede evolucionar independientemente gracias al control de versiones:
- La carga de contenido es un bloque secuencial de datos deduplicados, es decir, el contenido de los propios archivos del paquete.
- Carga útil del índice: contiene compensaciones para la carga útil del contenido, indexada por el hash XXH128 del contenido (se planea migrar a Blake3). Esto le permite encontrar y extraer datos de manera eficiente.
- Carga útil de diseño: describe el diseño esperado del sistema de archivos cuando se aplica el paquete, es decir, dónde y qué archivos se deben instalar.
- Carga útil de metadatos: una secuencia de registros de metadatos etiquetados y fuertemente tipados, como el nombre del paquete, las capacidades proporcionadas, etc.
Todas las cargas se comprimen utilizando Zstd, que proporciona un excelente rendimiento de descompresión manteniendo una buena relación de compresión. El proceso de "instalación" de .stone es fundamentalmente diferente de otros sistemas. En lugar de instalar archivos directamente, el paquete se almacena en caché y su contenido se integra en un almacén de contenido direccionable (CAS) común. Los metadatos y la información de diseño se almacenan por separado y se utilizan al crear una transacción. Este enfoque garantiza la atomicidad de las actualizaciones y la capacidad de revertirlas, ya que cada transacción crea una nueva partición raíz en lugar de modificar una existente.
Los desarrolladores señalan que el enfoque actual de emular la gestión imperativa de paquetes es "completamente inútil" y "en realidad introduce más errores de los que resuelve". Dado que se crea un nuevo sistema de archivos raíz para cada transacción, el plan futuro es crear un nuevo gráfico para cada transacción, alejándose de los cambios en línea en favor de un enfoque declarativo similar a Gentoo o Nix.
Otra aclaración interesante se refiere a la inmutabilidad. Los creadores señalan que a menudo se describe a AerynOS como un sistema operativo inmutable, pero "esto no es del todo cierto". Aunque cada transacción genera un nuevo árbol /usr y los cambios locales no se conservan, el sistema no es inmutable en el sentido de acceso de sólo lectura. En el futuro, se planea implementar una verdadera inmutabilidad del sistema sin la necesidad de reiniciar utilizando erofs y overlayfs.
Actualmente, AerynOS se está desarrollando activamente, ya lanza imágenes ISO con el entorno GNOME, es adecuado para juegos (soporte para controladores NVIDIA, Steam, Flatpak), tiene usuarios reales que notan la estabilidad e innovación del sistema. Según los desarrolladores, el proyecto está en fase alfa y no está exento de problemas, pero ya representa un sistema completo que “simplemente funciona”.
Fuente: opennet.ru