En la conferencia Linux Plumbers 2022, que se está llevando a cabo estos días, un ingeniero de Western Digital presentó un informe sobre el desarrollo de un controlador experimental para unidades SSD con interfaz NVM-Express (NVMe), escrito en lenguaje Rust y funcionando a nivel del núcleo de Linux. Aunque el proyecto aún se encuentra en una etapa temprana de desarrollo, las pruebas realizadas mostraron que el rendimiento del controlador NVMe en Rust es equivalente al del controlador NVMe existente en el núcleo, escrito en C.


En el informe se indica que el controlador NVMe actual en C satisface completamente a los desarrolladores, pero el subsistema NVMe es una buena plataforma para estudiar la viabilidad del desarrollo de controladores en Rust, ya que es bastante simple, se usa ampliamente, tiene altos requisitos de rendimiento, cuenta con una implementación de referencia probada para comparación y admite diversas interfaces (dev, pci, dma, blk-mq, gendisk, sysfs).
Se señala que el controlador PCI NVMe en Rust ya proporciona la funcionalidad necesaria para operar, pero aún no está listo para un uso general, ya que requiere ajustes adicionales. Entre los planes futuros se menciona la eliminación de bloques unsafe en el código, el soporte para las operaciones de eliminación de dispositivos y descarga de controladores, el soporte para la interfaz sysfs, la implementación de inicialización diferida, la creación de un controlador para blk-mq y experimentos utilizando un modelo de programación asincrónico para queue_rq.

Además, se pueden mencionar los experimentos realizados por NCC Group sobre el desarrollo de controladores en Rust para el núcleo de FreeBSD. Como ejemplo, se analiza en detalle un simple controlador echo que devuelve datos escritos en el archivo /dev/rustmodule. En la siguiente fase de los experimentos, NCC Group está considerando la posibilidad de reestructurar en Rust componentes básicos del núcleo para mejorar la seguridad de las operaciones de red y archivo.
Sin embargo, a pesar de que se ha demostrado la posibilidad de crear módulos simples en el lenguaje Rust, una integración más profunda de Rust en el núcleo de FreeBSD requerirá trabajo adicional. Por ejemplo, se menciona la necesidad de crear un conjunto de capas de abstracción sobre los subsistemas y estructuras del núcleo, similares a las extensiones desarrolladas por el proyecto Rust for Linux. En el futuro, se planea realizar experimentos similares con el núcleo de Illumos y destacar abstracciones comunes en Rust que podrían ser utilizadas en controladores escritos en Rust para Linux, BSD e Illumos.
Según las compañías Microsoft y Google, alrededor del 70% de las vulnerabilidades en sus productos de software son causadas por operaciones inseguras con la memoria. Se supone que el uso del lenguaje Rust permitirá reducir el riesgo de aparición de vulnerabilidades causadas por el manejo inseguro de la memoria y eliminar errores como acceder a áreas de memoria después de su liberación y desbordamientos de búfer.
El manejo seguro de la memoria se garantiza en Rust durante la compilación a través de la verificación de referencias, el seguimiento de la propiedad de los objetos y la consideración del tiempo de vida de los objetos (áreas de visibilidad), así como mediante la evaluación de la corrección del acceso a la memoria durante la ejecución del código. Rust también proporciona medios para proteger contra desbordamientos enteros, requiere la inicialización obligatoria de los valores de las variables antes de su uso, maneja mejor los errores en la biblioteca estándar, aplica el concepto de inmutabilidad (immutable) de referencias y variables por defecto, y ofrece una fuerte tipificación estática para minimizar errores lógicos.
Fuente: opennet.ru
