Greg K-H: "Menulis kode baru dengan Rust menguntungkan semua orang"
(lore.kernel.org)Mengapa Rust perlu diadopsi ke kernel Linux
- Berdasarkan pengalaman meninjau hampir semua perbaikan bug kernel Linux dan masalah keamanan selama 15 tahun terakhir, saya ingin menjelaskan perlunya adopsi Rust
- Tidak semua perbaikan bug masuk ke pohon versi stabil, tetapi secara umum yang penting akan masuk, dan saya berada pada posisi untuk memeriksa semua CVE kernel
Batasan C dan keunggulan Rust
- Sebagian besar bug yang terjadi di kernel Linux berasal dari batasan struktural bahasa C
- Terutama, ada banyak bug yang muncul karena kesalahan sederhana, dan masalah seperti ini hampir tidak terjadi di Rust
- Memory overwrite (Rust tidak menangkap semua kasus, tetapi dapat menyelesaikan sebagian besar)
- Masalah pembersihan jalur error
- Pemeriksaan nilai error yang terlewat
- Bug use-after-free (digunakan setelah dibebaskan)
- Dengan mengadopsi Rust di kernel, developer dan maintainer bisa terlepas dari kesalahan mendasar seperti ini dan fokus pada masalah yang benar-benar sulit (kesalahan logika, race condition, dll.)
Codebase C yang ada tetap harus dipertahankan
- Saat ini kernel Linux terdiri dari lebih dari 30 juta baris kode C, dan mustahil menggantinya dengan Rust dalam waktu singkat
- Karena itu, upaya penguatan keamanan kode C yang dilakukan developer seperti Kees dan Gustavo tetap penting dan harus terus dilanjutkan
- Yang ideal bukanlah Rust menggantikan kode yang sudah ada, melainkan menulis kode baru (terutama driver) dengan Rust untuk mengurangi masalah
Keamanan API yang disediakan Rust
- Rust memungkinkan API internal kernel dirancang agar lebih aman dan lebih mudah digunakan
- Saat ini API kernel berbasis C rumit, mudah menimbulkan kesalahan, dan sering kali mengharuskan maintainer meninjaunya dengan sangat teliti
- Sebagai contoh, ada berbagai cara untuk menggunakan struktur seperti
struct cdevdengan aman, dan dibutuhkan banyak pengalaman untuk memanfaatkannya dengan benar - Dengan Rust, API bisa didefinisikan dengan lebih jelas, sehingga kemungkinan developer melakukan kesalahan dapat dikurangi secara signifikan
- Ini bukan hanya untuk pengguna Rust, tetapi juga perubahan yang membantu pengguna kode C yang sudah ada
Tanggapan terhadap kekhawatiran bahwa adopsi Rust akan sulit
- Rust bukan solusi ajaib → tetapi dapat menyelesaikan sebagian besar masalah yang ada
- Beban maintainer meningkat → tetapi developer yang menginginkan adopsi Rust-lah yang langsung mengerjakan hal tersebut
- Sulitnya memelihara codebase multibahasa → tetapi kernel Linux selama ini telah memecahkan masalah yang jauh lebih sulit
Kesimpulan
- Linux adalah alat yang digunakan banyak developer di seluruh dunia untuk memecahkan masalah, dan
- sekarang, jika ada tuntutan dari developer yang ingin menulis kode aman untuk hardware, itu tidak boleh diabaikan
- Model pengembangan Linux telah tumbuh hingga skala yang tidak pernah dibayangkan siapa pun, sambil menunjukkan kemampuan engineering yang luar biasa
- Kini saatnya melangkah menuju 20 tahun lebih perkembangan ke depan melalui adopsi Rust
Kita harus menerima teknologi dan ide baru, serta berupaya agar berhasil bersama komunitas.
24 komentar
Penerapan Rust, jika mempertimbangkan memory safety, tampaknya merupakan perubahan yang sulit dihindari. Mungkin akan ada upaya untuk menambal kembali lewat kompromi yang tepat.
Namun, secara pribadi, kata kunci Rust agak sulit tertangkap di mata saya, dan ketika melihatnya lagi lama setelahnya saya juga sering sulit mengingatnya, jadi rasanya memang agak susah untuk benar-benar akrab dengannya ;;;;
Saya paham semuanya memang hal-hal yang dibutuhkan, tetapi kadang terasa seperti dipaksa menghafal kata kerja tak beraturan dalam bahasa Inggris. Meski begitu, memang benar juga bahwa hasil karya yang ditulis dengan Rust cenderung menimbulkan lebih sedikit masalah di lapangan.....
Saya rasa keputusan untuk tidak memasukkan bahasa yang masih belum matang ke dalam kernel tidak pantas mendapat kecaman sebesar ini. Kalau diminta mencari orang di sekitar Anda yang benar-benar mahir menggunakan Rust sekarang juga, bukankah hampir tidak ada? Menurut saya, tidak akan terlambat jika bahasa ini dimasukkan setelah menjadi lebih matang dan jumlah penggunanya sudah cukup banyak, meski tidak harus sebanyak pengguna bahasa legacy.
Saya percaya kegunaan bahasa Rust bisa dibuktikan dengan cukup, bahkan tanpa harus diterapkan pada kernel Linux.
Cukup mengejutkan bahwa Rust, bahkan pada tingkat seperti sekarang, masih disebut sebagai "bahasa yang belum matang". Namun terlepas dari itu, saya juga merasa aneh kalau upaya untuk setidaknya mengurangi porsi bahasa yang tidak aman di kernel masih sampai mendapat kecaman sebesar ini. Di sekitar kita pun, tidak banyak orang yang cukup mahir menulis kode aman dalam C hingga bisa berkontribusi ke kernel, bukan? Daripada terus berharap C akan menjadi lebih matang lagi, sekarang justru tampaknya belum terlambat, ketika tuntutan era baru sudah cukup jelas terbentuk.
Rust sudah berguna, dan upayanya untuk masuk ke kernel kemungkinan bukan untuk membuktikan bahwa ia berguna.
Saat pertama kali memutuskan untuk mengadopsi Rust, rasanya memang pasti ada pembahasan soal itu.
Kalau dipikir-pikir, antara yang mahir C dan yang mahir Rust, jumlah talent pool jelas jauh lebih besar di pihak C.
Tapi di sisi lain, programmer yang sudah punya pengetahuan domain lengkap belajar satu bahasa lagi rasanya bukan hal sebesar itu,
meski tingkat kemahiran yang dituntut dari orang-orang yang menangani kernel tentu jadi cerita yang berbeda...
Pendapat ini juga bagus.
Saya sama sekali tidak mengerti klaim yang menyuruh untuk melakukan fork lalu keluar. Memangnya kenapa Linus harus melakukan fork dan keluar dari Linux?
Apakah ada yang menyuruh Linus untuk melakukan fork lalu pergi? Sepertinya saya belum melihat ada orang yang mengatakan hal seperti itu dalam perdebatan ini..
Saya juga pengguna Rust, tetapi jika kode Rust dan kode C bercampur, tanpa aturan yang ketat di proyek open source tentang sampai sejauh mana kode Rust diizinkan, menurut saya itu akan menjadi tidak terkendali atau setidaknya biaya review dan pemeliharaannya akan naik sangat besar, jadi saya melihat bahwa pilihan paling bijak adalah melakukan fork tanpa menambahkannya.
Saya tidak terlalu paham kernel, tetapi rasanya akan bagus jika kode C bisa diterjemahkan otomatis ke Rust. Tentu saja, selain masalah penerjemahan kode, mungkin juga ada masalah manusianya.
Jika memang ada banyak orang yang ingin membawa Rust ke kernel, bukankah mereka bisa melakukan fork lalu membuat proyek baru? Kemudian, saat sudah cukup matang, distro-distro utama mungkin akan beralih ke kernel berbasis Rust.
Saya benar-benar tidak paham kenapa mereka saling bertengkar.
Saya tidak begitu tahu apakah Anda punya pengalaman dalam pengembangan kernel, jadi saya juga kurang tahu harus menjelaskan bagaimana.
Pertama-tama, menerapkan bahasa Rust bukan berarti mengganti kernel menjadi Rust. Anda mungkin bisa bertanya, bukankah cukup dipisahkan lalu membuat kernel lain?
Bukan berarti ingin membuat kernel dengan bahasa Rust, melainkan hanya membuat
wrapperdalam Rust untuk antarmuka perangkat driver di kernel, sehingga hanya perangkat driver saja yang bisadibuat dengan Rust. Jadi, beralih ke proyek baru tidak ada artinya.
Saya belum pernah mengembangkan untuk Linux.
Sepertinya wrapper Rust untuk device driver memiliki struktur yang tidak bisa dipisahkan dari kernel...
Sungguh ironis melihat komunitas Linux, yang selama ini membenarkan gaya bicara toksik demi stabilitas kernel, sekarang justru menganggap respons seperti 'kalau tidak suka, fork saja' sebagai jawaban yang masuk akal.
Saya bukan bagian dari komunitas Linux, tetapi...
Saya rasa mereka dan penulis komentar ini tidak boleh dianggap sebagai komunitas yang sama.
Sepertinya ada hal yang sulit diprediksi: apakah hasil fork ini akan menjadi migrasi, atau justru memasuki masa perang antarkerajaan.
Bahkan setelah melakukan fork, sepertinya juga bukan situasi yang menyenangkan untuk terus mengikuti perubahan dari upstream.
https://id.news.hada.io/topic?id=16860
Melihat fork Realtime Linux baru digabungkan setelah 20 tahun, bukankah seharusnya keputusan untuk melakukan fork dibuat dengan sangat hati-hati?
Saya mengatakan itu setelah melihat ini.
Fitur real-time sudah lama bisa dipertahankan sebagai proyek yang terpisah dari kernel, dan siapa pun yang membutuhkan bisa mengambilnya lalu menerapkannya ke kernel untuk digunakan.
Saya memang pengguna Rust, tetapi saya terkesan dengan komentar hgwxx7_ yang diposting di r/rust1.
Saya ingat saat menghubungi beliau karena perlu backport ke versi stable atau hal serupa, beliau tetap merespons dengan baik meski sedang sangat sibuk.
"Rust bukanlah jawaban yang mutlak, tetapi lebih mendekati jawaban dibanding Java dan Python" -codemaster kimc-
Opini Hacker News
Apakah komentar kebencian seperti ini tidak bisa dilaporkan?
Saya setuju.