Thunderbird에 Exchange 지원 기능을 추가하기 위해 Rust 언어를 사용하여 개발 중임
7월 출시 예정인 다음 ESR(Extended Support) 버전에서는 이메일만 우선 지원하고, 캘린더와 주소록 기능은 추후 지원 예정
Brendan Abolivier, Ikey Doherty, Sean Burke가 이 작업을 진행 중
Rust 언어 선택 이유
Thunderbird는 오래된 프로젝트로 많은 오래된 C++ 코드를 가지고 있음
새로운 기능 개발을 위해서는 강력하면서도 장기적인 유지보수성이 있는 언어가 필요함
Rust는 메모리 안전성, 성능, 모듈성, 생태계 등의 장점이 있음
Firefox와 공유하는 CI 인프라가 이미 Rust를 지원하고 있음
XPCOM을 통해 Rust, C++, JavaScript 간 호출이 가능함
Rust의 강력한 도구를 활용하여 오래된 아키텍처를 개선할 수 있음
Rust는 다양한 플랫폼을 지원하여 Android용 Thunderbird/K-9 Mail 등 다른 프로젝트에서도 재사용 가능
직면했던 어려움들
기존 코드에는 Rust와 잘 맞지 않는 비동기 패턴들이 많음
Firefox와 Thunderbird 코드베이스에는 Rust 바인딩이 없는 기능들이 많음
Thunderbird 빌드 시스템이 Firefox 코드를 서브트리로 가져오는 방식이라 Rust 코드 통합이 어려웠음
Cargo 워크스페이스를 중첩할 수 없어서 빌드 도구 mach를 수정하여 해결
XPCOM은 원래 C++을 위해 설계되어 Rust에서 사용하기에는 많은 boilerplate 코드가 필요함
Rust로 프로토콜별 로직을 구현하고 C++로 브릿지 클래스를 만들어 기존 코드와 결합하는 방식으로 해결
Rust를 이용한 Exchange 지원 구현
EWS(Exchange Web Services) API는 HTTP로 통신하며 XML 형식의 요청과 응답을 사용함
HTTP 요청 전송을 위해 Firefox의 necko 네트워킹 컴포넌트를 사용하지만 XPCOM을 통해 노출되어 사용하기 불편함
xpcom_async 크레이트를 만들어 XPCOM의 비동기 작업을 Rust의 async/await 문법으로 변환
moz_http 크레이트를 만들어 reqwest 스타일의 HTTP 클라이언트 API 제공
XML 요청/응답 처리를 위해 기존 크레이트들을 사용하려 했으나 EWS의 요구사항을 만족시키지 못함
xml_struct 크레이트를 만들어 Rust 데이터 구조체와 XML 간의 직관적인 매핑을 제공
ews 크레이트를 만들어 EWS용 타입 정의와 xml_struct 및 serde 기반 XML 직렬화/역직렬화 API 제공
향후 계획
다음 주요 기능 개발에 앞서 자동화된 테스트를 확충하는 중
단위 테스트 외에도 모의 EWS 서버를 만들어 통합 테스트 진행 중
오류 처리 개선 작업 진행 중
EWS의 오류 동작이 문서화가 잘 되어있지 않아 프로토콜 수준과 사용자 개입이 필요한 수준 등 다양한 층위에서 처리 필요
EWS 프로토콜 지원 확대 및 Thunderbird UI와의 연동 작업 진행 중
최근 EWS 계정 추가, 원격 서버에서 폴더 계층 동기화, UI에 폴더 표시 등의 기능 구현 완료
다음은 원격 서버에서 메시지 목록 가져오기와 Thunderbird의 발신 메일 지원 기능 일반화 예정
모든 작업에 대해 문서화를 진행하여 향후 유지보수성 확보할 예정
기존 Thunderbird의 메일 프로토콜 아키텍처와 개선 방향에 대한 문서화도 진행 중
GN⁺의 의견
Thunderbird에 Rust를 도입하여 오래된 아키텍처를 현대화하는 것은 매우 긍정적인 변화로 보임. Rust의 장점을 활용하면서 기존 코드베이스와의 호환성을 유지하기 위해 다양한 노력을 기울이고 있음.
개발 과정에서 만들어진 xpcom_async, moz_http, xml_struct, ews 등의 크레이트들은 Thunderbird 외의 다른 프로젝트에서도 유용하게 활용될 수 있을 것 같음.
하지만 Thunderbird의 오래된 아키텍처와 Firefox 코드베이스에 의존적인 빌드 시스템 등은 앞으로도 Rust 도입에 걸림돌이 될 수 있음. 장기적으로는 이런 문제들을 해결하기 위한 노력도 필요해 보임.
EWS는 기업이나 교육기관에서 많이 사용되는 이메일 서비스인 만큼, Thunderbird에서 EWS를 지원하게 되면 사용자 저변 확대에 큰 도움이 될 것으로 보임. 다만 EWS가 Microsoft의 독점 프로토콜인 만큼, 오픈소스 프로젝트에서 구현하기에는 어려움이 있을 수 있음.
전반적으로 Thunderbird 프로젝트가 Rust 도입을 계기로 아키텍처 현대화와 기능 확장을 위해 활발히 노력하고 있는 것으로 보임. 오픈소스 이메일 클라이언트의 대표주자로서 Thunderbird의 발전은 사용자들에게 큰 혜택이 될 것임.