En la conferencia Cumbre de Mantenedores, que se está celebrando, se debatió sobre los resultados de un experimento para añadir capacidades de desarrollo de componentes de Rust al kernel de Linux. Los participantes consideraron el experimento un éxito y decidieron incorporar el soporte de Rust al núcleo principal, eliminando así su designación de experimental.
Hace tres años, se añadió al kernel 6.1 la capacidad de desarrollar controladores y módulos en Rust. Desde entonces, el kernel ha incluido abstracciones para desarrollar controladores en Rust para GPU, sistemas de archivos, dispositivos de bloque, adaptadores de red y dispositivos USB. El controlador Nova para GPU NVIDIA, asahi para GPU Apple AGX, Tyr para GPU ARM Mali y rust_ext2 para el sistema de archivos Ext2 se desarrollan en Rust. Se ha adoptado en el kernel una implementación de IPC Binder escrita en Rust. El proyecto RROS está desarrollando un subsistema de tiempo real para el kernel de Linux, escrito en Rust. La compatibilidad con Rust está deshabilitada por defecto y no incluye Rust como dependencia obligatoria de la compilación del kernel.
Los defensores de Rust creen que el lenguaje elimina la mayoría de los errores principales causados por los casos especiales del lenguaje C, lo que permite a los revisores de código centrarse en errores lógicos y condiciones de carrera. Rust ayuda a eliminar problemas como el acceso después de la liberación, los desbordamientos de búfer, las liberaciones incorrectas de recursos durante la gestión de errores y el olvido de las comprobaciones del código de retorno de errores. El uso de Rust para código nuevo también reduce el tiempo de desarrollo al reducir los esfuerzos de depuración y las sólidas garantías del lenguaje que detectan errores en las primeras etapas del proceso de desarrollo.
Quienes se oponen a la inclusión de Rust en el kernel consideran inaceptable el uso de múltiples lenguajes de programación en proyectos complejos. Las bases de código mixtas complican el trabajo de los mantenedores, ya que los hacen dependientes de código escrito en otro lenguaje. Por ejemplo, si existen enlaces de Rust, los desarrolladores de subsistemas basados en C deben considerar el impacto de los cambios en la funcionalidad continua de dichos enlaces.
Fuente: opennet.ru
