Mulailah dengan Rust di pemrograman Windows

Bisakah Microsoft beralih dari penggunaan C, C ++, dan C # ke bahasa lain? Sebuah posting blog baru-baru ini dari Pusat Respons Keamanan Microsoft (MSRC) menyarankan bahwa mungkin mencari alternatif, dengan tujuan mengurangi risiko pada kodenya. Seperti Gavin Thomas, manajer teknik keamanan utama di MSRC, mencatat bahwa salah satu penyebab utama bug dalam kode Microsoft yang dilaporkan ke MSRC adalah kerusakan memori, bug yang membiarkan memori ditimpa atau mengakses memori yang seharusnya dilindungi.

Menjaga keamanan memori

Keamanan memori telah menjadi masalah yang signifikan untuk waktu yang lama, tetapi pekerjaan statistik yang dilakukan oleh MSRC menunjukkan bahwa masalah tersebut tidak akan hilang. Anda memiliki banyak alat untuk membantu menulis kode aman, dari Siklus Hidup Pengembangan Aman Microsoft sendiri, hingga menggunakan bahasa aman memori yang lebih baru seperti C #. Tetapi pendekatan tersebut memiliki trade-off: Kode yang mereka hasilkan lebih lambat dan bekerja pada level yang lebih tinggi daripada C ++.

Itu bukan masalah untuk kode yang berhubungan dengan pelanggan. Tidak ada perbedaan persepsi antara pengalaman pengguna C ++ - develoepd dan pengalaman pengguna bawaan C #. Tetapi pada level sistem, kode yang digunakan untuk membangun sistem operasi dan driver perangkat, ada perbedaan besar. Siklus prosesor penting saat Anda bekerja di tingkat sistem, dan seperti yang ditunjukkan Thomas dalam postingan blognya, bahasa yang tidak dilindungi seperti C ++ dan C adalah satu-satunya alat yang secara historis berfungsi di tingkat itu.

Jelas bahwa pendekatan aman memori yang digunakan oleh bahasa tingkat yang lebih tinggi tidak berfungsi di tingkat sistem. Banyak masalah yang mengganggu proyek Longhorn Microsoft yang gagal disebabkan oleh mencoba membangun seluruh OS pada platform .NET. Jadi bagaimana kita dapat membawa keamanan memori ke dasar pengembangan sistem?

Memperkenalkan Rust

Jawabannya hadir dengan generasi baru bahasa pemrograman sistem seperti Go dan Rust, bahasa yang memiliki desain aman memori .Net dengan kecepatan C dan C ++. Microsoft sudah menggunakan Go secara ekstensif di Azure, karena itu adalah bahasa yang digunakan Kubernetes. Namun pendekatan ini belum masuk ke Windows, di mana C ++ masih menjadi raja pemrograman sistem.

Dalam posting blognya, Thomas membuat argumen untuk menggunakan Mozilla's Rust sebagai bahasa sistem yang aman untuk Windows. Ini adalah saran yang menarik, dan sudah mendapat satu bukti besar yang mendukungnya: Perancang bahasa Mozilla sudah menggunakannya dalam rilis browser web terbarunya, di mana ia mendukung mesin rendering Mozilla saat ini dan generasi berikutnya. Pengguna Rust besar lainnya termasuk NPM repositori modul JavaScript, Dropbox, dan Oracle. Bahkan Microsoft sudah menggunakannya, dengan kode Rust di beberapa alat Azure IoT Edge-nya.

Menyiapkan lingkungan pengembangan Windows Rust

Tempat yang jelas untuk memulai pengembangan Rust adalah Visual Studio Code. Di pasar Ekstensi, Anda dapat menemukan beberapa ekstensi yang menginstal Server Bahasa Rust dan yang datang dengan dukungan bahasa penuh serta alat untuk membangun aplikasi Rust Anda dari Visual Studio Code. Saya telah menggunakan ekstensi resmi Rust dari tim bahasa Rust. Alat lain memberikan dukungan untuk cuplikan kode untuk memulai pengembangan, serta alat debugging dan pengujian tambahan. Bahkan ada alat untuk membuat dokumentasi untuk kode Anda. Sebaiknya instal paket ekstensi Rust sebagai bagian dari lingkungan Visual Studio Code Ruse Anda, karena ini menambahkan perkakas tambahan untuk bekerja dengan alat pengembangan Rust sendiri.

Pertama-tama Anda perlu menginstal compiler Rust dan pengelola paket Cargo. Situs pemasangan Rust resmi akan mendeteksi versi Windows yang Anda gunakan dan menyediakan unduhan yang sesuai. Bahkan ada instruksi untuk menginstal Rust di Windows Subsystem for Linux (WSL), jika Anda menggunakan WSL sebagai bagian dari rantai alat pengembangan Unix. Menjalankan penginstal Rustup mengunduh komponen bahasa dan mengatur PATH Windows . Anda memang mendapatkan opsi untuk menyesuaikan penginstalan, tetapi dalam praktiknya yang terbaik adalah menerima default.

Memahami Rust dan keamanan memori

Jika Anda memprogram C atau C ++, transisi ke Rust relatif mudah. Ada banyak kemiripan antarbahasa, meskipun konsep kepemilikan Rustlah yang membuatnya aman dari memori. Kepemilikan memungkinkan Rust mengelola ruang lingkup variabel, memungkinkannya hanya valid saat berada dalam cakupan. Jika tidak digunakan, mereka tidak ada dalam memori. Beberapa variabel adalah literal, nilai yang tidak dapat diubah yang di-hardcode ke dalam kode Anda. Tetapi tipe variabel yang lebih kompleks dapat meminta memori saat disetel, sebuah proses yang dalam banyak bahasa lain mengharuskan Anda mengalokasikan memori secara eksplisit dan kemudian membebaskannya saat variabel atau objek tidak lagi diperlukan. Rust mengotomatiskan ini, menangani penggunaan memori sebagai bagian dari manajemen cakupannya.

Tim Mozilla yang menciptakan Rust telah memikirkan secara mendalam tentang keamanan memori dan kompromi yang dapat terjadi di lingkungan yang aman. Hasilnya adalah bahasa yang aman dan cepat, dengan alat yang mengelola tumpukan memori dan heaps. Menetapkan nilai ke suatu fungsi mengubah kepemilikannya, memindahkannya dari satu cakupan ke cakupan lainnya; proses serupa mengelola nilai yang dikembalikan dari panggilan fungsi.

Kepemilikan adalah konsep yang kompleks, tetapi ini penting. Ini melindungi memori dan memungkinkan hanya fungsi yang memiliki nilai yang mengubahnya, bahkan saat Anda menggunakan referensi ke variabel. Karena Rust memperlakukan referensi sebagai meminjam variabel, mencoba memodifikasinya hanya akan menghasilkan kesalahan, kecuali jika Anda menyatakannya bisa berubah.

Masa depan Rust di Windows

Penting untuk diingat bahwa Rust masih merupakan bahasa yang masih muda, dan banyak hal yang Anda anggap remeh dalam pengembangan Windows tidak ada. Tidak ada integrasi langsung dengan Win32 atau SDK Windows inti lainnya, dan Anda tidak akan menemukan dukungan apa pun untuk alat GUI Windows tanpa memasang pustaka tambahan. Namun, itu bukan masalah seperti yang mungkin Anda pikirkan: Rust, seperti Go, adalah bahasa pemrograman sistem. Ini adalah alat tingkat rendah, cepat dan aman. Itu membuatnya ideal untuk membuat kode yang memanipulasi data Anda, mengolah angka, dan memproses array. Alih-alih menggunakan rutinitas C ++ saat Anda bekerja dengan memori dalam jumlah besar, gunakan Rust sebagai gantinya, mengurangi risiko yang terkait dengan kerusakan memori.

Jika Anda ingin mengembangkan aplikasi GUI di Rust, Anda memiliki opsi untuk menggunakan salah satu dari beberapa pustaka UI. Mungkin yang paling mudah digunakan adalah Kiss-ui, yang mendukung pengembangan GUI Windows dan Linux, dengan akses API Win32 serta dukungan untuk GTK lintas platform. Pustaka lain menambahkan dukungan API Win32 yang lebih dalam.

Meskipun Microsoft tidak mendukung Rust secara langsung, ada banyak dukungan komunitas. Sementara merakit rantai alat lengkap mungkin masih menjadi masalah memilih berbagai elemen yang Anda butuhkan dan menggunakan alat seperti Rustup untuk menginstalnya, kedatangan ekstensi Visual Studio Code dan paket ekstensi tampaknya diatur untuk menyederhanakan proses. Pembaruan rutin menunjukkan bahwa ini adalah proyek langsung, dengan tim Rust dan sejumlah kontributor pihak ketiga sedang mengerjakannya.

Prinsip yang mendasari penggunaan bahasa yang aman untuk memori adalah yang penting, dan tentunya bagus untuk melihat orang-orang di MSRC mengatasi masalah tersebut. Sampai ada rilis resmi dari bahasa pemrograman sistem tingkat rendah yang aman untuk memori, ada baiknya memberi Rust sekali lagi. Jika Microsoft memang memilihnya, Anda akan menjadi yang terdepan dalam permainan.

Di luar Windows, Rust adalah bahasa utama untuk pengembangan WebAssembly dan akan membantu memberikan aplikasi web yang jauh lebih kuat dalam rilis Edge yang diberdayakan oleh Chromium — alasan lain untuk melihatnya dengan cermat.