- O Thunderbird está em desenvolvimento para adicionar suporte ao Exchange usando a linguagem Rust
- Na próxima versão ESR (Extended Support), prevista para julho, haverá suporte inicial apenas a e-mail, enquanto calendário e catálogo de endereços serão suportados depois
- Brendan Abolivier, Ikey Doherty e Sean Burke estão trabalhando nessa iniciativa
Motivos para escolher a linguagem Rust
- O Thunderbird é um projeto antigo e possui muito código legado em C++
- Para desenvolver novos recursos, era necessária uma linguagem poderosa e com boa capacidade de manutenção no longo prazo
- Rust oferece vantagens como segurança de memória, desempenho, modularidade e ecossistema
- A infraestrutura de CI compartilhada com o Firefox já oferece suporte a Rust
- Por meio do XPCOM, é possível fazer chamadas entre Rust, C++ e JavaScript
- As ferramentas robustas de Rust podem ser aproveitadas para melhorar a arquitetura antiga
- Rust oferece suporte a diversas plataformas, permitindo reutilização em outros projetos, como Thunderbird para Android/K-9 Mail
Dificuldades encontradas
- O código existente tem muitos padrões assíncronos que não se encaixam bem com Rust
- Há muitos recursos nas bases de código do Firefox e do Thunderbird que não possuem bindings para Rust
- O sistema de build do Thunderbird traz o código do Firefox como subtree, o que dificultava a integração do código Rust
- Como não é possível aninhar workspaces do Cargo, isso foi resolvido com modificações na ferramenta de build
mach
- O XPCOM foi originalmente projetado para C++, então seu uso em Rust exige muito código boilerplate
- Isso foi resolvido implementando a lógica específica de cada protocolo em Rust e criando classes de bridge em C++ para integrar com o código existente
Implementação do suporte ao Exchange com Rust
- A API EWS (Exchange Web Services) se comunica por HTTP e usa requisições e respostas em formato XML
- Para enviar requisições HTTP, é usado o componente de rede necko do Firefox, mas ele é exposto via XPCOM e é inconveniente de usar
- Foi criado o crate
xpcom_async para converter operações assíncronas do XPCOM na sintaxe async/await do Rust
- Foi criado o crate
moz_http para fornecer uma API de cliente HTTP no estilo reqwest
- Tentou-se usar crates já existentes para processar requisições/respostas XML, mas eles não atendiam aos requisitos do EWS
- Foi criado o crate
xml_struct para fornecer um mapeamento intuitivo entre estruturas de dados Rust e XML
- Foi criado o crate
ews para fornecer definições de tipos para EWS e uma API de serialização/desserialização XML baseada em xml_struct e serde
Próximos planos
- Estão ampliando os testes automatizados antes do desenvolvimento dos próximos grandes recursos
- Além de testes unitários, também estão fazendo testes de integração com um servidor EWS simulado
- Está em andamento um trabalho de melhoria no tratamento de erros
- Como o comportamento de erro do EWS não é bem documentado, é necessário tratá-lo em vários níveis, desde o protocolo até situações que exigem intervenção do usuário
- Está em andamento a ampliação do suporte ao protocolo EWS e a integração com a UI do Thunderbird
- Recentemente foram concluídos recursos como adição de contas EWS, sincronização da hierarquia de pastas no servidor remoto e exibição das pastas na UI
- O próximo passo é buscar a lista de mensagens do servidor remoto e generalizar o suporte a envio de e-mails no Thunderbird
- Todo o trabalho será documentado para garantir a manutenção futura
- Também está em andamento a documentação da arquitetura de protocolos de e-mail existente no Thunderbird e das direções de melhoria
Opinião do GN⁺
- A adoção de Rust no Thunderbird para modernizar uma arquitetura antiga parece uma mudança bastante positiva. O projeto está fazendo diversos esforços para aproveitar as vantagens de Rust sem perder compatibilidade com a base de código existente.
- Os crates criados durante o desenvolvimento, como
xpcom_async, moz_http, xml_struct e ews, parecem poder ser úteis também em outros projetos além do Thunderbird.
- No entanto, a arquitetura antiga do Thunderbird e o sistema de build dependente da base de código do Firefox ainda podem continuar sendo obstáculos para a adoção de Rust. No longo prazo, também parecem necessários esforços para resolver esses problemas.
- Como o EWS é um serviço de e-mail muito usado em empresas e instituições de ensino, o suporte ao EWS no Thunderbird pode ajudar bastante a ampliar sua base de usuários. Ainda assim, por se tratar de um protocolo proprietário da Microsoft, sua implementação em um projeto open source pode trazer dificuldades.
- De forma geral, o projeto Thunderbird parece estar se esforçando ativamente para modernizar a arquitetura e expandir recursos com a adoção de Rust. Como principal representante entre os clientes de e-mail open source, a evolução do Thunderbird pode trazer grandes benefícios aos usuários.
1 comentários
Comentários no Hacker News