2 puntos por GN⁺ 2024-07-16 | 1 comentarios | Compartir por WhatsApp

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

 
GN⁺ 2024-07-16
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

    • El ciclo de vida de los inode debería gestionarse por sistema de archivos
  • Se plantea la pregunta de si Rust necesita cambios para facilitar más las llamadas a C

    • Falta una comprensión clara de la interoperabilidad entre Rust y C
    • En C++ y Objective C basta con incluir archivos de encabezado y llamar funciones
    • Swift puede incluir archivos de Objective C y llamar a C
    • Más que adaptarse a los desarrolladores del kernel, Rust como lenguaje necesita volverse un poco más flexible
  • No está claro si la API de Rust envuelve la API de C o si la reimplementa

    • Si es una reimplementación, usar los mismos nombres que la API de C puede causar problemas
  • Agregar Rust al kernel introduce complejidad adicional

    • Si se escribiera un sistema operativo nuevo desde cero, se podrían usar todas las funciones del lenguaje
    • Al añadirlo a una base de código existente y enorme, surgen problemas adicionales
  • La discusión es muy civilizada

    • No están de acuerdo con el tono negativo
    • Son optimistas respecto a que las personas involucradas hayan comunicado claramente los problemas
  • Tener más opciones en el kernel de Linux siempre es beneficioso

    • Rust no es la solución para todos los problemas
    • Rust ofrece un modelo de programación seguro, pero es limitado
    • ¿Problemas de memoria? ¡Usa Rust!
    • ¿Problemas de concurrencia? ¡Cámbiate a Rust!
    • Pero no se puede hacer todo lo que hace C sin usar bloques unsafe
    • Rust puede aportar una nueva perspectiva, pero no es una solución completa
  • Algunos comentarios al final de la página de lwn.net son groseros

    • Imagina decirle a alguien que contribuye a un proyecto de código abierto: "la ciencia avanza con un funeral a la vez"
  • Hay discusión sobre el problema de la falta de coincidencia entre los nombres de la API de C y la API de Rust

    • Las convenciones de nombres heredadas son difíciles
    • Se puede mantener el mismo nombre o envolverlo con uno nuevo
    • Poner nombres es difícil