Quyết định chuyển sang Rust Coreutils của Ubuntu gây tranh cãi gay gắt về việc theo đuổi ngôn ngữ thời thượng thay vì giải quyết vấn đề thực tế

Nhóm Cộng đồng BigGo
Quyết định chuyển sang Rust Coreutils của Ubuntu gây tranh cãi gay gắt về việc theo đuổi ngôn ngữ thời thượng thay vì giải quyết vấn đề thực tế

Quyết định gần đây của Ubuntu về việc áp dụng phiên bản viết lại bằng Rust của GNU Core Utils đã châm ngòi cho một cuộc tranh luận sôi nổi trong cộng đồng công nghệ về việc liệu các nhà phát triển có đang ưu tiên các ngôn ngữ thời thượng hơn là giải quyết các vấn đề thực tế hay không. Tranh cãi tập trung xung quanh việc thay thế các tiện ích Unix đã được thử nghiệm qua nhiều thập kỷ bằng các phiên bản hiện đại được viết bằng Rust.

GNU Core Utils bao gồm các công cụ dòng lệnh thiết yếu như ls, cp, mv, và cat tạo nên xương sống của các hệ thống giống Unix. Những tiện ích này đã hoạt động ổn định từ những năm 1990, khiến các nhà phê bình đặt câu hỏi tại sao chúng lại cần được thay thế.

An toàn bộ nhớ so với tính ổn định đã được chứng minh

Lập luận chính cho việc viết lại bằng Rust tập trung vào lợi ích về an toàn bộ nhớ. Rust loại bỏ toàn bộ các lớp lỗ hổng bảo mật ảnh hưởng đến các chương trình C, bao gồm tràn bộ đệm và các vấn đề hỏng bộ nhớ. Các cuộc thảo luận trong cộng đồng cho thấy ngay cả GNU Core Utils cũng đã gặp phải các vấn đề bảo mật, với cơ sở dữ liệu CVE hiển thị một số lỗ hổng qua các năm, bao gồm một lỗ hổng có điểm nghiêm trọng 9.8 vào năm 2015.

Tuy nhiên, những người hoài nghi lập luận rằng các tiện ích C trưởng thành này đã được kiểm tra và tối ưu hóa kỹ lưỡng trong ba thập kỷ. Họ lo ngại rằng bất kỳ việc viết lại nào cũng sẽ không tránh khỏi đưa ra các lỗi mới trong khi có thể hy sinh những cải tiến hiệu suất tích lũy qua nhiều năm hoàn thiện.

Lịch sử Bảo mật GNU Core Utils

  • CVE với điểm số nghiêm trọng CVSS 9.8 vào năm 2015 (tấn công từ chối dịch vụ trong tiện ích sort)
  • Tổng cộng 5 CVE được ghi nhận, tất cả đều do tràn bộ đệm hoặc lỗi bộ nhớ
  • Hầu hết các lỗ hổng bảo mật liên quan đến vấn đề an toàn bộ nhớ mà Rust ngăn chặn ngay từ thiết kế

Các tuyên bố về hiệu suất bị xem xét kỹ lưỡng

Một điểm gây tranh cãi liên quan đến so sánh hiệu suất giữa các tiện ích C gốc và các phiên bản Rust tương ứng. Trong khi các nhà phê bình tuyên bố rằng các phiên bản Rust tốt nhất chỉ có thể bằng hiệu suất C, các bài kiểm tra gần đây lại kể một câu chuyện khác. Dự án uutils đã chứng minh các trường hợp mà các triển khai Rust thực sự vượt trội hơn các phiên bản GNU tương ứng, thách thức các giả định về lợi thế tốc độ vốn có của C.

Cuộc tranh luận về hiệu suất mở rộng ra ngoài tốc độ thô để xem xét khả năng bảo trì và trải nghiệm nhà phát triển. Các công cụ Rust hiện đại cung cấp quản lý gói, xử lý lỗi và hỗ trợ đồng thời tốt hơn so với quy trình phát triển C truyền thống.

Ví dụ So sánh Hiệu suất

  • uutils cut vượt trội hơn cả phiên bản BSD và GNU trong các bài kiểm tra gần đây
  • Các triển khai Rust có thể tận dụng tối ưu hóa SIMD dễ dàng hơn so với C
  • GNU Core Utils chủ yếu chạy đơn luồng, trong khi Rust cho phép đa luồng an toàn
  • Những tuyên bố về hiệu suất rằng " Rust chỉ có thể sánh ngang với C trong trường hợp tốt nhất" đã bị thách thức bởi kết quả thực tế

Khía cạnh cấp phép

Một khía cạnh thường bị bỏ qua của việc viết lại này liên quan đến thay đổi cấp phép. GNU Core Utils sử dụng giấy phép GPL, yêu cầu các tác phẩm phái sinh phải giữ mã nguồn mở. Nhiều phiên bản thay thế bằng Rust áp dụng các giấy phép tự do như MIT hoặc Apache, cho phép sử dụng thương mại mà không cần chia sẻ các sửa đổi trở lại cho cộng đồng.

Tất cả các tiện ích GNU đều được cấp phép GPL. Vào thời điểm mà việc thay đổi giấy phép và các hành động lừa đảo khác đang làm nên tiêu đề, tôi thấy lo ngại khi rất nhiều nhà phát triển lựa chọn giấy phép 'tự do' cho việc tái tạo mọi thứ bằng Rust.

Sự thay đổi này khiến một số nhà phát triển lo ngại về việc các tập đoàn hưởng lợi từ công việc của cộng đồng mà không đóng góp cải tiến trở lại cho hệ sinh thái.

Tác động về Bản quyền

  • GNU Core Utils: Giấy phép GPL (copyleft, yêu cầu chia sẻ các sửa đổi)
  • Các phương án thay thế bằng Rust: Thường sử dụng giấy phép MIT/Apache (cho phép linh hoạt, cho phép sử dụng thương mại độc quyền)
  • Tác động đối với doanh nghiệp: Các công ty có thể sử dụng các phiên bản cho phép linh hoạt mà không cần đóng góp lại
  • Ví dụ: Mã nguồn FreeBSD được sử dụng trong PlayStation , Nintendo Switch mà không mang lại lợi ích cho cộng đồng

Thay đổi thế hệ trong phát triển

Cuộc tranh luận cũng phản ánh những căng thẳng rộng lớn hơn giữa các cộng đồng nhà phát triển đã thành lập và mới nổi. Các lập trình viên trẻ thường thích các ngôn ngữ hiện đại với công cụ và tính năng an toàn tốt hơn, trong khi các nhà phát triển có kinh nghiệm đánh giá cao tính ổn định và thành tích đã được chứng minh của các giải pháp hiện có.

Một số người lập luận rằng việc thu hút những người đóng góp mới đòi hỏi phải hiện đại hóa codebase. Khi các nhà bảo trì kỳ cựu nghỉ hưu, các dự án được viết bằng ngôn ngữ cũ có thể gặp khó khăn trong việc tìm người kế nhiệm sẵn sàng. Sự phổ biến ngày càng tăng của Rust trong số các nhà phát triển mới có thể giúp đảm bảo việc bảo trì dài hạn các công cụ cơ sở hạ tầng quan trọng.

Vượt ra ngoài giá trị kỹ thuật

Tranh cãi mở rộng ra ngoài coreutils để đại diện cho một mô hình lớn hơn trong phát triển phần mềm. Các cuộc tranh luận tương tự đã xuất hiện xung quanh việc viết lại các công cụ nền tảng khác bằng Rust, từ máy chủ web đến các thành phần hệ điều hành. Các nhà phê bình coi đây là chủ nghĩa truyền bá ngôn ngữ được thúc đẩy bởi sự nhiệt tình với công nghệ mới hơn là nhu cầu thực sự về cải tiến.

Những người ủng hộ phản bác rằng những cải tiến gia tăng về an toàn, hiệu suất và khả năng bảo trì biện minh cho nỗ lực này, đặc biệt đối với các thành phần hệ thống quan trọng sẽ được sử dụng trong nhiều thập kỷ tới.

Quyết định của Ubuntu cuối cùng phản ánh những đánh đổi phức tạp giữa đổi mới và ổn định xác định phát triển phần mềm hiện đại. Trong khi những lợi ích thực tế trước mắt có thể có vẻ hạn chế, những tác động dài hạn đối với bảo mật hệ thống, khả năng bảo trì và sự tham gia của nhà phát triển có thể chứng tỏ là đáng kể khi bối cảnh công nghệ tiếp tục phát triển.

Tham khảo: Are We Chasing Language Hype Over Solving Real Problems?