- Proyek Git secara resmi mengumumkan bahwa ke depan Rust akan diadopsi ke inti proyek, dan mulai Git 3.0 Rust akan menjadi persyaratan wajib untuk build
- Seri patch ini dijalankan sebagai adopsi eksperimental (test balloon), mirip dengan pengenalan fitur C99 di masa lalu, dengan tujuan menyiapkan infrastruktur adopsi Rust secara bertahap
- Sebagai langkah pertama, modul varint.c yang hampir tidak memiliki dependensi dikonversi ke Rust untuk memverifikasi interoperabilitas C-Rust dan tooling build
- Saat ini hanya build Meson yang didukung, dan ke depan akan ditambahkan dukungan Makefile serta verifikasi build Rust di CI dan pemeriksaan konsistensi format berbasis
cargo format
- Ini merupakan perubahan penting jangka panjang yang meningkatkan keamanan kode dan skalabilitas, sambil memberi waktu kepada komunitas Git dan para distributor untuk beradaptasi dengan persyaratan baru toolchain Rust
Latar belakang adopsi Rust
- Git telah meninjau evolusi bahasa demi stabilitas dan kemudahan pemeliharaan
- Adopsi Rust berarti memperkuat keamanan memori, memanfaatkan toolchain modern, dan membuka peluang optimasi performa
- Selain itu, proyek ini ingin membangun codebase yang lebih kokoh melalui adopsi bahasa modern
- Dengan memberi pemberitahuan lebih awal bahwa Rust akan menjadi syarat wajib pada saat rilis Git 3.0, tujuannya adalah memberi waktu persiapan bagi ekosistem
- Cakupan penerapan kode Rust akan diperluas secara bertahap, dan pada akhirnya beberapa fungsi inti juga akan diimplementasikan ulang dalam Rust
Seri patch eksperimental
- varint.c dipilih sebagai modul pertama untuk penerapan Rust
- Sangat sederhana dan tidak memiliki dependensi
- Memungkinkan verifikasi interop C ↔ Rust
- Eksperimen dapat dilakukan tanpa memengaruhi keseluruhan fungsi Git
- Semua pengujian berhasil lolos pada versi varint.rs
Perubahan sistem build
- Saat ini dukungan Rust baru ditambahkan pada sistem build Meson
- Ke depan ada rencana menambahkan dukungan Rust ke Makefile
- Pekerjaan terkait CI juga perlu disiapkan
- Verifikasi build Rust dan operasionalnya
- Menjaga konsistensi gaya kode melalui
cargo format
- Otomatisasi tooling dan pemeliharaan lainnya
Rencana ke depan
- Pekerjaan kali ini lebih berfokus pada eksperimen proses adopsi daripada fitur Rust itu sendiri
- Setelah ini, lebih banyak fungsi internal Git termasuk modul xdiff dapat ditulis ulang dalam Rust
- Dengan memperluas penerapan Rust secara bertahap, proyek ini akan mendorong seluruh ekosistem untuk beradaptasi dengan lingkungan build berbasis Rust
Implikasi
- Git sedang mempersiapkan transisi bahasa paling penting dalam sejarahnya
- Dengan menjadikan Rust wajib, Git dapat memperoleh keamanan, kemudahan pemeliharaan, dan potensi perkembangan jangka panjang
- Bagi distributor dan pengembang, penyiapan lingkungan pengembangan Rust akan menjadi hal wajib di ekosistem Git ke depannya
1 komentar
Opini Hacker News
Tautan diskusi terkait
Karena dukungan Rust juga untuk bahasa yang belum punya standar, ada kecurigaan bahwa seiring waktu implementasinya akan jauh tertinggal seperti yang dulu terjadi pada Java
Git sudah tampak seperti alat yang sangat matang, dan rasanya hanya butuh pemeliharaan atau perbaikan, bukan kode baru dalam skala besar sampai perlu memperkenalkan bahasa baru
Tidak seperti Linux yang terus membutuhkan driver baru, untuk Git tidak terlihat alasan yang sebanding
Ia meminta seseorang menjelaskan apakah ada hal yang ia lewatkan
Perubahan Git bisa dilihat di RelNotes, atau dengan tampilan yang lebih mudah di kategori Git di blog GitHub
Dalam kasus git-branchless, ada fitur seperti merge dalam memori yang ditulis dengan Rust
Soal Rust juga bisa dicari lebih lanjut di mailing list tersebut
(Ia mengatakan bukan dirinya yang akan menilai pro dan kontra, pasti ada orang lain yang melakukannya)
Hampir tidak ada orang yang ingin mengembangkan Git dalam C, sementara pengembang yang tertarik pada penulisan ulang ke Rust sangat antusias untuk ikut bergabung
Git sudah sangat matang sehingga tampaknya tidak banyak kode baru yang akan ditambahkan
Rust jauh lebih kompleks dibanding C
Jika memang butuh fitur berorientasi objek, menggunakan C++98 saja rasanya jauh lebih sederhana dan mudah dipahami daripada C++ modern atau Rust
Rust bukan akan menjadi wajib untuk patch ke depannya, melainkan akan menjadi wajib di dalam sistem build
Jika ternyata salah, judulnya masih bisa diperbaiki lagi
Apakah itu berarti diperlukan untuk membangun sistem build itu sendiri, atau juga wajib untuk build aplikasinya
Ia sudah sangat berinvestasi pada Git dan membuat banyak proyek, jadi tidak ingin kehilangan sifat Git yang mudah diutak-atik
Justru Rust sebenarnya lebih mudah dipelajari daripada C pada umumnya, terutama C yang penuh bug, dan jelas lebih mudah daripada mempelajari source code Git atau Linux
Menurut GitHub, C 50%, Shell 38%, Perl 4%, sisanya TCL/Python dan lain-lain
Perl/TCL justru lebih tidak lazim
Seiring pertumbuhan proyek, banyak kode tambal-sulam yang ditambahkan di sana-sini, dan sekarang saatnya meningkatkan keamanan/kinerja serta merapikan kode tambalan lama itu
Rust dianggap cocok untuk itu
Menurutnya, Git yang memakai sebagian Rust tidak akan menghalangi dirinya membuat klien atau server Git sendiri
Catatan rilis Debian juga secara eksplisit menyebut masalah terkait paket Rust/Go
Saat membangun paket Rust, rebuild sering diperlukan karena masalah static linking, sehingga menimbulkan ketidaknyamanan dalam penggunaan nyata
Jika pihak Rust terus mengabaikan masalah ABI stabil/shared library yang mutlak dibutuhkan di OS Linux, justru itu bisa menimbulkan lebih banyak keluhan daripada C
Menurutnya, arsitektur software skala besar perlu dipertimbangkan dengan lebih hati-hati
Jika mencari kata kunci NonStop di tulisan ini, ada contohnya
Di RESF dan tempat lain sering dikatakan bahwa "platform tidak mendukung Rust", tetapi pada praktiknya yang benar-benar harus mendukung adalah compiler Rust agar itu bisa berjalan
git terasa sudah stabil di seri 2.x, jadi tampaknya tidak ada alasan untuk memecahkan kompatibilitas
Ada yang mempertanyakan apakah budaya pengembangan belakangan ini justru makin menjauh dari cara memakai toolchain seperti itu
Source control, build, dan lingkungan eksekusi bisa berbeda-beda sehingga perlu penyalinan jarak jauh atau eksekusi remote, dan aturan build juga perlu mendeteksi platform target
Dengan satu flag
--target, build untuk sekitar 100 platform bisa dilakukan tanpa banyak masalahMenurutnya, masalah sebenarnya adalah sebagian pengembang Git bersikeras mempertahankan keterbatasan mesin pengembangan lama atau statis mereka masing-masing
Cross-compilation selalu diperlakukan sebagai warga kelas dua, dan di proyek eksternal orang bahkan tidak berharap itu berjalan dengan semestinya
Bahkan distribusi Linux kadang membuat hal seperti Raspberry Pi dibangun hanya di perangkat keras aslinya
Karena itu, tidak ada yang benar-benar berupaya mendukungnya dengan baik
Linux dinilai sangat parah; struktur glibc sudah terlalu tua sehingga sulit menargetkan glibc minimum pada perangkat keras mana pun
Sebagian besar proyek bahkan tidak mencoba mendukung cross-compilation
Zig sedang berupaya memperbaiki hal ini
Git adalah alat inti proyek, sehingga perubahan membawa risiko besar, dan menjadikannya dependensi wajib hanya dalam waktu singkat seperti 6 bulan dianggap berisiko
Kompleksitas ini bertujuan menangkap lebih banyak kesalahan saat waktu kompilasi, tetapi akibatnya bahasanya sendiri menjadi sangat kompleks
Karena itu, ada yang tidak merekomendasikan adopsinya
Ia juga mengira kernel menolak adopsi Rust
Menambahkan sistem tipe setingkat Haskell dan sistem makro setingkat Lisp ke kernel yang sudah kompleks hanya akan menambah kompleksitas
Menelusuri kode Rust melalui serde juga sulit
Sebaliknya, Unmarshal di Go jauh lebih mudah ditelusuri
Alasannya karena lebih banyak informasi bisa dimuat ke dalam compiler
Ia tidak pernah mengalami masalah besar dengan Serde, malah lebih sering men-debug Unmarshal milik Go
Klaim bahwa kernel menolak Rust juga tidak tepat; yang sebenarnya terjadi hanyalah konflik antara dua pengembang soal tempat penyimpanan header
Rust punya hambatan masuk yang lebih tinggi daripada C, tetapi jarak antara 'Rust minimal' dan 'Rust yang cepat dan aman' jauh lebih kecil dibanding C
Itu dipandang sama pentingnya dengan borrow checker
Sintaksnya juga longgar
Linux kernel sebenarnya tidak menolak Rust