Christoph Hellwig, mantenedor de las subsistemas DMA, KVM, Slab Allocator y arquitectura PowerPC en el núcleo de Linux, se negó categóricamente a aceptar las envolturas en Rust para la subsistema DMA y se unió a la discusión sobre las reglas de acompañamiento de Rust dentro del núcleo, publicadas por el proyecto Rust for Linux. Según Christoph, tales reglas son inútiles hasta que sean acordadas con la comunidad y se incluyan en la documentación del núcleo.
Christoph también señaló que en las reglas se indica información incorrecta respecto a que los mantenedores pueden tomar decisiones por sí mismos sobre la inclusión de código relacionado con Rust en sus subsistemas. Según Christoph, en una conversación privada, Linus Torvalds declaró que estaba decidido a aceptar el código en Rust en el núcleo, a pesar de las objeciones de los mantenedores. Así, los desarrolladores y mantenedores del núcleo deberán lidiar con Rust, quieran o no.
Christoph también volvió a comparar la propagación de envolturas en Rust con un tumor canceroso que se extenderá a todos los subsistemas del núcleo y conducirá a una fragmentación. De un todo, el núcleo se convierte en un proyecto escrito en varios lenguajes, sin una clara definición de cuándo se debe utilizar cada lenguaje. Según Christoph, trabajar con una base de código tan mixta se ha vuelto su peor pesadilla, ya que en tales condiciones el código se reescribe constantemente de un lenguaje a otro y luego de regreso.
A su vez, Christoph pide que se le explique el objetivo de la implementación de Rust en el núcleo. Si el objetivo es resolver problemas de seguridad que surgen al trabajar con memoria a bajo nivel, entonces primero se requiere modernizar el código existente. Dado que los mantenedores reaccionan de manera dolorosa incluso ante cosas triviales, como las comprobaciones de desbordamiento de enteros, no está claro cómo se puede superar la brecha entre una parte del núcleo que ni siquiera acepta reglas simples de seguridad y otra parte que cumple con reglas estrictas. Si el objetivo es simplificar el desarrollo de controladores, entonces introducir el soporte para otro lenguaje solo agregará más trabajo y aumentará la carga sobre las personas que ya están sobrecargadas manteniendo la infraestructura del núcleo en funcionamiento.
En cuanto a los defensores de la implementación de Rust en el núcleo, se mencionan los siguientes objetivos:
- Escribir nuevo código en el lenguaje Rust reducirá el riesgo de errores al trabajar con la memoria y condiciones de carrera, y también eliminará algunos errores lógicos.
- A los mantenedores les resultará más fácil revisar los cambios y realizar la refactorización de módulos teniendo en cuenta las garantías ofrecidas por el lenguaje Rust.
- La existencia de abstracciones que utilicen las avanzadas capacidades del lenguaje Rust simplificará la creación de nuevos controladores y módulos.
- El apoyo a un lenguaje moderno atraerá a nuevos participantes al desarrollo del núcleo.
- La aplicación de las capacidades de las herramientas de Rust facilitará el cumplimiento de los requisitos de documentación del código. Por ejemplo, en el proyecto Rust for Linux se ha introducido el requisito de documentar obligatoriamente las API públicas, los requisitos de seguridad, los bloques unsafe y las invariantes de tipos.
Fuente: opennet.ru
