Chromium, el proyecto de código abierto detrás de Google Chrome, está habilitando un nuevo soporte para Rust en su base de código C ++. Aunque por el momento, solamente será de forma limitada.
El navegador de código abierto de Chromium es el proyecto que sustenta a Microsoft Edge, Opera, Vivaldi es el proyecto de y docenas de navegadores más, y ahora admitirá el uso de bibliotecas Rust de terceros de C++.
El equipo está implementando las herramientas necesarias para poder habilitar el código Rust en el binario de Chrome durante este año, según Dana Jansens del equipo de seguridad de Chrome.
Permitir Rust para bibliotecas de terceros en Chromium es un paso importante hacia un lenguaje moderno y seguro para la memoria, aunque pueda ser más limitado que el Proyecto de código abierto de Android (AOSP) que introduce a Rust como un nuevo lenguaje de plataforma en Abril de 2021.
AOSP permite que Rust desarrolle componentes nativos del sistema operativo y ahora ya representa el 21 % del código nuevo en AOSP. El cambio ha coincidido con una caída en las vulnerabilidades de seguridad de la memoria del 76 % al 35 % de las vulnerabilidades totales en Android.
AOSP, AWS, el proyecto del kernel de Linux, Meta, Microsoft y muchos más están adoptando Rust en la programación de sistemas por sus garantías de seguridad de la memoria.
Google muestra KataOS, un sistema operativo seguro escrito en Rust
En términos generales, Rust puede ayudar a reducir las vulnerabilidades relacionadas con la memoria, que constituyen la gran mayoría de los problemas de seguridad del software actualmente.
Las vulnerabilidades llegan por culpa del código escrito en C y C ++ que no son seguros para la memoria, lo que permite a los programadores romper fácilmente las reglas de seguridad de la memoria. En Octubre, Apple detalló cómo abordaba la seguridad de la memoria en XNU; el kernel utilizado para iPhone, iPad y Mac.
Por ahora, el proyecto Chromium ha impuesto varias restricciones a Rust para esas bibliotecas. Por ejemplo, permitirá Rust para bibliotecas de terceros de Chromium si existe una “necesidad comercial”, como reducir significativamente el riesgo de errores de memoria, bloqueos y otros problemas “en comparación con la biblioteca de terceros existente y código C++ relacionado”.
Además de limitar el soporte de Rust a bibliotecas de terceros, el equipo opta por admitir solo la interoperabilidad unidireccional, desde C++ hasta Rust, para controlar la forma del árbol de dependencia.
“Rust no puede depender de C++, por lo que no puede conocer los tipos y funciones de C++, excepto a través de la inyección de dependencias. De esta manera, Rust no puede aterrizar en código C++ arbitrario, solo en funciones pasadas a través de la API desde C++”, señala Jansens.
Jansens explica que es demasiado arriesgado permitir la interoperabilidad completa de C/C++ y Rust entre lenguajes.
“En un nivel alto, lo que descubrimos fue que debido a que C++ y Rust se rigen por reglas diferentes, las cosas pueden torcerse muy fácilmente”, señala Jansens.
Actualmente, también hay una falta de herramientas de interoperabilidad (interoperabilidad) que brinden soporte del compilador y el sistema de tipos de cada idioma.
Rust encabeza las listas de los lenguajes WebAssembly más populares
Google está trabajando en una herramienta de interoperabilidad bidireccional C++/Rust denominada Crubit. Sin embargo, Google lo describe como una herramienta “extremadamente experimental” en esta primera etapa y desaconseja su uso.