Rust sin crates.io
La dependencia de Rust del registro centralizado crates.io se cuestiona como punto único de fallo y eslabón débil en la cadena de suministro de software, lo que provoca comparaciones con los ecosistemas C/C++ que se apoyan en gestores de paquetes de distribuciones Linux como Debian. Los comentaristas sopesan las ventajas y desventajas de los paquetes curados por distribuciones (más lentos, más controlados, específicos del SO) frente a gestores nativos del lenguaje como Cargo (rápidos, multiplataforma, con muchas dependencias), debatiendo sobre seguridad, reproducibilidad y ergonomía para el desarrollador. Se plantean alternativas como mirrors privados, vendoring, entornos estilo Nix/Guix y modelos de seguridad basados en capacidades, pero hay poco consenso en que sustituir crates.io por empaquetado de distribuciones suponga una mejora global.
Resiliencia y punto único de fallo
- Muchos coinciden en que crates.io es una dependencia central y un SPOF teórico, pero señalan mitigaciones existentes:
cargo vendorpara incluir en el repositorio todas las dependencias.- Proxies/mirrors locales o on-prem (Artifactory, Nexus, Azure Artifacts, panamax) ampliamente usados en entornos empresariales.
- Algunos dicen que replicar todo el registro (~1 TB) es fácil y te hace independiente de crates.io; otros señalan que pocos lo hacen realmente.
- Se admiten URLs Git, registros alternativos y compilaciones offline, pero se ven como más lentos o torpes que el registro principal.
- El modelo GOPROXY de Go se cita como un buen híbrido: proxies centrales sin una dependencia central rígida.
Lockfiles y comportamiento de actualización
- Los lockfiles ralentizan de forma significativa la ruta de “nueva versión → producción” y ya son, de facto, un paso de mediación.
- Aclaraciones:
- Para
cargo build/runnormales en un repositorio, se respetaCargo.lock. cargo installdesde crates.io ignora los lockfiles salvo que se use--locked.
- Para
- Existen flags como
--locked,--frozeny--offlinepara un control más estricto. - Algunos destacan el riesgo residual al añadir nuevas dependencias o ejecutar
cargo updatesin una revisión cuidadosa.
Paquetización Debian/sistema vs crates.io
- Propuesta: apoyarse en Debian (y otras distribuciones) para empaquetar bibliotecas Rust, tratándolas como bibliotecas compartidas C/C++.
- Quienes lo apoyan: los mantenedores de distribuciones y los equipos de seguridad aportan revisión adicional, las actualizaciones más lentas actúan como amortiguador de seguridad, y las bibliotecas compartidas centralizan los parches.
- Críticos:
- La fragmentación entre decenas de distribuciones + macOS/Windows hace esto poco escalable y supone una carga para los autores de bibliotecas.
- Los paquetes de distribución suelen estar desactualizados, faltar o compilarse con opciones incompatibles; esto impulsa Docker, Nix y el vendoring.
- La revisión de Debian es limitada y no evitó incidentes como log4j; los beneficios de seguridad se perciben como “sensaciones” más que como algo demostrado.
Experiencia de desarrollo: Rust vs C/C++
- Muchos describen la gestión de dependencias en C/C++ y las compilaciones entre distribuciones como “de pesadilla”; Rust + Cargo “simplemente funciona” en distintos SO, a menudo años después.
- Otros informan experiencias aceptables con distribuciones y bibliotecas compartidas, especialmente al apuntar a una sola plataforma y usar sistemas de compilación modernos (Meson, pkg-config).
- Debate entre muchas crates pequeñas frente a pocas bibliotecas grandes:
- A favor de pequeñas: mejor reutilización, composabilidad y la herramienta hace manejable la profundidad.
- A favor de grandes: auditoría, gobernanza y gestión de SBOM más sencillas; menos dispersión de “microdependencias”.
Ideas de seguridad de la cadena de suministro
- Herramientas: proxies privados con firewalls de vulnerabilidades, escáneres como Packj (análisis estático/dinámico/metadatos) y comprobaciones en CI se mencionan con frecuencia, aunque se reconoce que solo ofrecen el mejor esfuerzo.
- Limitación fundamental: el código de Turing, sin sandbox, significa que los escáneres no pueden garantizar la seguridad.
- Gran interés en modelos basados en capacidades o con sandbox (inspirados en WASM/WASI, la reducción de privilegios del SO), donde las bibliotecas no puedan tocar el sistema de archivos/la red salvo mediante capacidades explícitas.
- Consenso general en que ni crates.io ni las distribuciones por sí solas “resuelven” el riesgo de la cadena de suministro; una mitigación real requeriría mejores herramientas, revisiones y quizá nuevos modelos de lenguaje/runtime.