ชุมชนโปรแกรมเมอร์ Rust ได้พัฒนารูปแบบที่ผิดปกติเมื่อพูดถึงการตั้งหมายเลขเวอร์ชัน โปรเจกต์หลายโปรเจกต์ที่พร้อมใช้งานจริงในระบบโปรดักชันอย่างชัดเจนยังคงอยู่ในเวอร์ชันก่อน 1.0 ซึ่งขัดต่อแนวทางปฏิบัติของ semantic versioning ( semver ) ที่ได้รับการยอมรับอย่างกว้างขวาง แนวโน้มนี้ได้จุดประกายการอภิปรายอย่างดุเดือดเกี่ยวกับการปฏิบัติในการตั้งหมายเลขเวอร์ชันและผลกระทบต่อการนำซอฟต์แวร์มาใช้งาน
ความขัดแย้งของหมายเลขเวอร์ชัน
ปัญหานี้เกิดขึ้นระหว่างการอภิปรายเกี่ยวกับโปรเจกต์ Rust หลายโปรเจกต์ รวมถึง uutils coreutils replacement ที่ได้รับความนิยม แม้จะมีความเสถียรพอที่จะรวมอยู่ใน Ubuntu และสภาพแวดล้อมโปรดักชันอื่นๆ โปรเจกต์ Rust หลายโปรเจกต์ยังคงติดอยู่ในเวอร์ชัน 0.x สิ่งนี้สร้างความสับสนให้กับผู้ใช้ที่อาจคิดว่าเครื่องมือเหล่านี้เป็นเพียงการทดลองหรือไม่เสถียร
ข้อกำหนดของ semantic versioning มีความชัดเจนในเรื่องนี้ ตามแนวทาง semver ซอฟต์แวร์ที่ใช้งานในโปรดักชันควรจะเป็นเวอร์ชัน 1.0.0 แล้ว หากผู้ใช้พึ่งพา API ที่เสถียร มันควรจะเป็น 1.0.0 ความลังเลที่จะยอมรับเวอร์ชัน 1.0 ดูเหมือนจะเกิดจากความวิตกกังวลของนักพัฒนามากกว่าข้อจำกัดทางเทคนิค
หมายเหตุ: Semantic versioning ( semver ) เป็นรูปแบบการตั้งเวอร์ชันที่ใช้ตัวเลขสามตัว (major.minor.patch) เพื่อสื่อสารความเข้ากันได้และการเปลี่ยนแปลงในการปล่อยซอฟต์แวร์
แนวทางการกำหนดเวอร์ชันแบบ Semantic สำหรับซอฟต์แวร์ที่ใช้ในการผลิต:
- ซอฟต์แวร์ที่ใช้ในการผลิตควรมีเวอร์ชัน 1.0.0 หรือสูงกว่า
- API ที่เสถียรซึ่งผู้ใช้พึ่งพาอาศัยควรได้รับสถานะเวอร์ชัน 1.0.0
- ข้อกังวลเรื่องความเข้ากันได้แบบย้อนหลังบ่งชี้ถึงความพร้อมสำหรับเวอร์ชัน 1.0.0
- เวอร์ชัน 0.x มีไว้สำหรับขั้นตอนการพัฒนาเบื้องต้นเท่านั้น
เกินกว่าข้อกังวลทางเทคนิค
การอภิปรายเรื่องหมายเลขเวอร์ชันเผยให้เห็นปัญหาที่ลึกกว่าภายในระบบนิเวศ Rust สมาชิกชุมชนบางคนโต้แย้งว่าความลังเลนี้สะท้อนปัญหาทางวัฒนธรรมที่กว้างขวางกว่า ซึ่งข้อกังวลด้านการตลาดมีความสำคัญเหนือความพร้อมทางเทคนิค ความกลัวที่จะผูกมัดกับหมายเลขเวอร์ชันที่เสถียรดูเหมือนจะมีน้ำหนักมากกว่าประโยชน์ของการสื่อสารที่ชัดเจนกับผู้ใช้
รูปแบบนี้ขยายไปเกินกว่าหมายเลขเวอร์ชันธรรมดาไปถึงการเลือกใบอนุญาตด้วย โปรเจกต์ Rust หลายโปรเจกต์เลือกใบอนุญาตที่เปิดกว้างอย่าง MIT ซึ่งนักพัฒนาบางคนโต้แย้งว่าไม่ได้ปกป้องสิทธิของผู้ใช้อย่างเพียงพอ การชอบใบอนุญาตที่เป็นมิตรกับบริษัทมากกว่าทางเลือก copyleft อย่าง GPL ได้กลายเป็นจุดขัดแย้งอีกจุดหนึ่งในชุมชน
การอ้างสิทธิ์ด้านประสิทธิภาพและความเป็นจริง
ระบบนิเวศ Rust ได้พัฒนาชื่อเสียงในด้านการอ้างสิทธิ์ด้านประสิทธิภาพ โดย blazingly fast กลายเป็นคำอธิบายที่ใช้กันแทบทั่วไปสำหรับโปรเจกต์ Rust แม้ว่า Rust สามารถผลิตซอฟต์แวร์ที่มีประสิทธิภาพสูงได้จริง แต่ความเป็นจริงนั้นมีความซับซ้อนมากกว่า เนื่องจากทั้ง Rust และ C คอมไพล์ผ่าน LLVM ความแตกต่างด้านประสิทธิภาพมักจะขึ้นอยู่กับรายละเอียดการใช้งานมากกว่าข้อได้เปรียบพื้นฐานของภาษา
รู้สึกเหมือนเราอยู่ในจุดเปลี่ยนที่จะมีซอฟต์แวร์ที่ปลอดภัยในที่สุด หลังจากหลายทศวรรษที่ C และ C++ ล้มเหลวในทุกขั้นตอน
ประโยชน์ด้านความปลอดภัยของ Rust มีความเป็นรูปธรรมมากกว่าการอ้างสิทธิ์ด้านประสิทธิภาพ การรับประกันความปลอดภัยของหน่วยความจำและ borrow checker ให้ข้อได้เปรียบที่แท้จริงเหนือภาษาโปรแกรมระบบแบบดั้งเดิม อย่างไรก็ตาม สำหรับแอปพลิเคชันหลายตัวเช่น coreutils ประโยชน์ด้านความปลอดภัยอาจมีความสำคัญน้อยกว่า เนื่องจากเครื่องมือเหล่านี้โดยทั่วไปไม่ต้องการสิทธิพิเศษระดับสูง
ลักษณะทั่วไปของโปรเจค Rust :
- มีแนวโน้มที่จะคงอยู่ในเวอร์ชัน 0.x แม้จะพร้อมใช้งานจริงแล้ว
- ชอบใช้ใบอนุญาต MIT มากกว่า GPL
- มักใช้คำอ้างเรื่องประสิทธิภาพแบบ "blazingly fast" บ่อยครั้ง
- เน้นไปที่ประโยชน์ด้านความปลอดภัยของหน่วยความจำและการรักษาความปลอดภัย
- การผสานรวมกับโครงสร้างพื้นฐานคอมไพเลอร์ LLVM
มองไปข้างหน้า
ความลังเลที่จะยอมรับเวอร์ชัน 1.0 สะท้อนความท้าทายที่กว้างขวางกว่าในวัฒนธรรมการพัฒนาซอฟต์แวร์ แม้ว่าความระมัดระวังอาจมีคุณค่า แต่ความอนุรักษ์นิยมที่มากเกินไปในการตั้งหมายเลขเวอร์ชันสร้างอุปสรรคที่ไม่จำเป็นต่อการนำมาใช้งาน ผู้ใช้ต้องการสัญญาณที่ชัดเจนเกี่ยวกับความครบกำหนดของซอฟต์แวร์ และหมายเลขเวอร์ชันทำหน้าที่เป็นเครื่องมือสื่อสารที่สำคัญ
ความสำเร็จทางเทคนิคของชุมชน Rust น่าประทับใจ แต่ระบบนิเวศจะได้รับประโยชน์จากความมั่นใจมากขึ้นในการตั้งหมายเลขเวอร์ชันและการสื่อสารที่ชัดเจนกว่าเกี่ยวกับความพร้อมของซอฟต์แวร์ เมื่อโปรเจกต์เหล่านี้ยังคงเติบโต การยอมรับหลักการ semantic versioning อาจช่วยเชื่อมช่องว่างระหว่างความสามารถทางเทคนิคและการนำมาใช้งานของผู้ใช้
อ้างอิง: 0.1.8