1 คะแนน โดย GN⁺ 2024-04-21 | 1 ความคิดเห็น | แชร์ทาง WhatsApp
  • กำลังพัฒนาฟีเจอร์รองรับ Exchange ใน Thunderbird โดยใช้ภาษา Rust
    • ใน ESR (Extended Support) เวอร์ชันถัดไปที่มีกำหนดออกในเดือนกรกฎาคม จะรองรับเฉพาะอีเมลก่อนเป็นลำดับแรก และฟังก์ชันปฏิทินกับสมุดรายชื่อจะรองรับภายหลัง
    • Brendan Abolivier, Ikey Doherty และ Sean Burke กำลังดำเนินงานนี้อยู่

เหตุผลที่เลือกใช้ภาษา Rust

  • Thunderbird เป็นโปรเจ็กต์เก่าที่มีโค้ด C++ แบบดั้งเดิมจำนวนมาก
  • สำหรับการพัฒนาฟีเจอร์ใหม่ จำเป็นต้องมีภาษาที่ทรงพลังและบำรุงรักษาได้ดีในระยะยาว
  • Rust มีข้อดีด้านความปลอดภัยของหน่วยความจำ ประสิทธิภาพ ความเป็นโมดูลาร์ และ ecosystem
  • โครงสร้างพื้นฐาน CI ที่ใช้ร่วมกับ Firefox รองรับ Rust อยู่แล้ว
  • สามารถเรียกใช้งานข้ามระหว่าง Rust, C++ และ JavaScript ได้ผ่าน XPCOM
  • สามารถใช้เครื่องมืออันทรงพลังของ Rust เพื่อปรับปรุงสถาปัตยกรรมแบบเดิมได้
  • Rust รองรับหลายแพลตฟอร์ม จึงสามารถนำกลับไปใช้กับโปรเจ็กต์อื่น เช่น Thunderbird for Android/K-9 Mail ได้

ความท้าทายที่พบ

  • โค้ดเดิมมีแพตเทิร์น asynchronous จำนวนมากที่ไม่เข้ากับ Rust ได้ดีนัก
  • ในโค้ดเบสของ Firefox และ Thunderbird มีฟังก์ชันจำนวนมากที่ยังไม่มี Rust bindings
  • ระบบบิลด์ของ Thunderbird ใช้วิธีนำโค้ด Firefox เข้ามาเป็น subtree ทำให้รวมโค้ด Rust ได้ยาก
    • เนื่องจากไม่สามารถซ้อน Cargo workspace กันได้ จึงแก้ไขด้วยการปรับเครื่องมือบิลด์ mach
  • XPCOM เดิมถูกออกแบบมาสำหรับ C++ จึงต้องใช้ boilerplate จำนวนมากเมื่อใช้งานจาก Rust
    • แก้ไขโดยเขียนลอจิกตามโปรโตคอลด้วย Rust และสร้าง bridge class ด้วย C++ เพื่อเชื่อมเข้ากับโค้ดเดิม

การพัฒนาการรองรับ Exchange ด้วย Rust

  • API ของ EWS (Exchange Web Services) สื่อสารผ่าน HTTP และใช้คำขอ/คำตอบในรูปแบบ XML
  • สำหรับการส่งคำขอ HTTP ใช้คอมโพเนนต์เครือข่าย necko ของ Firefox แต่การเปิดให้ใช้ผ่าน XPCOM ทำให้ใช้งานไม่สะดวก
    • สร้าง crate xpcom_async เพื่อแปลงงาน asynchronous ของ XPCOM ให้เป็นไวยากรณ์ async/await ของ Rust
    • สร้าง crate moz_http เพื่อมอบ HTTP client API สไตล์ reqwest
  • เดิมตั้งใจจะใช้ crate ที่มีอยู่แล้วสำหรับจัดการคำขอ/คำตอบ XML แต่ไม่สามารถตอบโจทย์ความต้องการของ EWS ได้
    • สร้าง crate xml_struct เพื่อให้แมปกันได้อย่างตรงไปตรงมาระหว่างโครงสร้างข้อมูลของ Rust กับ XML
    • สร้าง crate ews เพื่อมอบ type definitions สำหรับ EWS และ XML serialization/deserialization API ที่อิงบน xml_struct และ serde

แผนในอนาคต

  • กำลังขยายการทดสอบแบบอัตโนมัติก่อนเดินหน้าพัฒนาฟีเจอร์หลักถัดไป
    • นอกจาก unit test แล้ว ยังสร้าง mock EWS server เพื่อทำ integration test อยู่ด้วย
  • กำลังปรับปรุงการจัดการข้อผิดพลาด
    • เนื่องจากพฤติกรรมข้อผิดพลาดของ EWS มีเอกสารไม่ชัดเจน จึงจำเป็นต้องจัดการหลายชั้น ตั้งแต่ระดับโปรโตคอลไปจนถึงระดับที่ต้องให้ผู้ใช้เข้ามาจัดการ
  • กำลังขยายการรองรับโปรโตคอล EWS และเชื่อมต่อเข้ากับ UI ของ Thunderbird
    • ล่าสุดได้พัฒนาฟีเจอร์เพิ่มบัญชี EWS, ซิงก์ลำดับชั้นโฟลเดอร์จากเซิร์ฟเวอร์ระยะไกล และแสดงโฟลเดอร์ใน UI เสร็จแล้ว
    • ขั้นต่อไปคือการดึงรายการข้อความจากเซิร์ฟเวอร์ระยะไกล และทำให้ฟีเจอร์รองรับเมลขาออกของ Thunderbird ใช้งานได้แบบทั่วไปมากขึ้น
  • จะทำเอกสารสำหรับทุกงานเพื่อให้บำรุงรักษาได้ดีในอนาคต
    • รวมถึงกำลังจัดทำเอกสารเกี่ยวกับสถาปัตยกรรมโปรโตคอลเมลเดิมของ Thunderbird และทิศทางการปรับปรุง

ความเห็นของ GN⁺

  • การนำ Rust เข้ามาใช้ใน Thunderbird เพื่อปรับสถาปัตยกรรมเก่าให้ทันสมัย ถือเป็นการเปลี่ยนแปลงที่น่าชื่นชมอย่างมาก ทีมงานพยายามอย่างหลากหลายเพื่อใช้ประโยชน์จากข้อดีของ Rust โดยยังคงความเข้ากันได้กับโค้ดเบสเดิม
  • crate อย่าง xpcom_async, moz_http, xml_struct, ews ที่สร้างขึ้นระหว่างกระบวนการพัฒนา น่าจะนำไปใช้ประโยชน์กับโปรเจ็กต์อื่นนอกเหนือจาก Thunderbird ได้ด้วย
  • อย่างไรก็ตาม สถาปัตยกรรมเก่าของ Thunderbird และระบบบิลด์ที่พึ่งพาโค้ดเบสของ Firefox อย่างมาก อาจยังเป็นอุปสรรคต่อการนำ Rust เข้ามาใช้ต่อไปในอนาคต ในระยะยาวจึงน่าจะต้องมีความพยายามเพื่อแก้ปัญหาเหล่านี้ด้วย
  • EWS เป็นบริการอีเมลที่ถูกใช้อย่างแพร่หลายในองค์กรและสถาบันการศึกษา ดังนั้นหาก Thunderbird รองรับ EWS ได้ ก็จะช่วยขยายฐานผู้ใช้ได้อย่างมาก แต่ในขณะเดียวกัน EWS ก็เป็นโปรโตคอลปิดของ Microsoft จึงอาจมีความยากในการนำมาใช้งานในโปรเจ็กต์โอเพนซอร์ส
  • โดยรวมแล้ว ดูเหมือนว่าโปรเจ็กต์ Thunderbird กำลังใช้โอกาสจากการนำ Rust เข้ามาเป็นแรงผลักดันในการปรับสถาปัตยกรรมให้ทันสมัยและขยายฟังก์ชันอย่างจริงจัง ในฐานะหนึ่งในไคลเอนต์อีเมลโอเพนซอร์สตัวแทนสำคัญ ความก้าวหน้าของ Thunderbird จะเป็นประโยชน์อย่างมากต่อผู้ใช้

1 ความคิดเห็น

 
GN⁺ 2024-04-21
ความคิดเห็นบน Hacker News
  • มีการตั้งข้อสงสัยว่าทำไมจึงยังพัฒนาอยู่ ทั้งที่ EWS มีกำหนดจะถูกถอดออกในอีก 2 ปี
  • Thunderbird มีปัญหาความช้าเหมือนช่วงก่อนอัปเดต Firefox Quantum โดยเมื่อสลับระหว่างโฟลเดอร์ที่มีอีเมลหลายพันฉบับจะเกิดอาการหน่วง ขณะที่ Outlook สลับได้ทันที
  • มีความเห็นว่าหากในเชิงกลยุทธ์เป้าหมายคือทำให้ผู้คนหันมาใช้ Thunderbird ก็ถือว่าสมเหตุสมผล แต่ในเชิงอุดมการณ์ การรองรับ JMAP น่าจะดีกว่า
  • มีการย้อนนึกถึงช่วง 20 ปีก่อนในวงการไอที ตอนที่ยังมีคนใช้ Linux น้อยและหาไคลเอนต์ Exchange ได้ยาก
  • มีการชี้ว่าชื่อเรื่องถูกเปลี่ยนเป็นเนื้อหาเกี่ยวกับการเขียนโปรแกรม Rust แต่เนื้อหาจริงไม่ได้เกี่ยวกับการรองรับ Exchange ของ Thunderbird
  • มีความเห็นว่าแม้จะไม่ชอบ Exchange แต่ก็ดีใจที่ตอนนี้สามารถส่งอีเมลข้อความล้วนบน Windows ได้
  • มีข้อเสนอว่าควรมีฟังก์ชันนำเข้าไฟล์ PST มาให้เป็นค่าเริ่มต้นเพื่อให้ผู้ใช้ย้ายมาจาก Outlook ได้ง่าย
  • หวังว่า Thunderbird จะกลายเป็นคู่แข่งที่เหมาะสมของ Evolution จาก Gnome ในด้านการรองรับ EWS
  • มีการเน้นย้ำว่าจำเป็นอย่างยิ่งที่จะต้องมีโปรโตคอลใหม่อย่าง SMTP/2 + IMAP5
  • มีความเห็นว่าการปรับปรุงครั้งนี้น่าจะเป็นข่าวดีสำหรับผู้ที่เคยจำเป็นต้องใช้ส่วนขยาย OWL