- A adoção de Rust pelo Ubuntu mostra que, no ciclo de adoção de tecnologia, Rust está saindo dos early adopters, atravessando o abismo e chegando ao mainstream
- A Canonical adotou Rust como a linguagem padrão para novos softwares de base, substituindo usos de C, C++ e parte de Python, e está investindo no desenvolvimento de utilitários com segurança de memória tanto financeiramente quanto em reputação
- Como os usuários da maioria inicial (Early Majority) querem "padrões da indústria" e compatibilidade com fluxos de trabalho existentes, a substituição de utilitários em modo drop-in é a estratégia central para atravessar o abismo
- A questão da expansão da biblioteca padrão de Rust voltou a ganhar destaque, e há uma reavaliação de que o conceito de "Rust Platform", rejeitado em 2016, talvez seja mais adequado para a maioria inicial
- Uma estrutura que converta adoção em investimento e a inclusão baseada em empatia na comunidade open source são essenciais para a próxima fase de crescimento de Rust
A travessia do "abismo" de Rust varia conforme a área
- Se Rust já atravessou o abismo no Technology Adoption Life Cycle depende da área
- Dentro da Amazon, Rust já está firmemente estabelecido em grandes data planes e na construção de agentes com consciência de recursos, mas ainda existe a percepção de que ele é excessivo para desenvolvimento geral
- Na área de Safety Critical Software, há casos de sucesso, mas a maior parte do setor ainda permanece em modo de "esperar para ver"
A importância de "clientes de referência"
- O ponto-chave para atravessar o abismo é garantir clientes de referência (reference customers)
- Adotantes iniciais compram o agente de mudança (change agent), mas a maioria inicial quer aumentar a produtividade das operações existentes e minimizar descontinuidades
- Ver organizações parecidas com a sua tendo sucesso é o fator mais convincente para a adoção de uma nova tecnologia
- O sucesso de Rust na equipe do S3 é convincente para equipes de serviços em larga escala, mas tem pouca força persuasiva direta para equipes de serviços CRUD
A estratégia de adoção de Rust no Ubuntu (Canonical)
- No Rust Nation, o VP of Engineering da Canonical, Jon Seager, apresentou a keynote "Rust Adoption At Scale with Ubuntu"
- A Canonical vinha limitando suas linguagens internas de desenvolvimento a Python, C/C++ e Go, mas recentemente adicionou Rust e o adotou como linguagem padrão para novos trabalhos de base
- De forma semelhante à keynote de Lars Bergstrom sobre a adoção de Rust no Google, trata-se de uma abordagem que combina visão e pragmatismo
- Essa é exatamente a característica necessária para a transição de adotantes iniciais para a maioria inicial
Investimento em utilitários com segurança de memória
- Jon Seager mencionou que o Ubuntu deve apoiar a criação de utilitários baseados em segurança de memória no espírito de "pay it forward"
- A Canonical está financiando o desenvolvimento de sudo-rs e ntpd-rs da Trifecta Tech Foundation, além do trabalho de coreutils do uutils
- A estrutura permite que o Ubuntu experimente e valide novidades primeiro, para que depois outras distribuições também se beneficiem
- Utilitários drop-in que entram diretamente nos fluxos de trabalho existentes atendem à exigência da maioria inicial de minimizar descontinuidades
Exigências dos novos adotantes: expansão da biblioteca padrão
- Durante um jantar, Jon Seager comentou que a política de biblioteca padrão pequena de Rust deveria ser reavaliada
- Essa é uma demanda recorrente há anos e, em vez de simplesmente oferecer uma biblioteca padrão maior, está-se considerando uma alternativa em formato de projeto chamada "Battery Packs"
- A Rust Platform, proposta em 2016 — a ideia de reconhecer certos crates como uma biblioteca padrão expandida — foi rejeitada pelos adotantes iniciais da época, mas agora está sendo reavaliada como algo possivelmente adequado para a maioria inicial
- Na época, prevalecia a visão de que bastava adicionar dependências ao
Cargo.toml
A necessidade de mudança para crescer
- Para passar de adotantes iniciais para a maioria inicial, é preciso comunicar Rust não como "estado da arte (state-of-the-art)", mas como "padrão da indústria (industry standard)"
- Rust foi bem-sucedido em conquistar reconhecimento no setor, e agora precisa ser a melhor escolha com base não no "que pode vir a ser", mas no "que de fato é"
- Essas duas coisas às vezes podem entrar em tensão
- Fazer marketing para pragmáticos exige paciência, compreensão dos problemas do setor em questão e participação em conferências da indústria
Uma estrutura que converte adoção em investimento
- A ampliação da adoção de Rust traz consigo um aumento da demanda sobre o projeto Rust e seu ecossistema
- Para organizações open source como a Canonical, construção de relações entre organizações e contribuição importam mais do que $$
- Os desenvolvedores de Rust for Linux inicialmente receberam ajuda dos mantenedores de Rust, mas gradualmente passaram a corrigir bugs diretamente, enquanto os mantenedores migraram para um papel de mentoria
- Uma tendência interessante é que o financiamento muitas vezes vem mais de empresas que estão considerando adotar Rust do que das que já o adotaram
- Early adopters individuais dentro da organização impulsionam a adoção interna e alocam orçamento para desenvolver funcionalidades de "table stakes"
- Segundo Alexandru Radovici, do Rust Foundation Silver Member Directory, várias empresas de software crítico para segurança têm recursos para financiar o preenchimento das lacunas de Rust, mas não sabem como usá-los
O papel do open source e a importância da empatia
- O open source é uma excelente plataforma para atravessar o abismo, mas panelinhas (cliques) e "tradições orais (oral traditions)" podem se tornar barreiras de entrada
- Uma ideia pode ser rejeitada pelo uso de terminologia errada, e uma única resposta rude pode fazer um novo colaborador desistir
- O que Rust mais precisa para sua próxima fase de crescimento é empatia no open source (Empathy in Open Source)
- O essencial é ir até onde Rust pode ajudar as pessoas, oferecer apoio e capacitá-las
1 comentários
Comentários do Hacker News
O fato de o Ubuntu usar um userland com licença que não é GPL pode significar permitir mais TiVoization no ecossistema Linux
Se isso se combinar com a direção que a Amutable, do campo do systemd, está tomando, pode surgir uma distribuição Linux fechada em que o usuário não consegue modificar nada
Do ponto de vista das empresas, um ambiente fechado com verificação completa de assinaturas pode ser atraente. Um mundo em que até “ls” e “cd” sejam closed source tem um ar estranhamente apocalíptico
O verdadeiro abismo (chasm) que o Rust precisa atravessar é o suporte a linking dinâmico com ABI segura
Só quando for possível alterar uma biblioteca e manter a segurança, com estabilidade de ABI no nível de C, o pessoal de C/C++ poderá adotar Rust de verdade
Mais problemático do que o Ubuntu adotar Rust é o fato de ele ainda usar scripts curl|bash para builds importantes
Isso fica claro no snapcraft.yaml do firefox-snap
O fato de o projeto Rust Coreutils ter licença MIT me incomoda
A filosofia da FSF às vezes é criticada, mas a GPL protege o open source. Se a Canonical mudar o Ubuntu inteiro para MIT, não sei o que pode acontecer
Por causa do rust-coreutils, não foi possível instalar o CUDA Toolkit. Há uma issue relacionada no fórum da NVIDIA
O conceito de “Crossing the chasm” é interessante. Além do caso do coreutils no Ubuntu, há muitos outros abismos que o Rust está tentando atravessar
Existe Rust for Linux e também Rust para a indústria automotiva, mas por enquanto parece que ainda está no nível de drivers
A lógica de dizer que a biblioteca padrão pode ser trocada depois é perigosa. O usuário quer um sistema estável e de alta qualidade, mais do que atravessar algum “abismo”
A imaturidade do ecossistema Rust é um fator que atrapalha a adoção. Muitos crates ainda estão em versões pré-1.0 ou são apenas wrappers simples para C. Na parte de criptografia está razoável, mas coisas como SAML são difíceis de encontrar
libc, também têm dificuldade para subir versão. Pessoalmente, consulto listas curadas como blessed.rsHá um movimento de “traduzir” código C++ para Rust no estilo vibe-translate, mudando até a licença no processo. Por exemplo, o sudo-rs tem um histórico de segurança pior que o da versão em C
A enorme biblioteca padrão do .NET é realmente muito confortável. Dá para fazer a maioria das tarefas do jeito padrão, e quando existe alguma implementação estranha, muita gente tenta padronizar
O std/core do Rust já é grande demais, então em microcontroladores são necessários truques como weak symbol.
Uma stdlib pequena ajuda a manter a estabilidade da API e reduzir a carga de manutenção. Como o C++ sofreu com isso, o Rust precisa ser cauteloso