Los sistemas operativos modernos basados en POSIX y código abierto sufren una limitación técnica significativa: la información sobre dependencias y recursos proporcionada por los compiladores y los gestores de paquetes no se comparte entre los componentes del sistema. Esta fragmentación impide aprovechar el potencial de optimización de programas completos, resultando en software menos eficiente y oportunidades perdidas para la gestión transparente del sistema.
El problema se origina en la arquitectura tradicional de C, donde cada unidad de compilación (.c) se procesa de forma independiente en procesos separados. El compilador solo conoce el contexto de su unidad específica, lo que limita la optimización a lo que es posible dentro de ese fragmento aislado. Por ejemplo, un compilador no puede optimizar una función si no conoce los argumentos que la llamará, una tarea que requiere una optimización de programa completo (LTO) que suele realizarse en tiempo de enlazado, un momento tardío y menos eficiente.
En contraste, lenguajes modernos como Rust, Go y Zig integran el compilador y el sistema de construcción de manera estrecha. Esta integración permite al sistema de construcción notificar al compilador qué archivos se generarán, facilitando la optimización completa antes del enlazado y permitiendo una compilación incremental más granular, similar a la de Rust. Además, esta arquitectura permite evitar el repaso redundante de cabeceras compartidas y mejorar el rendimiento general. La solución propuesta implica una integración profunda entre el compilador, el sistema de construcción y el gestor de paquetes, permitiendo que los paquetes gestionen sus propias dependencias y optimizaciones, eliminando la necesidad de confiar en binarios precompilados de terceros para maximizar la eficiencia del sistema.
