1 pontos por GN⁺ 2024-04-21 | 1 comentários | Compartilhar no WhatsApp
  • 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

 
GN⁺ 2024-04-21
Comentários no Hacker News
  • Foi levantada a dúvida sobre por que implementar isso, já que o EWS está previsto para ser removido em 2 anos
  • O Thunderbird tem um problema de lentidão, como antes da atualização Firefox Quantum. Ao alternar entre pastas com milhares de e-mails, há atraso, enquanto no Outlook a troca é imediata
  • Se o objetivo estratégico é fazer com que as pessoas usem o Thunderbird, faz sentido, mas ideologicamente foi apontado que o suporte a JMAP seria melhor
  • Houve lembrança de quando, há 20 anos, era difícil encontrar um cliente para Exchange numa época em que poucas pessoas usavam Linux no setor de TI
  • Foi apontado que o título mudou para algo sobre programação em Rust, mas o conteúdo real não é sobre o suporte a Exchange no Thunderbird
  • Foi expressa a opinião de que, embora haja aversão ao Exchange, é bom poder enviar e-mails em texto simples no Windows
  • Houve a sugestão de oferecer por padrão a função de importar arquivos PST ao migrar do Outlook, para facilitar a troca pelos usuários
  • Espera-se que o Thunderbird se torne um concorrente adequado ao Evolution do Gnome em termos de suporte a EWS
  • Foi enfatizada a necessidade urgente de novos protocolos como SMTP/2 + IMAP5
  • Foi dito que, para quem precisava usar a extensão OWL, essa melhoria será bem-vinda