DevOps

mold 3.0.0 Rilis: Linker Tercepat Kini Ditulis Ulang dari C++ ke Rust

mold 3.0.0 Rilis: Linker Tercepat Kini Ditulis Ulang dari C++ ke Rust

mold 3.0.0 dirilis pada 5 Oktober 2026 sebagai versi pertama linker cepat ini yang ditulis ulang sepenuhnya dari C++ ke Rust. Proyek yang dikembangkan Rui Ueyama itu menyebut 3.0 sebagai pengganti langsung (drop-in replacement) untuk 2.42.1: opsi command-line, arsitektur target, dan hasil output tetap sama, dengan performa linking yang setara. Tujuan jangka panjangnya adalah menutup celah kompatibilitas dengan GNU ld, terutama pada dukungan linker script, agar mold bisa diadopsi sebagai linker default di distribusi Linux.

TL;DR

  • mold 3.0.0 adalah rilis pertama versi Rust; 2.42.1 menjadi rilis terakhir versi C++.
  • Proyek menyebutnya drop-in replacement untuk 2.42.1 dengan performa linking setara.
  • Build system pindah dari CMake ke Cargo dan membutuhkan Rust 1.95 atau lebih baru.
  • Versi Rust memeriksa batas memori, jadi input korup berhenti dengan panic, bukan segfault.
  • Target berikutnya: menutup celah linker script agar mold bisa jadi linker default distribusi Linux.

Apa yang berubah di mold 3.0.0?

Perubahan terbesarnya adalah bahasa implementasi: mold kini ditulis dengan Rust dan dibangun memakai Cargo, bukan lagi C++ dengan CMake. Menurut catatan rilis resminya, 3.0 adalah rilis pertama versi Rust, sementara 2.42.1 tetap menjadi rilis terakhir versi C++. Meski begitu, mold 3.0 dirancang sebagai pengganti langsung: ia menerima opsi command-line yang sama, mendukung arsitektur target yang sama, dan menghasilkan output yang sama kecuali untuk perbaikan bug yang didaftarkan.

Perubahan lain ada di sisi build. Proyek sekarang membutuhkan Rust 1.95 atau lebih baru dan sebuah kompiler C. Perintah cargo build --release dipakai untuk membangun, lalu ./install-mold.sh untuk memasang. Opsi CMake dihapus, variabel MOLD_TARGETS diganti dengan fitur Cargo, dan test suite kini dijalankan lewat cargo test alih-alih ctest. mold juga tidak lagi bergantung pada oneTBB, sementara mimalloc 3.5.3 tetap ditautkan secara statis.

Apakah mold 3.0 tetap secepat versi C++?

Ya, proyek menyatakan performa linking mold 3.0 setara dengan 2.42.1. Klaim itu diuji dengan menjalankan test suite di setiap target yang didukung, membandingkan output linker pada berbagai beban kerja nyata dan kombinasi opsi, serta membangun seluruh paket Gentoo. Dari pengujian tersebut, tim mold melaporkan tidak menemukan regresi.

Yang berubah bukan kecepatan mentahnya, melainkan keamanan saat menangani berkas masukan yang rusak. Versi C++ sebelumnya bisa membaca memori di luar batas dan berhenti dengan segmentation fault. Di mold 3.0, pembacaan itu diperiksa batasnya, sehingga mold berhenti dengan panic pada akses yang bermasalah, bukan crash yang sulit dilacak.

Perbaikan bug apa saja yang dibawa mold 3.0?

Selain rewrite bahasa, mold 3.0 memuat daftar panjang perbaikan bug dan peningkatan kompatibilitas. Beberapa di antaranya menyangkut output yang sebelumnya tidak deterministik pada opsi --dependency-file, --repro, dan opsi -r dengan banyak grup COMDAT bernama sama. Ada juga perbaikan pada relokasi GOT seperti R_X86_64_GOTOFF64 dan R_ARM_REL32 yang sebelumnya menghasilkan alamat salah secara diam-diam; kini kasus itu ditangani benar atau dilaporkan sebagai error.

Untuk opsi -r, sejumlah bug diperbaiki: pengecualian C++ yang rusak pada kode dari berkas masukan kedua dan seterusnya, penghapusan simbol yang masih dirujuk relokasi lewat opsi -x, -X, dan -s, serta --gc-sections yang sebelumnya membuang data yang masih dirujuk relokasi. Ada pula perbaikan bahwa opsi bermula satu tanda hubung kini dibaca sama seperti GNU ld, misalnya -entry=main yang tadinya disalahartikan menjadi -e ntry=main.

Perbaikan lintas arsitektur juga menonjol. Pada AArch64, ARM32, dan PPC32, panggilan ke fungsi statis di section lain lewat range extension thunk yang melompat ke alamat salah pada program besar kini diperbaiki. Untuk RISC-V dan LoongArch, sejumlah bug relokasi dan interaksi dengan --icf=all dibereskan. mold 3.0 juga tidak lagi memesan 8 GiB ruang alamat virtual saat start, sehingga bisa berjalan di bawah batas ulimit -v.

Siapa yang mengembangkan mold dan seberapa besar proyeknya?

mold dikembangkan oleh Rui Ueyama dan menjadi salah satu linker paling populer di kalangan pengembang yang mengejar kecepatan build. Di halaman repositorinya, proyek ini tercatat memiliki lebih dari 17 ribu bintang di GitHub. Proyek menerima donasi lewat GitHub Sponsors dan OpenCollective, dan dalam catatan rilisnya mengucapkan terima kasih kepada sejumlah organisasi serta individu yang mensponsori 32 dolar per bulan atau lebih selama siklus rilis ini.

Keputusan menulis ulang dari C++ ke Rust disebut sebagai langkah strategis, bukan sekadar pergantian bahasa. Selain menjawab risiko keamanan saat menangani masukan korup, proyek menyatakan bahwa pendekatan ini membuka jalan bagi mold untuk diadopsi sebagai linker default di distribusi Linux. Untuk sampai ke sana, tim masih harus menutup celah kompatibilitas dengan GNU ld, terutama pada dukungan linker script yang menjadi fokus garis pengembangan 3.x.

Apakah mold 3.0 sudah diuji pada proyek besar?

Proyek menyatakan telah memverifikasi kompatibilitas dengan menjalankan test suite pada setiap target yang didukung, membandingkan output linker pada beragam beban kerja dan kombinasi opsi di dunia nyata, serta membangun seluruh paket Gentoo. Dari pengujian itu, tim mold melaporkan tidak menemukan regresi. Salah satu perbaikan yang disebut secara spesifik adalah panggilan ke fungsi statis di section lain lewat range extension thunk yang sebelumnya melompat ke alamat salah pada program besar, seperti build debug ARM64 dari Chromium.

Uji seluas itu penting karena mold 3.0 adalah rilis mayor pertama di basis kode yang baru ditulis. Meski dirancang sebagai pengganti langsung untuk 2.42.1, ia menyentuh inti proses linking yang dipakai oleh seluruh rantai build. Karena itu, proyek menyarankan pengguna dengan skenario khusus, terutama linker script yang rumit, tetap menguji pada beban kerja sendiri sebelum menjadikannya default di lingkungan produksi.

Untuk adopsi jangka panjang, arah proyek sudah jelas: menutup celah kompatibilitas dengan GNU ld dan menyiapkan mold sebagai kandidat linker default distribusi Linux. Jika target itu tercapai, keuntungan kecepatan linking mold akan tersedia secara bawaan, tanpa perlu konfigurasi tambahan dari pengembang. Rilis 3.0 adalah tonggak menuju ke sana, sekaligus titik ketika basis kode berpindah sepenuhnya ke Rust.

Kapan sebaiknya mulai memakai mold 3.0?

Untuk sebagian besar proyek, mold 3.0 aman dicoba sekarang karena statusnya drop-in replacement: kamu bisa menukar 2.42.1 dengan 3.0 tanpa mengubah skrip build. Proyek menyarankan pengujian ulang pada beban kerja sendiri sebelum menjadikannya default, karena 3.0 adalah rilis mayor pertama di basis kode yang baru ditulis. Jika kamu memakai linker script yang rumit, tetap uji dulu, sebab dukungan linker script adalah area yang masih disempurnakan menuju versi 3.x berikutnya.

Pertimbangan lain adalah toolchain build. Kalau tim kamu memakai distribusi yang mengemas mold dari sumber, pemelihara paket perlu beralih ke Cargo dan menyediakan Rust 1.95 atau lebih baru. Untuk pengguna akhir yang memasang dari paket resmi distribusi, perubahan ini transparan: biner hasilnya tetap menerima opsi yang sama seperti sebelumnya.

Bagaimana cara membangun mold 3.0.0 dari sumber?

Karena build system sudah pindah ke Cargo, langkahnya dimulai dengan memasang Rust 1.95 atau lebih baru melalui rust-lang.org, lalu menjalankan cargo build --release mengikuti dokumentasi perintah cargo build, dan terakhir ./install-mold.sh untuk memasang. Skrip instalasi menerima variabel PREFIX dan DESTDIR bila kamu ingin menentukan lokasi pemasangan sendiri.

Ada satu catatan penting untuk pengguna yang memasang pustaka mold ke direktori non-standar, misalnya /usr/lib64. Kamu perlu menetapkan variabel lingkungan MOLD_LIBDIR ke direktori tersebut, baik saat membangun maupun saat memasang, agar mold -run bisa menemukan mold-wrapper.so. Untuk menjalankan test suite, install-build-deps.sh diganti dengan install-test-deps.sh. Catatan rilis lengkap beserta tautan ke setiap commit perbaikan tersedia di halaman rilis mold 3.0.0 di GitHub.

Apa perbedaan utama versi C++ dan versi Rust?

Secara fungsi, keduanya dimaksudkan setara. Perbedaan yang paling terasa ada di perkakas build, keamanan penanganan masukan, dan ketergantungan pustaka. Tabel berikut merangkum pergeserannya berdasarkan catatan rilis resmi.

Aspekmold 2.42.1 (C++)mold 3.0.0 (Rust)
Bahasa implementasiC++Rust
Build systemCMake, ctestCargo, cargo test
Kebutuhan toolchainKompiler C++, CMakeRust 1.95+, kompiler C
Ketergantungan threadingoneTBBTidak lagi memakai oneTBB
Masukan korupBerisiko segfaultDiperiksa batas, berhenti dengan panic
Status dukunganRilis terakhir versi C++Garis pengembangan aktif

Selain pergeseran besar itu, mold 3.0 memuat banyak perbaikan bug dan kompatibilitas lintas arsitektur, mulai dari AArch64, ARM32, RISC-V, LoongArch, PPC, SH4, hingga SPARC64. Beberapa di antaranya memperbaiki kasus output yang tidak deterministik pada --dependency-file, --repro, dan opsi -r. Ada pula perbaikan yang membuat opsi bermula satu tanda hubung dibaca sama seperti GNU ld, misalnya -entry=main yang sebelumnya disalahartikan.

FAQ

Apakah mold 3.0 kompatibel dengan proyek yang sudah memakai mold 2.42?

Ya. mold 3.0 dirancang sebagai pengganti langsung untuk 2.42.1: opsi command-line, arsitektur target, dan output tetap sama, kecuali untuk perbaikan bug yang didaftarkan di catatan rilis. Performa linking juga dilaporkan setara, sehingga migrasi tidak menuntut perubahan pada skrip build yang sudah ada.

Apakah mold 3.0 sudah bisa menjadi linker default di distribusi Linux?

Belum sepenuhnya. Salah satu tujuan garis 3.x adalah menutup celah kompatibilitas dengan GNU ld, khususnya pada dukungan linker script, agar mold bisa diadopsi sebagai linker default. Rilis 3.0 adalah langkah menuju ke sana, bukan titik akhirnya.

Apa risiko terbesar memakai mold 3.0 di lingkungan produksi?

Karena ini rilis mayor pertama di basis kode Rust yang baru, risikonya ada pada kasus tepi yang belum teruji, terutama proyek dengan linker script kompleks. Uji pipeline build kamu sendiri sebelum menjadikannya default, dan simpan jalur kembali ke 2.42.1 bila ada regresi.

Apakah mold 3.0 menambah dependensi baru?

Tidak menambah dependensi berat. mold 3.0 tidak lagi memakai oneTBB, tetap menautkan mimalloc 3.5.3 secara statis, dan menyertakan zstd serta BLAKE3. Kamu bisa membangun dengan fitur system-allocator bila ingin memakai malloc bawaan sistem.

Di mana saya bisa mengunduh mold 3.0.0?

Biner dan kode sumber tersedia di halaman rilis resmi di GitHub, dan sebagian distribusi Linux mengemasnya dari sumber. Karena build system berpindah ke Cargo, pemelihara paket perlu menyesuaikan resep build mereka agar menyertakan Rust 1.95 atau lebih baru.

Rekomendasi Tools & Layanan

Beberapa layanan yang dipake di panduan ini: free trial Alibaba Cloud (coba gratis, sesuaikan kebutuhan), dan halaman promo terbaru buat cek diskon yang lagi jalan bulan ini.

💬 Komentar (0)

Belum ada komentar. Jadilah yang pertama! 💬

Komentar akan muncul setelah moderasi.