15 poin oleh GN⁺ 2025-09-21 | 1 komentar | Bagikan ke WhatsApp
  • 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

 
GN⁺ 2025-09-21
Opini Hacker News
  • Dalam diskusi di thread lain tentang menjadikan Rust sebagai persyaratan wajib, penulis berpendapat bahwa lebih baik Rust diperkenalkan dulu sebagai dependensi opsional, lalu baru dijadikan wajib nanti ketika dukungan Rust sudah ditambahkan ke gcc
    Tautan diskusi terkait
    • Ditekankan bahwa compiler gcc kurang konsisten; misalnya gcj (gcc untuk Java) hampir tidak dipakai siapa pun
      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
  • Ada yang bertanya-tanya mengapa Git ingin mengadopsi Rust
    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
    • Git memang tidak terlalu mencolok, tetapi fitur baru terus ditambahkan
      Perubahan Git bisa dilihat di RelNotes, atau dengan tampilan yang lebih mudah di kategori Git di blog GitHub
    • Jika mencoba alat seperti jj atau git-branchless, anggapan bahwa git sudah selesai bisa berubah
      Dalam kasus git-branchless, ada fitur seperti merge dalam memori yang ditulis dengan Rust
    • Ada banyak jawaban di tulisan ini, jadi layak dijadikan referensi
      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)
    • Proyek C yang sudah tua makin kesulitan menarik pengembang baru
      Hampir tidak ada orang yang ingin mengembangkan Git dalam C, sementara pengembang yang tertarik pada penulisan ulang ke Rust sangat antusias untuk ikut bergabung
    • C tidak aman
  • Ada yang mempertanyakan mengapa Rust terus ingin diperkenalkan di banyak tempat
    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
  • Judulnya dianggap agak menyesatkan
    Rust bukan akan menjadi wajib untuk patch ke depannya, melainkan akan menjadi wajib di dalam sistem build
    • Seseorang mengucapkan terima kasih dan mengatakan judulnya sudah diperbarui untuk mencerminkan hal itu
      Jika ternyata salah, judulnya masih bisa diperbaiki lagi
    • Lalu muncul pertanyaan lanjutan tentang apa maksudnya
      Apakah itu berarti diperlukan untuk membangun sistem build itu sendiri, atau juga wajib untuk build aplikasinya
  • Ada keluhan dari seseorang yang merasa usianya sudah cukup tua dan mungkin memang saatnya menerima perubahan, tetapi sebelumnya cukup tahu C saja untuk bisa ikut mengembangkan Git atau kernel, sedangkan sekarang harus tahu Rust juga, dan toolchain yang makin rumit menaikkan hambatan masuk
    Ia sudah sangat berinvestasi pada Git dan membuat banyak proyek, jadi tidak ingin kehilangan sifat Git yang mudah diutak-atik
    • Ada yang menilai sikap enggan belajar hal baru tidak cocok untuk industri ini
      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
    • Meski seseorang membuat sendiri klien Git dan web server, format repositori Git tidak berubah, jadi itu tidak akan memengaruhi kemudahan untuk diutak-atik
    • Sebagai catatan, Git sudah terdiri dari banyak bahasa
      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
    • Disebutkan bahwa bagi software engineer, mampu menangani banyak bahasa adalah hal yang normal, jadi penambahan bahasa bukan masalah besar
    • Ada banyak pengembang muda, termasuk dirinya, yang lebih menyukai Rust dan tidak ingin belajar C
      Menurutnya, Git yang memakai sebagian Rust tidak akan menghalangi dirinya membuat klien atau server Git sendiri
  • Ada permintaan penjelasan tambahan atas pendapat bahwa adopsi Rust tidak mungkin di sebagian platform dan sulit di tempat lain
    • Di sistem Linux, library apa pun harus digunakan sebagai system library, tetapi Rust tidak punya ABI stabil sehingga tidak bisa dipakai sebagai shared library yang sesungguhnya
      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
    • Pada platform proprietari yang tidak terlalu terlihat, mereka mendukung compiler C sendiri tetapi tidak memungkinkan dukungan LLVM
      Jika mencari kata kunci NonStop di tulisan ini, ada contohnya
    • Alasannya karena compiler Rust tidak mendukung platform tertentu (kombinasi OS/arsitektur)
      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
    • Karena Rust berbasis LLVM, cakupan platformnya lebih terbatas daripada yang didukung GCC
    • Ada yang menyarankan melihat bagian 'Tier 3' di daftar dukungan platform dalam dokumentasi resmi Rust
  • Ada yang penasaran perubahan apa yang akan hadir di git 3.0
    git terasa sudah stabil di seri 2.x, jadi tampaknya tidak ada alasan untuk memecahkan kompatibilitas
  • Dulu ada anggapan dasar bahwa dalam lingkungan cross-compilation, build, eksekusi, dan penyuntingan kode bisa terjadi dalam kondisi yang berbeda
    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
    • Justru ada yang merasa toolchain Rust membuat cross-compilation lebih mudah daripada bahasa kompilasi lain mana pun
      Dengan satu flag --target, build untuk sekitar 100 platform bisa dilakukan tanpa banyak masalah
      Menurutnya, masalah sebenarnya adalah sebagian pengembang Git bersikeras mempertahankan keterbatasan mesin pengembangan lama atau statis mereka masing-masing
    • Ada yang berpendapat sebagian besar pengembang sebenarnya tidak pernah cukup belajar cross-compilation
      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
    • Terlepas dari Rust/Y, kondisi cross-compilation saat ini dianggap nyaris seperti “bencana”
      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
  • Ada yang berpendapat lebih baik menunda adopsi sampai frontend Rust untuk gcc cukup matang
    Git adalah alat inti proyek, sehingga perubahan membawa risiko besar, dan menjadikannya dependensi wajib hanya dalam waktu singkat seperti 6 bulan dianggap berisiko
  • Rust dianggap memiliki kurva belajar yang besar dan kompleks seperti bahasa fungsional
    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
    • Ada yang justru merasa bahasa fungsional dan Rust lebih jelas daripada C atau Go
      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
    • C memang sederhana, tetapi C yang aman dan berkinerja baik sangat kompleks
      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
    • Ada yang menekankan bahwa meskipun Rust disebut kompleks, C juga tidak kalah kompleks
    • Kemudahan dari pengecekan saat waktu kompilasi seperti inilah yang menjadi keunggulan pembeda Rust
      Itu dipandang sama pentingnya dengan borrow checker
    • Bagi orang yang punya pengalaman Typescript dan terbiasa dengan linter untuk referensi atau unwrapping Result/penanganan error, Rust cukup mudah dipelajari
      Sintaksnya juga longgar
      Linux kernel sebenarnya tidak menolak Rust