Deuda técnica: mi biblioteca de Rust ahora se convirtió en un CDO
- Como broma sobre la deuda técnica, existe el chiste de que si hay deuda técnica, también deberían existir derivados para manejar esa deuda.
- El ecosistema de Rust terminó creando una solución que parece titularizar la deuda técnica.
- Por ejemplo, una biblioteca
stuff depende de otra biblioteca learned-rust-this-way, pero el autor de learned-rust-this-way pierde el interés y los problemas empiezan a acumularse.
La realidad de la deuda técnica
learned-rust-this-way se considera deuda técnica, lo que no causa un problema directo, pero sigue siendo deuda.
- En algún momento, alguien se da cuenta de que
learned-rust-this-way es deuda, no logra contactar al autor original y se agrega a la base de datos de RUSTSEC.
- RUSTSEC, como agencia calificadora, evalúa esa deuda como basura, y por eso el CI (integración continua) de mucha gente empieza a fallar.
Cómo resolver la deuda
- Como mantenedor de
stuff, aumenta el estrés cuando los usuarios plantean problemas por el uso de learned-rust-this-way, y te exigen tomar medidas para manejar la deuda.
- Migrar a una alternativa es una opción, pero en este caso ninguna de las alternativas resulta atractiva.
- Si haces un fork de
learned-rust-this-way, te enfrentas a las mismas exigencias, y eso solo es una solución temporal, no resuelve el problema.
La solución que realmente funciona
- Si incorporas ese código dentro de tu propia biblioteca, esa deuda técnica basura de pronto recibe una calificación “AAA”.
- Si ya no tocas el código, ocultas el hecho de que lo integraste y sigues manteniendo la biblioteca como antes, el mundo sigue girando.
- Al vendorizar e integrar
yaml-rust en insta, se convirtió en una combinación del código de insta y yaml-rust, y así la deuda técnica fue mejorada a categoría AAA.
La opinión de GN⁺
- Este artículo compara la deuda técnica con los derivados financieros y explica con ingenio los problemas que surgen en el desarrollo de software.
- La deuda técnica es un problema frecuente en el desarrollo de software, y este artículo propone a los desarrolladores una forma creativa de gestionarla.
- Los sistemas de evaluación del ecosistema de Rust, como RUSTSEC, pueden ayudar a los desarrolladores a evaluar la estabilidad de las bibliotecas, aunque también pueden generar estrés innecesario.
- Integrar el código como forma de resolver la deuda técnica puede ser una solución temporal, y a largo plazo hace falta una estrategia de mantenimiento sostenible.
- En situaciones como esta, conviene considerar distintas soluciones, como el mantenimiento impulsado por la comunidad, la co-mantenencia de proyectos open source o la búsqueda de versiones alternativas de la biblioteca.
1 comentarios
Comentarios de Hacker News
deprecated) y sin mantenimiento (unmaintained). Esto se hizo sin advertencia ni designar a otro mantenedor; el paquete sigue siendo funcional, pero como lo usan más de 4000 crates, las herramientas de auditoría y actualización automática advertirán sobre el uso de crates sin mantenimiento.vendoringde una librería proporciona herramientas para atacar el código y, si tienes suficiente cobertura de pruebas para tu propia librería, puedes ejecutar herramientas de cobertura de código sobre la librería incorporada. Modificar la librería incorporada puede ser un reto, pero eliminar las partes que no necesitas puede ser relativamente fácil. Claro, depende de la estructura de la librería incorporada.vendoring. Pero eso solo mira el valor del código en sí y pasa por alto la parte más importante de la propuesta de valor total. El mantenedor que incorpora el código ahora es dueño de él, y un mantenedor activo que incorpora código de un proyecto muerto aumenta su valor porque hay una persona que puede responder a issues, revisar pull requests y corregir bugs.npm auditsuele exagerar principalmente con los problemas de seguridad y, mientras la licencia lo permita, es una de las maneras más confiables de librarse de los problemas absurdos que llegan de los usuarios.yaml-rusty reescribirlo en Rust puro para crearyaml-rust2. Ese fork pasa completamente la suite de pruebas de YAML y también muestra mejor rendimiento en los benchmarks. La migración también parece sencilla. Al final, el problema sigue ahí: todavía dependemos de otras personas que hoy aportan trabajo gratis, pero no hay garantía de que lo hagan para siempre.vendoringde las dependencias es la solución. Lo he hecho durante 20 años con casi todas las dependencias que ya están "terminadas" y cuyo desarrollo y mantenimiento se han vuelto lentos.