Usar Rust en sistemas de archivos
Objetivos
- Usar el sistema de tipos de Rust para detectar más errores en tiempo de compilación
- Aumentar la productividad frente al código en C al automatizar tareas como la liberación de recursos
- Reducir vulnerabilidades relacionadas con la memoria y acortar el tiempo de depuración
Ventajas de Rust
- Rust elimina el comportamiento indefinido y ofrece capacidades para ver qué está ocurriendo dentro del código
- Es posible demostrar la corrección del código escrito en Rust, lo que reduce bugs que obstaculizan el desarrollo de funciones
Ejemplo del sistema de tipos de Rust
- La función
iget_locked() tiene requisitos complejos
- En Rust puede reemplazarse por la función
get_or_create_inode(), y el sistema de tipos hace cumplir esos requisitos
Debate sobre el cambio de nombres en la API
- Problema de falta de coincidencia entre los nombres de la API de C y la API de Rust
- Puede resultar poco familiar para la comunidad de desarrollo existente
- Puede ser necesario alinear los nombres
Problemas generales
- Hace falta decidir si las abstracciones de Rust se usarán de forma general en todos los sistemas de archivos del kernel, o si se concentrarán solo en sistemas de archivos simples escritos en Rust
- A medida que el código en C evoluciona, pueden surgir problemas de sincronización con el código en Rust
Problemas del ciclo de vida de los objetos
- El ciclo de vida de los objetos puede variar según el sistema de archivos
- Si se codifica un único ciclo de vida en la API de Rust, puede que no funcione para algunos sistemas de archivos
Problemas de los bindings de Rust
- No todos los sistemas de archivos migrarán de inmediato a Rust
- A medida que el código en C evoluciona, los bindings de Rust pueden romperse
- Si los bindings de Rust se rompen, el problema recae en los desarrolladores de Rust-for-Linux
Conclusión
- Continuar desarrollando los bindings de Rust mientras el código en C sigue evolucionando
- Con el tiempo quedará más claro si codificar mucho significado en el sistema de tipos de Rust es algo bueno o malo
Resumen de GN⁺
- Introducir Rust en los sistemas de archivos ayudará mucho a mejorar la seguridad de memoria y la productividad
- El sistema de tipos de Rust puede hacer cumplir requisitos complejos de la API, elevando la corrección del código
- Si los desarrolladores existentes de C no aprenden Rust, pueden surgir dificultades como problemas de sincronización
- Si los bindings de Rust se rompen, resolverlo quedará en manos de los desarrolladores de Rust-for-Linux
- Un proyecto con funciones similares es Fuchsia OS de Google
1 comentarios
Comentarios de Hacker News
Que cada sistema de archivos gestione el ciclo de vida de los inode de forma distinta y pretender manejarlo con la misma función va en contra de la capa de abstracción
Se plantea la pregunta de si Rust necesita cambios para facilitar más las llamadas a C
No está claro si la API de Rust envuelve la API de C o si la reimplementa
Agregar Rust al kernel introduce complejidad adicional
La discusión es muy civilizada
Tener más opciones en el kernel de Linux siempre es beneficioso
unsafeAlgunos comentarios al final de la página de lwn.net son groseros
Hay discusión sobre el problema de la falta de coincidencia entre los nombres de la API de C y la API de Rust