- La adopción de Rust por parte de Ubuntu muestra que Rust, dentro del ciclo de adopción tecnológica, está pasando de los early adopters a la etapa principal tras cruzar el abismo
- Canonical adoptó Rust como lenguaje predeterminado para nuevo software base, reemplazando usos de C, C++ y parte de Python, e invierte en el desarrollo de utilidades con seguridad de memoria tanto en dinero como en reputación
- Como los usuarios de la mayoría temprana (Early Majority) quieren "estándares de la industria" y compatibilidad con flujos de trabajo existentes, reemplazar utilidades de forma drop-in es una estrategia clave para cruzar el abismo
- Volvió a surgir el problema de ampliar la biblioteca estándar de Rust, y se reevalúa que el concepto de "Rust Platform", rechazado en 2016, podría en realidad ser adecuado para la mayoría temprana
- Una estructura que conecte la adopción con la inversión y la inclusión basada en empatía dentro de la comunidad open source son esenciales para la siguiente etapa de crecimiento de Rust
Cruzar el "abismo" de Rust varía según el área
- Que Rust haya cruzado el abismo dentro del Technology Adoption Life Cycle depende del área
- Dentro de Amazon, Rust ya está firmemente establecido para construir grandes data planes o agentes con conciencia de recursos, pero todavía existe la percepción de que es excesivo para el desarrollo general
- En el área de Safety Critical Software hay casos exitosos, pero la mayor parte de la industria sigue en modo de espera
La importancia de los "clientes de referencia"
- La clave para cruzar el abismo es conseguir clientes de referencia (reference customers)
- Los adoptantes tempranos compran al agente de cambio (change agent), pero la mayoría temprana quiere mejorar la productividad de las operaciones existentes y minimizar la discontinuidad
- Ver que una organización similar a la propia tuvo éxito es el factor más convincente para adoptar una nueva tecnología
- Un ejemplo de esto es que el éxito de Rust en el equipo de S3 resulta convincente para equipos de servicios a gran escala, pero no persuade de forma directa a equipos de servicios CRUD
La estrategia de adopción de Rust en Ubuntu (Canonical)
- En Rust Nation, el VP of Engineering de Canonical, Jon Seager, presentó la keynote "Rust Adoption At Scale with Ubuntu"
- Canonical había limitado sus lenguajes de desarrollo interno a Python, C/C++ y Go, pero recientemente añadió Rust y lo adoptó como lenguaje predeterminado para nuevo trabajo de base
- De forma similar a la keynote de Lars Bergstrom sobre la adopción de Rust dentro de Google, es un enfoque que combina visión y pragmatismo
- Esa es precisamente la característica necesaria para pasar de los adoptantes tempranos a la mayoría temprana
Inversión en utilidades con seguridad de memoria
- Jon Seager mencionó que Ubuntu debe apoyar la creación de utilidades basadas en seguridad de memoria como una forma de "pay it forward"
- Canonical está financiando el desarrollo de sudo-rs y ntpd-rs de la Trifecta Tech Foundation, así como el trabajo de uutils en coreutils
- La idea es que Ubuntu pruebe y valide primero cosas nuevas para que luego otras distribuciones puedan beneficiarse
- Las utilidades drop-in que encajan directamente en los flujos de trabajo existentes cumplen con la necesidad de la mayoría temprana de minimizar la discontinuidad
Lo que piden los nuevos adoptantes: ampliar la biblioteca estándar
- Durante una cena, Jon Seager dijo que habría que revisar la política de biblioteca estándar pequeña de Rust
- Es una demanda que se repite desde hace años y, más que ofrecer simplemente una biblioteca estándar grande, se está pensando en una alternativa en forma de proyecto llamada "Battery Packs"
- La Rust Platform propuesta en 2016 —la idea de reconocer ciertos crates como una biblioteca estándar ampliada— fue rechazada en ese momento por los adoptantes tempranos, pero ahora se reevalúa como algo que podría ser apropiado para la mayoría temprana
- En aquel entonces predominaba la idea de que bastaba con agregar dependencias en
Cargo.toml
La necesidad de cambiar para crecer
- Para pasar de los adoptantes tempranos a la mayoría temprana, hace falta un mensaje de "estándar de la industria" y no de "state-of-the-art"
- Rust tuvo éxito en ganar reconocimiento dentro de la industria, y ahora debe convertirse en la mejor opción no por "lo que podría llegar a ser", sino por "lo que realmente es"
- A veces estas dos cosas pueden entrar en tensión
- Para hacer marketing a pragmáticos se necesita paciencia, comprensión de los problemas de esa industria y asistir a conferencias del sector
Una estructura que conecte la adopción con la inversión
- La expansión de la adopción de Rust va acompañada de un aumento en la demanda sobre el proyecto Rust y su ecosistema
- Para organizaciones open source como Canonical, más importante que los $$ es construir relaciones y contribuir entre organizaciones
- Los desarrolladores de Rust for Linux al principio recibieron ayuda de los maintainers de Rust, pero gradualmente empezaron a corregir errores por cuenta propia y los maintainers pasaron a un rol de mentoría
- Una tendencia interesante es que el financiamiento muchas veces proviene no de empresas que ya adoptaron Rust, sino de empresas que están evaluando adoptarlo
- Los early adopters internos impulsan la adopción dentro de su organización y asignan presupuesto al desarrollo de capacidades "table stakes"
- Según Alexandru Radovici, del Rust Foundation Silver Member Directory, muchas empresas de software crítico para la seguridad tienen fondos para cubrir las brechas de Rust, pero no saben cómo utilizarlos
El rol del open source y la importancia de la empatía
- El open source es una excelente plataforma para cruzar el abismo, pero los grupitos (cliques) y las "tradiciones orales" pueden convertirse en barreras de entrada
- Una idea puede ser rechazada por usar la terminología equivocada, o una sola respuesta grosera puede hacer que un nuevo colaborador se retire
- Lo que más necesita Rust para su siguiente etapa de crecimiento es empatía en el open source (Empathy in Open Source)
- La clave es ir a los lugares donde Rust puede ayudar a las personas, apoyarlas y darles herramientas para que puedan avanzar
1 comentarios
Comentarios de Hacker News
Que Ubuntu use userland con licencias no GPL significa que podría permitir más TiVoization dentro del ecosistema Linux
Si se combina con la dirección que impulsa Amutable del lado de systemd, podrían aparecer distribuciones Linux cerradas que el usuario no pueda modificar
Desde la perspectiva empresarial, un entorno cerrado con verificación total de firmas puede resultar atractivo. La idea de un mundo donde hasta “ls” o “cd” sean de código cerrado se siente curiosamente apocalíptica
El verdadero abismo (chasm) que Rust tiene que cruzar es el soporte de enlace dinámico con un ABI seguro
Solo cuando se pueda modificar una librería manteniendo la seguridad y logrando estabilidad ABI al nivel de C, Rust podrá adoptarse de verdad en el mundo C/C++
Más que la adopción de Rust por parte de Ubuntu, el problema mayor es que todavía se procesan builds importantes con scripts curl|bash
Se ve claramente en snapcraft.yaml de firefox-snap
Me incomoda que el proyecto Rust Coreutils tenga licencia MIT
Aunque a veces se critique la filosofía de la FSF, la GPL protege el open source. Si Canonical cambiara Ubuntu en general a MIT, no sé qué podría pasar
Por rust-coreutils no se podía instalar CUDA Toolkit. El issue relacionado está en los foros de NVIDIA
El concepto de “Crossing the chasm” es interesante. Además del caso de coreutils en Ubuntu, hay muchos otros abismos que Rust intenta cruzar
Está Rust for Linux o Rust para la industria automotriz, pero por ahora parece quedarse a nivel de drivers
La lógica de decir que la librería estándar se cambiará después es peligrosa. Los usuarios quieren sistemas estables y de alta calidad, no “abismos” por cruzar
La inmadurez del ecosistema Rust es un factor que frena su adopción. Muchos crates están en versiones previas a 1.0 o son apenas wrappers sencillos sobre C. En criptografía está bastante bien, pero cosas como SAML son difíciles de encontrar
libc, tan profundamente ligados al API, que son difíciles de versionar. Personalmente consulto listas curadas como blessed.rsHay un movimiento de “traducir por vibra” código C++ a Rust para cambiar la licencia. Por ejemplo, sudo-rs incluso tiene un peor historial de seguridad que la versión en C
La enorme librería estándar de .NET es realmente cómoda. La mayoría de las tareas se pueden hacer de forma estándar, y si hay alguna implementación rara, la mayoría empuja hacia la estandarización
El std/core de Rust ya es demasiado grande, así que en microcontroladores hacen falta trucos como weak symbol.
Una stdlib pequeña favorece mantener la estabilidad del API y reducir la carga de mantenimiento. C++ sufrió mucho por este problema, así que Rust debería ser prudente