1 puntos por GN⁺ 2024-04-21 | 1 comentarios | Compartir por WhatsApp
  • Se está desarrollando una función de soporte para Exchange en Thunderbird usando el lenguaje Rust
    • En la próxima versión ESR (Extended Support) prevista para julio, primero se dará soporte solo al correo electrónico, y las funciones de calendario y libreta de direcciones llegarán después
    • Brendan Abolivier, Ikey Doherty y Sean Burke están trabajando en esta tarea

Razones para elegir el lenguaje Rust

  • Thunderbird es un proyecto antiguo y tiene mucho código legado en C++
  • Para desarrollar nuevas funciones, se necesita un lenguaje potente y con buena mantenibilidad a largo plazo
  • Rust ofrece ventajas como seguridad de memoria, rendimiento, modularidad y ecosistema
  • La infraestructura de CI que comparte con Firefox ya soporta Rust
  • A través de XPCOM es posible hacer llamadas entre Rust, C++ y JavaScript
  • Se pueden aprovechar las sólidas herramientas de Rust para mejorar una arquitectura antigua
  • Rust soporta varias plataformas, por lo que también puede reutilizarse en otros proyectos como Thunderbird para Android/K-9 Mail

Dificultades que enfrentaron

  • En el código existente hay muchos patrones asíncronos que no encajan bien con Rust
  • En las bases de código de Firefox y Thunderbird hay muchas funciones sin bindings de Rust
  • El sistema de build de Thunderbird trae el código de Firefox como un subtree, lo que dificultó integrar código Rust
    • Como no se pueden anidar workspaces de Cargo, lo resolvieron modificando la herramienta de build mach
  • XPCOM fue diseñado originalmente para C++, por lo que usarlo desde Rust requiere mucho código boilerplate
    • Lo resolvieron implementando la lógica específica de cada protocolo en Rust y creando clases puente en C++ para integrarlas con el código existente

Implementación del soporte para Exchange con Rust

  • La API EWS (Exchange Web Services) se comunica por HTTP y usa solicitudes y respuestas en formato XML
  • Para enviar solicitudes HTTP usan el componente de red necko de Firefox, pero como está expuesto a través de XPCOM resulta incómodo de usar
    • Crearon el crate xpcom_async para convertir operaciones asíncronas de XPCOM a la sintaxis async/await de Rust
    • Crearon el crate moz_http para ofrecer una API de cliente HTTP al estilo de reqwest
  • Intentaron usar crates existentes para procesar solicitudes/respuestas XML, pero no cumplían con los requisitos de EWS
    • Crearon el crate xml_struct para ofrecer un mapeo intuitivo entre estructuras de datos de Rust y XML
    • Crearon el crate ews para proporcionar definiciones de tipos para EWS y una API de serialización/deserialización XML basada en xml_struct y serde

Planes a futuro

  • Están ampliando las pruebas automatizadas antes de avanzar con el desarrollo de las siguientes funciones importantes
    • Además de pruebas unitarias, están realizando pruebas de integración con un servidor EWS simulado
  • Están trabajando en mejorar el manejo de errores
    • Como el comportamiento de error de EWS no está bien documentado, hace falta manejarlo en distintos niveles, desde el protocolo hasta los casos que requieren intervención del usuario
  • Están ampliando el soporte del protocolo EWS y trabajando en su integración con la UI de Thunderbird
    • Recientemente completaron funciones como agregar cuentas EWS, sincronizar la jerarquía de carpetas desde el servidor remoto y mostrar carpetas en la UI
    • Lo siguiente será obtener la lista de mensajes desde el servidor remoto y generalizar la función de correo saliente de Thunderbird
  • Planean documentar todo el trabajo para asegurar la mantenibilidad futura
    • También están documentando la arquitectura actual de los protocolos de correo en Thunderbird y la dirección de sus mejoras

Opinión de GN⁺

  • La introducción de Rust en Thunderbird para modernizar una arquitectura antigua parece un cambio muy positivo. Están haciendo diversos esfuerzos para aprovechar las ventajas de Rust mientras mantienen la compatibilidad con la base de código existente.
  • Los crates creados durante el proceso de desarrollo, como xpcom_async, moz_http, xml_struct y ews, podrían ser útiles también en otros proyectos además de Thunderbird.
  • Sin embargo, la arquitectura antigua de Thunderbird y un sistema de build dependiente de la base de código de Firefox podrían seguir siendo obstáculos para la adopción de Rust. A largo plazo, también parece necesario trabajar para resolver esos problemas.
  • Dado que EWS es un servicio de correo muy usado en empresas e instituciones educativas, que Thunderbird lo soporte podría ayudar mucho a ampliar su base de usuarios. Aun así, como EWS es un protocolo propietario de Microsoft, implementarlo en un proyecto de código abierto puede implicar dificultades.
  • En general, da la impresión de que el proyecto Thunderbird está aprovechando la adopción de Rust para impulsar activamente la modernización de su arquitectura y la expansión de funciones. Como uno de los principales clientes de correo de código abierto, el avance de Thunderbird beneficiará mucho a sus usuarios.

1 comentarios

 
GN⁺ 2024-04-21
Comentarios en Hacker News
  • Se plantea la duda de por qué implementarlo a pesar de que está previsto que EWS sea eliminado en dos años
  • Thunderbird tiene problemas de lentitud, como antes de la actualización Firefox Quantum. Al cambiar entre carpetas con miles de correos hay demoras, mientras que en Outlook el cambio es inmediato
  • Si estratégicamente el objetivo es que la gente use Thunderbird, tiene sentido, pero desde una perspectiva ideológica sería mejor admitir compatibilidad con JMAP
  • Recuerda que hace 20 años, cuando pocas personas usaban Linux en la industria de TI, era difícil encontrar un cliente para Exchange
  • Señala que el título fue cambiado a algo relacionado con programación en Rust, pero que el contenido real no trata sobre el soporte de Exchange en Thunderbird
  • Expresa que detesta Exchange, pero que le alegra poder enviar correos en texto plano desde Windows
  • Sugiere que deberían ofrecer por defecto la función de importar archivos PST al migrar desde Outlook, para que a los usuarios les resulte fácil cambiarse
  • Espera que Thunderbird se convierta en un competidor adecuado frente a Evolution de Gnome en cuanto al soporte de EWS
  • Enfatiza que se necesitan urgentemente nuevos protocolos como SMTP/2 + IMAP5
  • Comenta que esta mejora será bienvenida para quienes habían tenido que usar la extensión OWL