การตัดสินใจล่าสุดของ Ubuntu ในการนำ Rust-based rewrite ของ GNU Core Utils มาใช้ ได้จุดประกายการถกเถียงอย่างร้อนแรงในชุมชนเทคโนโลยีเกี่ยวกับการที่นักพัฒนาให้ความสำคัญกับภาษาโปรแกรมมิ่งที่กำลังเป็นที่นิยมมากกว่าการแก้ปัญหาที่แท้จริง ความขัดแย้งนี้มีจุดศูนย์กลางอยู่ที่การเปลี่ยนจาก Unix utilities ที่ผ่านการทดสอบมาหลายทศวรรษ ไปเป็นทางเลือกใหม่ที่เขียนด้วย Rust
GNU Core Utils ประกอบด้วยเครื่องมือ command-line ที่จำเป็น เช่น ls
, cp
, mv
, และ cat
ที่เป็นแกนหลักของระบบ Unix-like เครื่องมือเหล่านี้ทำงานได้อย่างเชื่อถือได้ตั้งแต่ช่วงทศวรรษ 1990 ทำให้ผู้วิจารณ์ตั้งคำถามว่าทำไมจึงต้องมีการเปลี่ยนแปลงเลย
ความปลอดภัยของหน่วยความจำ เทียบกับ เสถียรภาพที่พิสูจน์แล้ว
ข้อโต้แย้งหลักสำหรับการเขียนใหม่ด้วย Rust มุ่งเน้นไปที่ประโยชน์ด้านความปลอดภัยของหน่วยความจำ Rust ช่วยขจัดช่องโหว่ด้านความปลอดภัยทั้งหมดที่เป็นปัญหาของโปรแกรม C รวมถึงปัญหา buffer overflows และ memory corruption การสนทนาในชุมชนเผยให้เห็นว่าแม้แต่ GNU Core Utils ก็เคยประสบปัญหาด้านความปลอดภัย โดยฐานข้อมูล CVE แสดงช่องโหว่หลายจุดตลอดหลายปี รวมถึงหนึ่งช่องโหว่ที่มีคะแนนความรุนแรง 9.8 ในปี 2015
อย่างไรก็ตาม ผู้ที่มีความสงสัยโต้แย้งว่า C utilities ที่มีความเป็นผู้ใหญ่เหล่านี้ได้ผ่านการทดสอบและปรับปรุงประสิทธิภาพอย่างกว้างขวางมาสามทศวรรษแล้ว พวกเขากังวลว่าการเขียนใหม่จะนำข้อบกพร่องใหม่เข้ามาอย่างหลีกเลี่ยงไม่ได้ ในขณะที่อาจเสียการปรับปรุงประสิทธิภาพที่สะสมมาหลายปี
ประวัติความปลอดภัยของ GNU Core Utils
- CVE ที่มีคะแนนความรุนแรง CVSS 9.8 ในปี 2015 (การปฏิเสธบริการในยูทิลิตี้ sort)
- มี CVE ทั้งหมด 5 รายการที่บันทึกไว้ ซึ่งทั้งหมดเกิดจากการล้นของข้อมูลหรือความเสียหายของหน่วยความจำ
- ช่องโหว่ส่วนใหญ่เกี่ยวข้องกับปัญหาความปลอดภัยของหน่วยความจำที่ Rust ป้องกันได้โดยการออกแบบ
การอ้างเรื่องประสิทธิภาพถูกตรวจสอบ
ประเด็นที่เป็นที่ถกเถียงกันคือการเปรียบเทียบประสิทธิภาพระหว่าง C utilities ต้นฉบับกับคู่แข่ง Rust ในขณะที่ผู้วิจารณ์อ้างว่าเวอร์ชัน Rust สามารถเทียบเท่าประสิทธิภาพ C ได้เพียงเท่านั้น benchmark ล่าสุดกลับบอกเรื่องราวที่แตกต่าง โปรเจ็กต์ uutils ได้แสดงให้เห็นกรณีที่การใช้งาน Rust มีประสิทธิภาพเหนือกว่าคู่แข่ง GNU ท้าทายสมมติฐานเกี่ยวกับข้อได้เปรียบด้านความเร็วโดยธรรมชาติของ C
การถกเถียงเรื่องประสิทธิภาพขยายออกไปจากความเร็วดิบไปสู่การพิจารณาความสามารถในการบำรุงรักษาและประสบการณ์ของนักพัฒนา เครื่องมือ Rust สมัยใหม่มี package management, error handling และการสนับสนุน concurrency ที่ดีกว่าเมื่อเปรียบเทียบกับ workflow การพัฒนา C แบบดั้งเดิม
ตัวอย่างการเปรียบเทียบประสิทธิภาพ
- uutils cut มีประสิทธิภาพเหนือกว่าทั้งเวอร์ชัน BSD และ GNU ในการทดสอบเปรียบเทียบล่าสุด
- การใช้งาน Rust สามารถใช้ประโยชน์จากการปรับปรุงประสิทธิภาพ SIMD ได้ง่ายกว่า C
- GNU Core Utils ส่วนใหญ่ทำงานแบบเธรดเดียว ในขณะที่ Rust ช่วยให้สามารถใช้งานหลายเธรดได้อย่างปลอดภัย
- ข้อกล่าวอ้างด้านประสิทธิภาพที่ว่า " Rust สามารถเทียบเท่า C ได้เป็นอย่างดีที่สุดเท่านั้น" ถูกท้าทายโดยผลลัพธ์ในโลกแห่งความเป็นจริง
มิติด้านใบอนุญาต
แง่มุมที่มักถูกมองข้ามของการเขียนใหม่เหล่านี้เกี่ยวข้องกับการเปลี่ยนแปลงใบอนุญาต GNU Core Utils ใช้ใบอนุญาต GPL ซึ่งกำหนดให้งานที่พัฒนาต่อยอดต้องคงสถานะ open source ไว้ ทางเลือก Rust หลายตัวใช้ใบอนุญาตแบบ permissive เช่น MIT หรือ Apache ที่อนุญาตให้ใช้งานเชิงพาณิชย์โดยไม่ต้องแบ่งปันการแก้ไขกลับสู่ชุมชน
GNU utilities ทั้งหมดใช้ใบอนุญาต GPL ในช่วงเวลาที่การ relicensing และ rug pulls อื่นๆ กำลังเป็นข่าวใหญ่ ฉันรู้สึกกังวลที่นักพัฒนาจำนวนมากเลือกใช้ใบอนุญาต 'permissive' สำหรับการสร้างสิ่งต่างๆ ใหม่ใน Rust
การเปลี่ยนแปลงนี้ทำให้นักพัฒนาบางคนกังวลเกี่ยวกับบริษัทที่ได้ประโยชน์จากงานของชุมชนโดยไม่มีส่วนร่วมในการปรับปรุงกลับสู่ระบบนิเวศ
ผลกระทบด้านลิขสิทธิ์
- GNU Core Utils: ใบอนุญาต GPL (copyleft ต้องแชร์การแก้ไข)
- ทางเลือกจาก Rust: มักใช้ใบอนุญาต MIT/Apache (อนุญาตให้ใช้ได้อย่างเสรี สามารถนำไปใช้เชิงพาณิชย์ได้)
- ผลกระทบต่อบริษัท: บริษัทสามารถใช้เวอร์ชันที่อนุญาตให้ใช้ได้อย่างเสรีโดยไม่ต้องมีส่วนร่วมกับชุมชน
- ตัวอย่าง: โค้ด FreeBSD ถูกนำไปใช้ใน PlayStation , Nintendo Switch โดยไม่ได้ให้ประโยชน์กับชุมชน
การเปลี่ยนแปลงรุ่นในการพัฒนา
การถกเถียงนี้ยังสะท้อนความตึงเครียดที่กว้างขึ้นระหว่างชุมชนนักพัฒนาที่มีประสบการณ์และชุมชนใหม่ โปรแกรมเมอร์รุ่นใหม่มักจะชอบภาษาสมัยใหม่ที่มีเครื่องมือและคุณสมบัติด้านความปลอดภัยที่ดีกว่า ในขณะที่นักพัฒนาที่มีประสบการณ์ให้ความสำคัญกับเสถียรภาพและประวัติที่พิสูจน์แล้วของโซลูชันที่มีอยู่
บางคนโต้แย้งว่าการดึงดูด contributor ใหม่ต้องการการทำให้ codebase ทันสมัย เมื่อผู้ดูแลที่มีประสบการณ์เกษียณ โปรเจ็กต์ที่เขียนด้วยภาษาเก่าอาจมีปัญหาในการหาผู้สืบทอดที่เต็มใจ ความนิยมที่เพิ่มขึ้นของ Rust ในหมู่นักพัฒนาใหม่อาจช่วยให้มั่นใจในการบำรุงรักษาเครื่องมือโครงสร้างพื้นฐานที่สำคัญในระยะยาว
นอกเหนือจากคุณค่าทางเทคนิค
ความขัดแย้งขยายออกไปนอกเหนือจาก coreutils เพื่อแสดงถึงรูปแบบที่ใหญ่กว่าในการพัฒนาซอฟต์แวร์ การถกเถียงที่คล้ายกันได้เกิดขึ้นรอบการเขียนเครื่องมือพื้นฐานอื่นๆ ใหม่ใน Rust ตั้งแต่ web servers ไปจนถึงส่วนประกอบของระบบปฏิบัติการ ผู้วิจารณ์มองว่านี่เป็นการประกาศนียมภาษาที่ขับเคลื่อนด้วยความกระตือรือร้นสำหรับเทคโนโลยีใหม่มากกว่าความต้องการที่แท้จริงในการปรับปรุง
ผู้สนับสนุนโต้แย้งว่าการปรับปรุงแบบค่อยเป็นค่อยไปในด้านความปลอดภัย ประสิทธิภาพ และความสามารถในการบำรุงรักษา สมควรแก่ความพยายาม โดยเฉพาะสำหรับส่วนประกอบระบบที่สำคัญที่จะถูกใช้งานเป็นทศวรรษ
การตัดสินใจของ Ubuntu ในท้ายที่สุดสะท้อนถึงการแลกเปลี่ยนที่ซับซ้อนระหว่างนวัตกรรมและเสถียรภาพที่กำหนดการพัฒนาซอฟต์แวร์สมัยใหม่ ในขณะที่ประโยชน์ในทางปฏิบัติในทันทีอาจดูจำกัด ผลกระทบระยะยาวต่อความปลอดภัยของระบบ ความสามารถในการบำรุงรักษา และการมีส่วนร่วมของนักพัฒนาอาจพิสูจน์ได้ว่ามีความสำคัญเมื่อภูมิทัศน์เทคโนโลยียังคงพัฒนาต่อไป
อ้างอิง: Are We Chasing Language Hype Over Solving Real Problems?