Thunderbird, el cliente de correo de Mozilla, está desarrollando soporte nativo para Microsoft Exchange mediante el protocolo EWS (Exchange Web Services). Este proyecto, detallado por el ingeniero Brendan Abolivier en una serie de dos partes, se centra en la implementación de un cliente de protocolo en Rust, un lenguaje que se utiliza por primera vez en Thunderbird. El equipo enfrentó el desafío de integrar el modelo asíncrono de Rust basado en async/await con el sistema de callbacks de Thunderbird, que emplea C++ y JavaScript. Para ello, recurrieron a XPCOM (Cross-Platform Component Object Model), la capa de compatibilidad entre lenguajes de Mozilla, que permite implementar interfaces definidas en XPIDL en Rust. Específicamente, utilizan nsIChannel, la interfaz de Necko (el componente de red de Firefox y Thunderbird) para realizar peticiones HTTP asíncronas. Crearon un BufferingStreamListener que almacena datos entrantes y un AsyncChannelOpener que implementa el trait Future de Rust, permitiendo que el planificador de tareas de Rust despierte cuando la operación de red se completa. Este enfoque ofrece ventajas como la visualización en las herramientas de desarrollo de Thunderbird y el cumplimiento automático de la configuración de red y cookies del usuario, sin necesidad de código adicional. La decisión de usar Necko en lugar de una caja como reqwest se tomó precisamente por esa integración. El artículo detalla las decisiones técnicas para construir una base sólida y con poco código repetitivo (boilerplate), necesaria para implementar las numerosas operaciones y tipos que define EWS. Este es un paso importante para que Thunderbird pueda conectarse de forma nativa a servidores Exchange, una funcionalidad muy demandada por los usuarios corporativos.
Thunderbird avanza en su soporte para Exchange con Rust y XPCOM
Fuentes:
Supporting Exchange and beyond
