· 3 min de lectura · Por Grover Cordova
Cómo adoptar Rust en un sistema C++ existente
Una estrategia gradual: escribe el código nuevo en Rust, aísla las zonas de mayor riesgo y conecta ambos mundos con cuidado.
Reescribir un sistema grande de C++ de una sola vez es arriesgado y rara vez es necesario. Una estrategia gradual reduce el riesgo desde la primera entrega.
Empieza por el código nuevo
Google observó en Android que las vulnerabilidades de memoria se concentran en el código nuevo. Por eso, escribir las funciones nuevas en un lenguaje seguro en memoria puede aportar mucho sin tocar el código antiguo y ya probado.
Prioriza por exposición
No todo el código tiene el mismo riesgo. Empieza por lo que recibe datos no confiables: parsers, decodificadores, protocolos de red y límites entre procesos.
Elige cómo conectar ambos lenguajes
cxxgenera puentes seguros entre Rust y C++ a partir de una interfaz declarada.bindgengenera enlaces a partir de cabeceras C y C++, lo que suele ser útil con APIs amplias.- Una frontera C explícita es más manual, pero también más estable y fácil de auditar.
Mantén la frontera pequeña y bien definida. Cada cruce es código unsafe que hay que revisar.
Envuelve lo inseguro
Encierra el código unsafe en módulos pequeños que expongan una interfaz segura, y documenta qué condiciones debe cumplir cada bloque.
Rust no elimina todo el riesgo. Google informó de un desbordamiento de búfer en código Rust unsafe de Android (CVE-2025-48530), detectado antes de llegar a una versión pública.
Integra la construcción
Define desde el inicio cómo convivirán CMake o Bazel con Cargo, cómo se ejecutarán las pruebas de ambos lenguajes y cómo se gestionarán las dependencias. Muchos retrasos vienen de aquí, no del lenguaje.
Mide el avance
Registra vulnerabilidades, reversiones y tiempo de revisión antes y después. Esos datos permiten decidir si conviene ampliar la adopción.