- 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의 발전은 사용자들에게 큰 혜택이 될 것임.