Rust ve Android: Bellek Güvenli Native Kod
Güncellendi: 18 Ağustos 2026 · Okuma: 7 dakika
Rust, C ve C++ ile aynı performansı sunarken bellek hatalarını derleme zamanında engelleyen bir sistem programlama dilidir. Android platformunda (AOSP) resmi olarak desteklenir ve güvenlik açıklarının önemli bir kısmını kaynağında ortadan kaldırdığı için sistem bileşenlerinde giderek yaygınlaşıyor.
İleri
Android (native katman) · AOSP
1. Rust nedir?
Rust, çöp toplayıcı (garbage collector) kullanmadan bellek güvenliği sağlayan bir sistem programlama dilidir. C ve C++ ile aynı hız sınıfında çalışır, ancak sahiplik (ownership) adı verilen bir modelle belleği derleme zamanında denetler.
Bu sayede C/C++'ta çalışma anında çökmeye veya güvenlik açığına yol açan use-after-free, buffer overflow ve veri yarışı (data race) gibi hata sınıfları, program daha derlenirken engellenir.
2. Android neden Rust'a yöneldi?
Google, Android platformundaki ciddi güvenlik açıklarının büyük bölümünün bellek güvenliği hatalarından kaynaklandığını uzun süredir raporluyor. Bu nedenle Android Açık Kaynak Projesi'nde (AOSP) Android 12'den itibaren Rust resmi olarak desteklenen bir sistem dili haline geldi.
Yaklaşım "her şeyi yeniden yaz" değil, yeni yazılan kodu Rust ile yazmak: mevcut C/C++ kodu yerinde kalırken yeni sistem bileşenleri Rust ile geliştiriliyor. Bu, açık sayısını zamanla ve kademeli olarak düşürüyor.
3. Ne işe yarar, nerede kullanılır?
Rust, sıradan uygulama geliştirme dili değildir — arayüz yazmak için Kotlin kullanılır. Rust'ın Android'deki yeri şurasıdır:
- Sistem bileşenleri (AOSP): Bluetooth yığını, DNS çözümleyici, sanallaştırma katmanı gibi platform parçaları.
- Şifreleme ve güvenlik: Kriptografi kütüphaneleri, anahtar yönetimi — bellek hatasının doğrudan güvenlik açığına dönüştüğü alanlar.
- Medya ve dosya ayrıştırma: Dışarıdan gelen veriyi işleyen kod (video kod çözücü, dosya parser) saldırı yüzeyinin en geniş olduğu yerdir; Rust burada büyük kazanç sağlar.
- Ağ protokolleri: Paket ayrıştırma ve protokol uygulamaları.
- Uygulama içi performans modülleri: NDK ve JNI üzerinden, C++ yerine Rust ile de native katman yazabilirsiniz.
4. Ownership: Rust'ın temel fikri
Rust'ta her değerin tek bir sahibi vardır; sahip kapsam dışına çıktığında bellek otomatik olarak serbest bırakılır. Manuel free() yoktur ama çöp toplayıcı da yoktur — bu yüzden hem güvenli hem öngörülebilir hızdadır.
fn main() {
let veri = String::from("merhaba");
yazdir(&veri); // ödünç veriyoruz (borrow)
println!("{}", veri); // hâlâ kullanılabilir
}
fn yazdir(s: &str) {
println!("{}", s);
}Eğer & olmadan gönderseydiniz sahiplik devredilir ve veri bir daha kullanılamazdı — derleyici bunu size hata olarak bildirirdi.
5. Kotlin ile nasıl konuşur?
Rust kodu, C++ ile aynı yolu izleyerek JNI üzerinden Kotlin tarafına bağlanır. Rust tarafında C uyumlu bir arayüz (extern "C") açar, Kotlin tarafında external fun ile çağırırsınız:
#[no_mangle]
pub extern "C" fn topla(a: i32, b: i32) -> i32 {
a + b
}jni crate'i, JNI tiplerini Rust tarafında rahat kullanmanızı sağlayan hazır bir katman sunar.
6. Sizin projenizde Rust'a ihtiyacınız var mı?
Normal bir uygulama geliştiriyorsanız — e-ticaret, sosyal medya, fitness — cevap büyük ihtimalle hayır. Kotlin zaten bellek güvenlidir ve çok daha hızlı geliştirilir.
Rust'ı şu durumlarda değerlendirin: platform/sistem seviyesinde kod yazıyorsanız, dışarıdan gelen güvenilmez veriyi ayrıştıran performans kritik bir modülünüz varsa, ya da mevcut C/C++ native katmanınızda tekrarlayan bellek hataları yaşıyorsanız.
Öğrenme eğrisi diktir: ownership ve borrow checker kavramlarına alışmak zaman ister. Ancak bu yatırım, uzun ömürlü ve güvenlik açısından kritik kod tabanlarında kendini fazlasıyla amorti eder.