Rust-Linux

Para convertirse en desarrollador de Linux, solía necesitar C como pasaporte. Ahora Rust también puede permitirle ser un programador de sistemas operativos.

El chiste dice: "C combina el poder y el rendimiento del lenguaje ensamblador con la flexibilidad y facilidad de uso del lenguaje ensamblador". Habiendo programado tanto en C como en IBM 360 Assembler, fue hace mucho tiempo, está bien, hay algo en eso. Debido a su potencia, rendimiento y portabilidad, C se convirtió en el idioma de sistema operativo de elección, incluido, por supuesto, Linux.

Sólo hay un pequeño problema con C. Es muy fácil cometer errores. Grandes y feos. Ahí es donde entra Rust. Verá, según Alex Gaynor y Geoffrey Thomas en la Cumbre de seguridad de Linux de 2019, casi dos tercios de los agujeros de seguridad del kernel de Linux [PDF] provienen de problemas de seguridad de la memoria. ¿Y de dónde proceden? Debilidades inherentes en C y C ++. Rust, por otro lado, evita estos problemas mediante el uso de interfaces de programación de aplicaciones (API) mucho más seguras . Específicamente, los defensores de Rust afirman que el lenguaje no le permitirá perder memoria ni crear posibles desbordamientos de búfer.

Suena bien para mi. Mejor aún, suena bien para los desarrolladores del kernel. En la Conferencia de Plomeros de Linux 2020, los programadores sugirieron que era hora de considerar el uso del lenguaje Rust para el nuevo código en línea de Linux [PDF], ya que Rust es "una C mejor en la forma en que el kernel quiere que sea C". No piense ni por un momento que están proponiendo reescribir 25 millones de líneas de C en Rust. ¡No están tan locos! Solo quieren la opción de usar Rust para el nuevo código de Linux.

Por supuesto, eso viene con sus propios problemas. Rust debe hacer uso de las API existentes del kernel de Linux; lidiar con la compatibilidad de la interfaz binaria de la aplicación (ABI) entre Rust y C; y los desarrolladores y mantenedores tendrán que trabajar con dos lenguajes en lugar de uno solo. La pregunta del código de un millón de líneas es: "¿Qué piensa Linus Torvalds?" Porque si no le gusta, no va a ninguna parte.

A pesar de que se inició en C, Torvalds está abierto a usar Rust en Linux. Pero, como escribió en la Lista de correo del kernel de Linux (LKML) en julio de 2020, es cauteloso. "Me gustaría que el primer controlador de óxido (o lo que sea) se presente en un formato tan simple que las fallas sean obvias y simples". Desde entonces, Torvalds se ha vuelto un poco más acogedor. En una entrevista, Torvalds me dice que si bien "de ninguna manera 'está presionando' por Rust", está "abierto a ello considerando las ventajas prometidas y evitando algunos problemas de seguridad, pero también sé que a veces las promesas no dan resultado".

Torvalds dice: "El primer objetivo principal de Rust parecen ser los controladores, simplemente porque ahí es donde se encuentran muchos objetivos posibles diferentes, y tienes estas partes individuales del kernel que son bastante pequeñas e independientes. Eso puede no ser muy interesante objetivo para algunas personas, pero es el más obvio ". Además, dado que "muchos controladores solo son relevantes en un par de arquitecturas de destino, todo el problema con el código Rust que no es compatible con algunas arquitecturas es un problema menor".

El desarrollador senior del kernel de Linux, Greg Kroah-Hartman, me dice que está de acuerdo en que "los controladores son probablemente el primer lugar para un intento como este, ya que son las 'hojas finales' del árbol de dependencias en la fuente del kernel. Dependen de la funcionalidad del núcleo del kernel, pero nada depende de ellos ".

El hecho de que Torvalds y Kroah-Hartman estén abiertos a Rust no significa que todos lo estén. Torvalds agrega: "Las personas que se quejan de 'Rustificación' en el espacio de usuario no es una buena señal para ningún uso futuro del kernel, pero bueno, ya veremos. El kernel es diferente de los proyectos del espacio de usuario, más difícil en algunos aspectos (usamos mucho de archivos de encabezado muy extraños que empujan el límite de lo que se puede llamar 'C'), pero más fácil en muchos otros aspectos (principalmente en el sentido de que el kernel es bastante autónomo, y luego no depende de otros proyectos para la binario final) ".

Aún así, Kroah-Hartman dice: "Todo se reducirá a qué tan bien la interacción entre las estructuras del núcleo del kernel y las reglas de vida que están escritas en C se pueden mapear en las estructuras de Rust y las reglas de vida para que los controladores en Rust puedan usarlas correctamente. Eso va a requerir mucho trabajo cuidadoso por parte de los desarrolladores que quieran conectar todo esto y les deseo la mejor de las suertes ".

Entonces, la puerta está abierta, pero ¿quién puede llamar al gato para que realmente haga el código? En primer lugar está Sylvestre Ledru, directora diurna de Mozilla y desarrolladora nocturna de Debian Linux. Se ha portado una versión de Rust Coreutils , el archivo básico de GNU, concha, y utilidades de manipulación de texto, a Linux a través de la infraestructura LLVM compilador y su extremo delantero lenguaje C Clang . Ledru lo ha portado a Debian Linux. Actualmente puede iniciar Linux con él y poner en funcionamiento el escritorio GNOME, instalar muchos de los paquetes Debian más populares y compilar Firefox, el kernel de Linux y LLVM / Clang en él. Eso sí, no está listo para producción, algunos comandos son mucho más lentos que sus antepasados ​​C y otros no admiten todas las opciones, pero es un buen comienzo.

Google está financiando el Grupo de Investigación de Seguridad de Internet (ISRG), más conocido por Let's Encrypt, para patrocinar Rust en Linux. Esta no es la primera vez que ISRG se dedica a solucionar problemas de memoria. Tiene un departamento completo, Prossimo , dedicado a la programación segura para la memoria. Sus otros proyectos son un módulo TLS seguro para la memoria para el servidor web Apache, una utilidad de transferencia de datos curl segura para la memoria y Rustls seguro para la memoria, una alternativa OpenSSL más segura.

Estos fondos se utilizarán para pagar a Miguel Ojeda, un ingeniero de software y desarrollador del kernel de Linux, para que trabaje a tiempo completo en Rust en Linux. Anteriormente, Ojeda había creado una Solicitud de comentarios (RFC) sobre el asunto . Esto plantea preocupaciones sobre traer "un nuevo lenguaje principal en el kernel" y las recompensas que podrían provenir de usar Rust en Linux. Estos son:

  • El nuevo código escrito en Rust tiene un riesgo reducido de errores de seguridad de la memoria, carreras de datos y errores de lógica en general.
  • Los encargados del mantenimiento confían más en refactorizar y aceptar parches para módulos gracias al subconjunto seguro de Rust.
  • Los nuevos controladores y módulos se vuelven más fáciles de escribir, gracias a abstracciones sobre las que es más fácil razonar, basadas en características de lenguaje moderno, así como respaldadas por documentación detallada.
  • En general, más personas se involucran en el desarrollo del kernel gracias al uso de un lenguaje moderno.
  • Al aprovechar las herramientas de Rust, seguimos aplicando las pautas de documentación que hemos establecido hasta ahora en el proyecto. Por ejemplo, requerimos tener documentadas todas las API públicas, las condiciones previas de seguridad, los bloques "inseguros" y los invariantes de tipo.

Entonces, ¿cómo va todo hasta ahora? En la Conferencia virtual de fontaneros de Linux de 2021, Ojeda dijo que Rust elimina en gran medida los problemas de comportamiento indefinido del código C porque "Rust no tiene un comportamiento indefinido". Esto lo hace más seguro.

Si bien está perfectamente bien hacer software crítico para la seguridad (como el que se usa en un avión o un automóvil) en C o en muchos idiomas, Rust es seguro (r) en el sentido de que no tiene fallas de comportamiento indefinidas. Al mismo tiempo, insistió Ojeda, si programa bien con Rust, "puede generar código tan bueno y rápido como C o C ++".

Pero a pesar de todas las ventajas que Rust puede aportar a Linux, no está exento de problemas. Por ejemplo, "aprender un segundo idioma será una gran carga para los mantenedores". La respuesta será proporcionar "documentación estricta en línea del código".

Se están haciendo progresos. Si bien no ejecutará un kernel de Linux basado en Rust en el corto plazo, o más probablemente nunca, pronto usará Linux con muchos controladores y otros componentes escritos en Rust. Algunos de ustedes ya lo están. Por ejemplo, hoy puede ejecutar AWS Bottlerocket, una distribución de Linux mínima para contenedores basada en gran parte en Rust.

 

Fuente: theregister | somoslibres

¿Quién está en línea?

Hay 20830 invitados y ningún miembro en línea