Mold 3.0.0 ra mắt: Trình liên kết tốc độ cao được viết lại hoàn toàn bằng Rust

Công nghệ05 tháng 10, 2026·5 phút đọc

Mold 3.0.0 đánh dấu bước ngoặt lớn khi toàn bộ mã nguồn được viết lại từ C++ sang Rust, hứa hẹn an toàn hơn trước các tệp đầu vào bị hỏng. Đây là bản phát hành đầu tiên của phiên bản Rust, tương thích hoàn toàn với mold 2.42.1 và hướng tới mục tiêu trở thành trình liên kết mặc định trên các bản phân phối Linux.

Mold 3.0.0 ra mắt: Trình liên kết tốc độ cao được viết lại hoàn toàn bằng Rust

Mold 3.0.0 ra mắt: Trình liên kết tốc độ cao được viết lại hoàn toàn bằng Rust

Mold 3.0.0 vừa chính thức được phát hành, đánh dấu cột mốc quan trọng khi trình liên kết (linker) tốc độ cao này được viết lại toàn bộ từ C++ sang Rust. Đây là bản phát hành đầu tiên của phiên bản Rust, trong khi mold 2.42.1 là bản cuối cùng của phiên bản C++. Mục tiêu của mold 3.x là thu hẹp khoảng cách tương thích còn lại với GNU ld và mở đường để mold trở thành trình liên kết mặc định trên các bản phân phối Linux.

Viết lại bằng Rust: An toàn và tương thích

Theo tác giả Rui Ueyama, mold 3.0 được thiết kế như một bản thay thế trực tiếp (drop-in replacement) cho phiên bản 2.42.1. Nó chấp nhận cùng các tùy chọn dòng lệnh, hỗ trợ cùng các kiến trúc mục tiêu và tạo ra kết quả đầu ra tương tự, ngoại trừ các lỗi đã được sửa.

Linking performance remains on par with 2.42.1 — Hiệu năng liên kết vẫn ngang bằng với phiên bản 2.42.1.

Đội ngũ phát triển đã xác minh khả năng tương thích bằng cách chạy bộ kiểm thử (test suite) trên mọi kiến trúc mục tiêu được hỗ trợ, so sánh kết quả liên kết trên nhiều khối lượng công việc thực tế và tổ hợp tùy chọn khác nhau, đồng thời biên dịch toàn bộ các gói Gentoo. Kết quả cho thấy không có bất kỳ sự suy giảm hiệu năng nào.

Rust giúp mold an toàn hơn trước tệp đầu vào hỏng

Một trong những lợi ích lớn nhất khi chuyển sang Rust là khả năng xử lý an toàn các tệp đầu vào bị hỏng. Phiên bản C++ trước đây có thể đọc bộ nhớ vượt biên (out of bounds) khi gặp tệp như vậy và gây lỗi phân đoạn (segmentation fault). Trong mold 3.0, các thao tác đọc đều được kiểm tra biên, nên mold sẽ dừng lại với một panic tại vị trí truy cập lỗi thay vì gây hỏng chương trình.

Thay đổi trong hệ thống build

Việc chuyển sang Rust kéo theo nhiều thay đổi quan trọng trong cách build mold:

  • Cargo thay thế CMake: mold giờ được build bằng Cargo thay vì CMake, yêu cầu Rust 1.95 trở lên và một trình biên dịch C.
  • Lệnh build mới: Chạy cargo build --release để build mold và ./install-mold.sh để cài đặt. Script cài đặt chấp nhận các biến PREFIX và DESTDIR.
  • Biến môi trường MOLD_LIBDIR: Nếu cài thư viện vào thư mục khác với $PREFIX/lib (ví dụ /usr/lib64), cần đặt biến này cả khi build và khi cài đặt để tính năng mold -run tìm được mold-wrapper.so.
  • Loại bỏ phụ thuộc oneTBB: mold không còn phụ thuộc vào oneTBB, thay vào đó liên kết tĩnh mimalloc 3.5.3.
  • Bộ kiểm thử mới: Test suite giờ chạy bằng cargo test thay vì ctest.

Sửa lỗi và cải thiện tương thích

Bản phát hành 3.0.0 mang đến danh sách dài các bản sửa lỗi và cải thiện tương thích quan trọng:

  • Sửa lỗi crash khi tạo chương trình liên kết tĩnh với version script hoặc --default-symver.
  • Sửa lỗi crash hoặc đầu ra bị hỏng khi tệp đầu ra đồng thời là tệp đầu vào, chẳng hạn như mold -r -o foo.o foo.o bar.o.
  • --gc-sections không còn loại bỏ các hàm được chỉ định bởi --init và --fini.
  • Biểu tượng chung (common symbols) cùng tên nhưng khác kích thước giờ nhận kích thước lớn nhất và căn chỉnh nghiêm ngặt nhất, giống như GNU ld và lld.
  • Sửa nhiều lỗi đầu ra không xác định trong --dependency-file, --repro, và -r với nhiều nhóm COMDAT cùng tên.
  • Không còn đặt trước 8 GiB không gian địa chỉ ảo khi khởi động, giúp mold hoạt động được dưới ulimit -v.
  • Sửa lỗi trên nhiều kiến trúc: AArch64, PPC32, ARM32, RISC-V, LoongArch, PPC64, SH4, SPARC64 và m68k đều nhận được các bản vá quan trọng.

Ý nghĩa với cộng đồng mã nguồn mở

Mold là một dự án mã nguồn mở với hơn 17.4k sao trên GitHub và hiện nhận tài trợ qua GitHub Sponsors cùng OpenCollective. Trong chu kỳ phát hành này, dự án ghi nhận sự đóng góp của nhiều tổ chức và cá nhân lớn như Cybozu, SAP, Mercedes-Benz Group, Signal Slot, Ahrefs và các nhà tài trợ cá nhân.

Việc viết lại mold bằng Rust không chỉ là một thay đổi kỹ thuật đơn thuần, mà còn phản ánh xu hướng chuyển dịch ngày càng rõ nét của các công cụ hệ thống quan trọng sang ngôn ngữ Rust — một xu hướng đang được các bản phân phối Linux và cộng đồng phát triển hệ thống đặc biệt quan tâm nhờ tính an toàn bộ nhớ vượt trội.

Điều này có ý nghĩa gì với lập trình viên Việt Nam?

Với các nhà phát triển Việt Nam đang làm việc với hệ thống nhúng, xây dựng hệ điều hành hoặc tối ưu quy trình build cho các dự án C/C++ quy mô lớn, mold 3.0.0 là một công cụ đáng cân nhắc. Trình liên kết nhanh hơn đồng nghĩa với vòng lặp phát triển ngắn hơn, đặc biệt hữu ích khi biên dịch các dự án lớn.

Việc build từ mã nguồn giờ đây đơn giản hơn với Cargo, và nếu bạn đang dùng các bản phân phối Linux như Ubuntu, Arch hay Fedora, khả năng cao mold sẽ sớm trở thành trình liên kết mặc định trong các bản cập nhật sắp tới.

Chia sẻ:FacebookX
Nội dung tổng hợp bằng AI, mang tính tham khảo. Xem bài gốc ↗