Google, C ve C++'a kıyasla bir bütün olarak işletim sisteminin güvenliğini artırmak için Android'in bazı kısımlarını Rust'ta yazıyor ve yeniden yazıyor. Daha fazlasını öğrenmek için okumaya devam edin!
Eksiksiz bir işletim sistemi çözümü olarak Android, birçok hareketli parça içerir. Çok genel anlamda konuşursak, bu parçalar uygulama ekosistemi ve ardından işletim sisteminin kendisidir. Bir geliştirici olarak tercih ettiğiniz programlama dili, Android'in hangi bölümü üzerinde çalıştığınıza bağlı olarak değişir. Uygulama geliştiricileri için Java ve Kotlin popüler seçeneklerdir. İşletim sistemi ve onun alt seviyeleri üzerinde çalışan geliştiriciler için C ve C++ şu ana kadar popüler seçimler oldu. Bugün Google, işletim sistemi geliştiricileri için üçüncü bir seçenek ekliyor; Android Açık Kaynak Projesi artık işletim sisteminin kendisini geliştirmek için Rust programlama dilini destekliyor.
C ve C++'ın Sınırlamaları
Android işletim sisteminin daha düşük seviyeleri, C ve C++ gibi sistem programlama dillerini gerektirir. Bu diller, geliştiricilere, düşük seviyeli sistem kaynaklarına ve donanımına erişirken önemli olan kontrol ve öngörülebilirlik sağlar.
Ne yazık ki, C ve C++ bellek güvenliği garantileri sağlayamıyor, bu da onları hatalara ve güvenlik açıklarına açık hale getiriyor. Bu dillerde bellek ömrünün yönetilmesinden geliştirici sorumludur, ancak karmaşık ve çok iş parçacıklı kod tabanlarında bunu söylemek yapmaktan daha kolaydır.
C ve C++ birlikte Android platformunda on milyonlarca satır kod oluşturur. Bu bellek güvenliği hataları, kod yanlışlığının giderilmesi en zor kaynağı haline geliyor ve Android'in yüksek önem derecesine sahip güvenlik açıklarının ~%70'ini temsil ediyor. Yalnızca bu hataları düzeltmek, sorunla başa çıkmak için yeterli olmuyor ve ilk etapta bunları önlemek daha iyi bir yaklaşım olacaktır.
Bellek güvenliği garantisinin olmayışı, geliştiricileri Android işlemlerini sıkı bir şekilde kısıtlanmış ve ayrıcalığı olmayan sanal alanlarda çalıştırmaya zorlar. Ancak korumalı alanlar kaynak açısından pahalıdır, ek yük tüketir ve gecikmeye neden olur. Korumalı alan oluşturma ayrıca kodun güvenlik açıklarını tamamen ortadan kaldırmaz ve yüksek hata yoğunluğu nedeniyle etkinliği azalır, ayrıca saldırganların birden fazla güvenlik açığını zincirlemesine olanak tanır.
C ve C++'ya özgü olmasa da tüm bellek güvenliği sorunlarına uygulanabilen başka bir sınırlama, hatalı durumun tespit edilebilmesi için aletli kodda gerçekten tetiklenmesi gerektiğidir. Yani kodunuz mükemmel bir teste sahip olsa bile asıl hata tespit edilmeden kalabilir. Hatalar bulunduğunda bunları düzeltmek, her zaman doğru bir düzeltmeye yol açmayabilecek uzun ve maliyetli bir süreci içeren başka bir görevdir. Bu nedenle, hata tespiti güvenilmez hale gelir ve bu sınırlamalar ışığında hata önleme daha iyi bir yaklaşım olur.
Rust gibi hafıza açısından güvenli bir dile geçişin devreye girdiği yer burasıdır.
Pas ve faydaları
Rust, nesne ömrünü/sahipliğini zorlamak için derleme zamanı kontrollerinin ve bellek erişimlerinin geçerli olduğundan emin olmak için çalışma zamanı kontrollerinin bir kombinasyonunu kullanarak bellek güvenliği garantileri sağlar. Bu güvenlik, C ve C++'a eşdeğer performans sağlanırken elde edilir. Rust aynı zamanda korumalı alana alma ihtiyacını da azaltarak geliştiricilerin daha güvenli ve kaynakları daha az kullanan yeni özellikler sunabilmeleri için daha fazla alan sağlar.
Rust'un gerçekten de faydaları olsa da, Android işletim sisteminin tamamını bir gecede Rust'a geçirmek mümkün değil. Ve Android'deki bellek hatalarının çoğu yeni veya yakın zamanda değiştirilmiş kodlarda meydana geldiğinden ve bunların yaklaşık %50'si bir yıldan daha eski olduğundan buna gerek bile olmayabilir. Google, hafızayı koruyan dil çabalarının, olgun C ve C++ kodlarını yeniden yazmak yerine yeni gelişmelere odaklandığına inanıyor.
Rust aynı zamanda hataların tespitine yoğunlaşmak yerine hataların önlenmesine odaklanıyor ve bu da kodun doğruluğunun artmasını sağlıyor. Bellek güvenliği, veri eşzamanlılığı, daha anlamlı tipte sistemler, değişmezlik gibi birçok temel özelliğe sahiptir. varsayılan olarak referanslar ve değişkenler, daha güvenli tamsayı işleme, standart kitaplıklarda daha iyi hata işleme ve çok daha fazlası Daha.
Rust'a geçiş Android için ne anlama geliyor?
Google, son 18 aydır Android Açık Kaynak Projesine Rust desteğini eklediğini söylüyor. Ancak Android platformuna yeni bir dil eklemek çok büyük bir girişim. Bazı araç zincirlerinin ve bağımlılıklarının korunması, test altyapısının ve araçlarının güncellenmesi ve geliştiricilerin eğitilmesi gerekir.
Google'ın önümüzdeki aylarda paylaşacağı birkaç erken benimseyen projesi var. Ancak yine de Rust desteğini işletim sisteminin daha fazla kısmına ölçeklendirmenin çok yıllı bir proje olduğu açıkça belirtiliyor.
Görebildiğimiz kadarıyla Google halihazırda birkaç yerde Rust'u kullanıyor. Android'in yeni Bluetooth yığını yeniden yazma kod adı "Gabeldorsche" Rust'ta yazılıyor. Gabeldorsche üzerinde çalışmalar Android 11 civarında başladı ancak henüz kullanımda değil. Android'ler Anahtar deposu 2.0 modülü Rust'ta yazılmıştır ve Android'in IPC sürücüsü olan binder'ın kullanıcı alanı kısmı da öyle. Android ile ilgili olmasa da, Fuşyayeni ağ yığını aynı zamanda Rust'ta da yazılıyor.
Uygulama geliştiricileri için bu geçiş, bir uygulama geliştiricisi olarak uygulamaları nasıl yazdığınız veya çerçeve API'lerinin nasıl çalıştığı hakkında hiçbir şeyi değiştirmez. Bu anahtar yalnızca işletim sisteminin nasıl yazıldığını etkiler. Android Geliştirici İlişkileri ekibinin bir üyesine göreGoogle ayrıca şu anda bir Rust NDK yayınlamayı da planlamıyor. Uygulama geliştirme için desteklenen diller Kotlin, Java, C ve C++ olmaya devam edecektir.