เมื่อไม่นานมานี้นัก พัฒนาแอปพลิเคชัน Bottles ได้เปิดเผยรายละเอียดเกี่ยวกับงานที่พวกเขาจะทำในโครงการ Bottles Next ผ่านทางบล็อก ซึ่งเป็นโครงการที่มุ่งเป้าไปที่การออกแบบสถาปัตยกรรมและโค้ดเบสของโครงการใหม่ทั้งหมด
แถลงการณ์ระบุว่า Bottles เวอร์ชันปัจจุบันซึ่งเขียนด้วยภาษา Python โดยใช้ส่วนติดต่อผู้ใช้แบบ GTK นั้นเผชิญกับข้อจำกัดที่สำคัญซึ่งขัดขวางการเพิ่มคุณสมบัติใหม่ๆ เช่น การรองรับ macOS และก่อให้เกิดปัญหาที่สามารถแก้ไขได้ด้วยการเปลี่ยนแปลงโครงสร้างอย่างลึกซึ้งเท่านั้น
กว่าปีที่แล้ว เราได้ประกาศ Bottles Next ซึ่งเป็นโปรเจ็กต์ Bottles ที่เขียนใหม่ทั้งหมด ในตอนแรก แนวคิดคือการใช้ประโยชน์จากเทคโนโลยีเว็บเพื่อให้บรรลุประสบการณ์ที่เราจินตนาการไว้สำหรับผู้ใช้ของเรา อย่างไรก็ตาม ตามปกติแล้ว มีการวิจัย การอภิปราย การทดลอง และการประเมินซ้ำอย่างต่อเนื่อง
ทำไมต้องผ่านปัญหาทั้งหมดนี้? เพื่อให้แน่ใจว่าเราตัดสินใจได้ถูกต้อง
หลังจากการประกาศ เราเริ่มทดลองกับเทคโนโลยีมากมาย แต่เหนือสิ่งอื่นใด เรารับฟังความคิดเห็นจากชุมชน โดยเฉพาะเทคโนโลยีที่เกี่ยวข้องกับอิเล็กตรอน สิ่งนี้กระตุ้นให้เราสำรวจเส้นทางอื่นๆ ซึ่งนำเราไปสู่การสร้างต้นแบบเฟรมเวิร์กที่ปรับให้เข้ากับความต้องการเฉพาะของ Bottle Next
และนี่คือวันนี้
ด้วยเหตุนี้ แนวทางใหม่จึงแบ่งแอปพลิเคชันออกเป็นสามส่วนหลัก:
- ลูกค้า: รับผิดชอบอินเทอร์เฟซแบบกราฟิก
- เซิร์ฟเวอร์: รับผิดชอบด้านตรรกะในการรันแอปพลิเคชันและจัดการคำนำหน้าไวน์
- ตัวแทน: ซึ่งดำเนินการภายใน Wine เพื่อโต้ตอบโดยตรงกับ Windows API
แม้ว่าในตอนแรกจะมีการพิจารณาใช้เทคโนโลยีเว็บเช่น Electron และ VueJS ในการพัฒนาฝั่งไคลเอนต์ และพัฒนาฝั่งเซิร์ฟเวอร์ด้วยภาษา Go แต่ปฏิกิริยาของชุมชนและผลลัพธ์ที่ได้จากต้นแบบทำให้ผู้พัฒนาต้องละทิ้งแนวคิดนี้ไป
ดังนั้น จึงตัดสินใจใช้ Rustทั้งฝั่งไคลเอนต์และเซิร์ฟเวอร์ ในขณะที่ส่วนติดต่อผู้ใช้แบบกราฟิกจะใช้เฟรมเวิร์ก libcosmic เฟรมเวิร์กนี้ซึ่งใช้ในสภาพแวดล้อมเดสก์ท็อป COSMIC เป็นส่วนขยายของ ไลบรารี icedซึ่งช่วยให้สร้างส่วนติดต่อผู้ใช้แบบกราฟิกที่ทันสมัยและปรับขนาดได้ง่ายขึ้นlibcosmic ใช้โมเดลการเขียนโปรแกรมแบบตอบสนอง (reactive programming model)และมีสถาปัตยกรรมคล้ายกับภาษา Elm แบบประกาศ (declarative Elm language) ทำให้ผู้พัฒนาที่คุ้นเคยกับแนวทางนี้เข้าใจได้ง่ายขึ้น

แม้ว่าผู้พัฒนาจะต้องการใช้ภาษา Go มากกว่า แต่สุดท้ายก็เลือกใช้ Rust เนื่องจากมีเครื่องมือคุณภาพสูงสำหรับการพัฒนาส่วนติดต่อผู้ใช้แบบกราฟิกในภาษา Go อย่างจำกัด ถึงแม้จะมีการเปลี่ยนแปลงนี้ สถาปัตยกรรมใหม่ก็ยังมีแผนที่จะคงเวอร์ชันคลาสสิกของส่วนติดต่อผู้ใช้ไว้เป็นตัวเลือก เพื่อให้ผู้ใช้ได้รับประสบการณ์ที่คุ้นเคยในขณะที่ปรับตัวให้เข้ากับมาตรฐานและเทคโนโลยีใหม่ๆ
ในด้านการแสดงผล Bottles Next จะรองรับเอนจิ้นต่างๆ เช่น Vulkan, Metal, DX12, OpenGL 2.1+ และ OpenGL ES 2.0+ทำให้สามารถปรับใช้ได้กับระบบและฮาร์ดแวร์ที่หลากหลาย การออกแบบใหม่นี้สัญญาว่าจะมอบประสิทธิภาพที่ดีขึ้น ขยายความเข้ากันได้ข้ามแพลตฟอร์ม และวางรากฐานที่แข็งแกร่งยิ่งขึ้นสำหรับการพัฒนา Bottles ในอนาคต
การอัปเดตนี้ส่งผลต่อทั้ง Bottles Legacy (เวอร์ชันปัจจุบันของ Bottles) และ Bottles Next ในอีกไม่กี่สัปดาห์ข้างหน้า cpak เวอร์ชันแรกจะเสร็จสมบูรณ์ มันเป็นรูปแบบการแจกจ่ายซอฟต์แวร์แบบพกพาและขจัดข้อมูลซ้ำซ้อนโดยอิงจากอิมเมจ OCI ทั้งหมด
นอกจากนี้ ยังมีการกล่าวถึงว่าเอเจนต์ Bottles Nextซึ่งทำงานภายในสภาพแวดล้อม Windows ที่สร้างโดย Wine จะถูกเขียนด้วยภาษา C# โดยใช้ .NETการเลือกใช้ภาษาดังกล่าวตอบสนองความต้องการเฉพาะของบริการ WineBridge ซึ่งต้องการการบูรณาการที่มีประสิทธิภาพกับ Windows API ในสภาพแวดล้อมจำลอง
ในส่วนของการพัฒนาคาดว่าจะมีการปล่อยคอนเทนเนอร์สำหรับทดสอบต้นแบบแรกของ Bottles Next ซึ่งเขียนด้วยภาษา Rust ทั้งหมด ในอีกไม่กี่สัปดาห์ ข้างหน้า ในตอนนี้ มีเพียงเวอร์ชันสาธิตพื้นฐานเท่านั้นที่ใช้งานได้ เพื่อให้ผู้ใช้สามารถเข้าใจถึงความสามารถและทิศทางของโครงการในเบื้องต้น การเปลี่ยนมาใช้ Bottles Next นี้สัญญาว่าจะมีการปรับปรุงที่สำคัญในด้านฟังก์ชันการทำงาน ความเข้ากันได้ และประสิทธิภาพ
สุดท้ายนี้หากคุณสนใจเรียนรู้เพิ่มเติมเกี่ยวกับเรื่องนี้คุณสามารถดูรายละเอียดได้ที่ลิงก์ต่อไปนี้