Program ambisius DARPA bernama TRACTOR (Translating All C to Rust) telah memicu diskusi yang penuh gairah di komunitas pemrograman tentang jalur terbaik untuk mengamankan kode warisan. Meskipun program ini bertujuan menggunakan model bahasa besar untuk secara otomatis mengkonversi kode C yang rentan ke Rust yang aman memori, para pengembang mempertanyakan apakah pendekatan ini mengatasi tantangan sebenarnya atau apakah solusi alternatif mungkin lebih praktis.
Gambaran Umum Program DARPA TRACTOR
- Nama Lengkap: Translating All C to Rust ( TRACTOR )
- Tujuan: Mengotomatisasi terjemahan kode C lama ke Rust yang aman memori
- Pendekatan: Menggabungkan model bahasa besar dengan verifikasi formal
- Target: Menghilangkan kerentanan keamanan memori dalam program C
- Status Penghargaan: Kontrak tunggal diberikan kepada konsorsium universitas menggunakan pendekatan " ForCLift "
Tantangan Translasi Melampaui Konversi Sederhana
Komunitas telah mengangkat kekhawatiran signifikan tentang kompleksitas translasi C-ke-Rust yang bermakna. Tidak seperti alat transpilasi dasar seperti C2Rust yang menghasilkan kode Rust tidak aman dengan kerentanan yang sama seperti C aslinya, TRACTOR bertujuan menciptakan Rust yang benar-benar aman dan idiomatis. Ini memerlukan analisis canggih untuk memahami maksud programmer - menentukan apakah pointer mewakili nilai tunggal atau array, mengidentifikasi pola kepemilikan, dan mengenali idiom C umum yang dapat diterjemahkan dengan aman ke ekuivalen Rust.
Rintangan teknis sangat besar. Mengkonversi fungsi C yang menerima pointer mentah dan parameter ukuran menjadi slice Rust yang aman memerlukan pemahaman hubungan antara parameter-parameter ini di seluruh basis kode. Ini melibatkan pengenalan pola dari model bahasa besar dan verifikasi formal untuk memastikan translasi mempertahankan semantik program sambil mendapatkan jaminan keamanan.
Tantangan Teknis Utama
- Analisis Pointer: Menentukan apakah pointer mewakili nilai tunggal atau array
- Translasi Kepemilikan: Mengonversi manajemen memori C ke model kepemilikan Rust
- Pengenalan Idiom: Mengidentifikasi dan menerjemahkan pola umum C ke ekuivalen Rust yang aman
- Struktur Data Siklik: Menangani grafik objek kompleks yang tidak sesuai dengan model kepemilikan Rust
- Preservasi Performa: Mempertahankan efisiensi sambil menambahkan jaminan keamanan
Pendekatan Alternatif Menantang Strategi Rust-First
Sebagian besar diskusi berpusat pada solusi alternatif yang tidak memerlukan migrasi bahasa lengkap. Proyek seperti Fil-C menunjukkan bahwa C dapat dibuat aman memori melalui instrumentasi runtime dan garbage collection, berpotensi menawarkan jalur yang lebih kompatibel untuk sistem warisan. Pendekatan ini mempertahankan sintaks dan semantik C yang familiar sambil menambahkan pemeriksaan keamanan komprehensif.
Argumen untuk menggunakan Rust daripada implementasi C yang aman memori adalah semua tentang performa. Dan itu bukan argumen yang buruk! Tapi kita harus jujur tentang hal itu.
Namun, kritikus menunjukkan bahwa solusi semacam itu datang dengan overhead performa dan mungkin tidak cocok untuk semua aplikasi, terutama yang memerlukan jaminan real-time atau berjalan di lingkungan terbatas sumber daya di mana garbage collection tidak praktis.
Solusi Keamanan Alternatif yang Dibahas
- Fil-C: Implementasi C yang aman memori dengan garbage collection dan pemeriksaan runtime
- C2Rust: Tool yang sudah ada yang menghasilkan Rust tidak aman dengan kerentanan yang sama seperti C asli
- SaferCPlusPlus: Subset C++ yang aman memori dengan penegakan statis
- Enhanced C tooling: Analisis statis yang ditingkatkan dan instrumentasi runtime
Perbedaan Filosofi Desain Fundamental
Perdebatan mengungkap perbedaan filosofis yang lebih dalam tentang desain bahasa pemrograman. Beberapa pengembang berargumen bahwa model keamanan Rust, meskipun kuat, membuat pola pemrograman tertentu menjadi tidak perlu sulit atau tidak mungkin diekspresikan dengan aman. Struktur data kompleks dengan siklus, jenis tertentu dari mutabilitas interior, dan beberapa pola pemrograman sistem tingkat rendah memerlukan kode tidak aman atau perubahan arsitektur signifikan di Rust.
Keterbatasan ini tidak selalu merupakan cacat - mereka mencerminkan filosofi desain Rust untuk mencegah seluruh kelas bug melalui pemeriksaan waktu kompilasi. Namun, mereka berarti bahwa translasi langsung dari C ke Rust yang aman mungkin memerlukan restrukturisasi kode substansial daripada konversi sintaksis sederhana.
Kekhawatiran Deployment Praktis
Di luar tantangan teknis, komunitas telah menyoroti kekhawatiran praktis tentang adopsi skala besar. Banyak organisasi memiliki basis kode C yang luas yang terintegrasi dengan sistem build kompleks, pipeline deployment, dan toolchain yang ada. Biaya transisi dan potensi memperkenalkan bug baru selama translasi mungkin melebihi manfaat keamanan untuk beberapa aplikasi.
Diskusi juga menyentuh keahlian pengembang dan tantangan perekrutan. Meskipun Rust menawarkan jaminan keamanan yang menarik, pool pengembang C yang ada jauh melebihi jumlah ahli Rust, membuat pemeliharaan dan pengembangan lebih lanjut dari kode yang diterjemahkan berpotensi bermasalah bagi banyak organisasi.
Melihat ke Depan
Meskipun ada tantangan, investasi DARPA dalam penelitian translasi otomatis mewakili langkah penting menuju mengatasi utang keamanan masif dalam kode C warisan. Kombinasi program ini dari teknik machine learning dan verifikasi formal mungkin menghasilkan pendekatan terobosan yang membuat migrasi kode skala besar lebih layak daripada metode manual saat ini.
Apakah TRACTOR berhasil dalam tujuan ambisius atau pendekatan alternatif seperti tooling C yang ditingkatkan dan sistem keamanan runtime terbukti lebih praktis, inisiatif ini telah memicu diskusi berharga tentang masa depan pemrograman sistem dan keamanan perangkat lunak. Solusi utama mungkin melibatkan kombinasi pendekatan yang disesuaikan dengan kasus penggunaan dan kebutuhan organisasi yang berbeda.
Referensi: Eliminating Memory Safety Vulnerabilities Once and For All
