Kernel Land’de İşler Paslanıyor


Rust’ı Linux çekirdeğine ekleme fikri etrafında bir ivme kazanıyor. Bu tam olarak neden önemli ve bu geri kalanımız için ne anlama geliyor? Linux çekirdeği, tüm ömrü boyunca sadece C ve derleme olmuştur. Çekirdek gibi büyük bir proje, dillerinin çalışmasını sağlamak için çok sayıda ortak araç içerir, bu nedenle bir tane daha eklemek oldukça zahmetlidir. Dil seçimi etrafında geliştirilen proje kültürü de var. Öyleyse neden çekirdek geliştirmenin gri sakalları, Rust ekleme fikrini bile eğlendiriyor? Tek satırda cevap vermek gerekirse, bunun nedeni C’nin 1971’de Bell Laboratuarlarındaki mini bilgisayarlarda çalışacak şekilde tasarlanmış olmasıdır. Kendi ayağınıza ateş etmek isterseniz, C size dolu silahı verecektir.

Öte yandan, bir çekirdek yazmak istiyorsanız, C, düşük seviyeli kodlama yapmak için harika bir dildir. Doğrudan bellek erişimi? Evet. Sıralı montaj? Emin. Çöp toplama veya sanal makineler olmadan doğrudan metal üzerinde mi çalışıyor? Kesinlikle. Ancak C’yi çekirdek programlama için harika yapan her şey, C’yi çekirdek programlama için de tehlikeli hale getirir.

Şimdi toplu klavyelerinizin şaşkınlıkla tıkırtılarını duyuyorum: “Güvenli C kodu yazmak mümkün!” Evet, evet mümkün. Karıştırmak çok kolaydır ve bir çekirdeği karıştırdığınızda güvenlik açıklarınız olur. Objektif olan bazı şeyler de var korkunç C hakkında, tanımsız davranış gibi. C derleyicileri, aşağıdaki gibi lanetli kodlarla doğru olanı yapmak için ellerinden geleni yaparlar. i++ + i++; veya a[i] = i++;. Ama bu neredeyse kesinlikle istediğinizi yapmayacak ve daha da kötüsü, bazen Doğru şeyi yapmak.

Rust popülerlik kazanıyor gibi görünüyor. gibi bazı iddialı projeler var. Rust’ta coreutils’i yeniden yazma. Diğer birçok standart uygulama, bir Rust yeniden yazma işlemi alıyor. Rust geliştiricilerinin koleksiyonunun sormaya başlaması oldukça kaçınılmaz, bir sonraki çekirdeği istila edebilir miyiz? Bu, bir Linux Tesisatçılar Konferansı için sunuldu ve posta listesi yanıtı ihtiyatlı iyimserdi. Rust, bir şeyleri kırmadan ve Rust’ı kullanışlı kılan şeyleri kaybetmeden eklenebilseydi, evet ilginç olurdu.

neden pas

Peki Rust’ı bu kadar ilginç yapan nedir? Burada iki ana cevap var. İlk olarak, güçlü bir bellek güvenliği garantisine sahip modern bir dildir. (Burada bir uyarı var ve güvenli olmayan kodu daha sonra ele alacağız.) Tüm güvenlik açıklarının yaklaşık üçte ikisi bellek işleme hatalarının bir sonucudur ve Rust bunları hemen hemen ortadan kaldırır. İkinci bir bonus olan Rust, modern dillerde takdir etmeye başladığımız, kullanımı kolay STRING standart kitaplığa yerleşik olarak yazın ve dize karşılaştırma gibi yaygın senaryolar için bazı kullanışlı işlevler.

Diğer cevap, Rust’ın C kodu ve çekirdek programlama ile kolay uyum sağlamasıdır. Rust, derleyicide sihrini yapar. Yazdığınız kod, yardımcı olmaya çalışan bir yorumlayıcı veya çöp toplama olmadan gerçekte çalışan şeydir. Rust, Nesne Yönelimli desenlerde aşırı doz almamıştır, ancak çekirdekte zaten kullanılan C tarzı yapılarla güzel bir şekilde uyum sağlar. Yığın modeli bile C’ye çok benzer.

Rust’ın bellek güvenliği garantisiyle ilgili bir sorun var – resmi olarak bellek açısından güvenli bir çekirdek yazmak imkansız. Bir çekirdeğin, bilgisayarlarımızı gerçekten çalıştırmak için ayrılmamış belleğe yazması, garip işaretçi matematik işlemleri yapması ve görünüşte tuhaf görünen diğer şeyleri yapması gerekir. Bu, bellek manipülasyonlarının güvenli olduğunu garanti etmeye çalışan bir dille iyi çalışmaz. Öyleyse, Rust ile çekirdek kodunu nasıl yazıyorsunuz? Rust ekledi unsafe anahtar kelime, doğrudan bellek erişiminin ve Rusts’ın bellek garantileriyle çalışmayan diğer tekniklerin kullanımına izin verir. Olası sorunları bir arada tutar ve denetimi kolaylaştırır.

Bunlardan bazılarını yapmaya çalışan C’ye yönelik artımlı bir güncelleme olarak akla gelebilecek en az bir dil daha var: C++. Elbette bu daha da uygun olurdu, değil mi? Çekirdek geliştiricileri bu fikir hakkında bazı güçlü hisler. Hafifçe söylemek gerekirse, C++’daki iyileştirmelerin hiçbiri çekirdek bağlamında faydalı değildir ve diğer bazı değişiklikler de araya girmektedir.

Plan nedir?

Rust’ta çekirdeğin tamamen yeniden yazıldığını görmek üzere miyiz? Muhtemel değil. Çekirdek geliştirme süreci özenli bir şekilde muhafazakardır, bu nedenle Rust’ın ilk tanıtımı mümkün olan en az rahatsız edici şekilde yapılacaktır – sürücü kodu. Çekirdek ikinci komutan olarak [Greg Kroah-Hartman] “Sürücüler, çekirdek kaynağındaki bağımlılıklar ağacının ‘son yaprakları’ olduklarından, muhtemelen böyle bir girişimin ilk yeridir. Çekirdek çekirdek işlevselliğine bağlıdırlar, ancak hiçbir şey onlara bağlı değildir.”

Pratikte bu, takımların, belgelerin ve örnek kodun hemen çekirdeğe birleştirileceği anlamına gelir. Gelecekte bir noktada, Google gibi ilgili taraflardan biri Rust’ta yeni sürücüler yazmaya başlayacaktı. Google, muhtemelen işletim sistemlerinin NSO grubunun beğenilerinden devam etmesini engellemek amacıyla Android’in parçalarını Rust’a dönüştürmekle çok ilgileniyor gibi görünüyor. Rust’ta faydalı bir örnek sürücü var Google Güvenlik Blogunda. Bir başka ilginç bağlantı da şudur: [Miguel Ojeda]Rust for Linux çabasının baş geliştiricisi, artık Prossimo tarafından tam zamanlı olarak çalışıyor bu amaçla. Prossimo, Let’s Encrypt’e öncülük etmesiyle de ünlü olan İnternet Güvenliği Araştırma Grubu’nun bir koludur. için finansman [Ojeda]’ çalışması Google tarafından sağlandı.

Peki şimdi neredeyiz? Rust yamalarının 6. sürümü az önce çekirdek posta listesine gönderildi. Birkaç küçük değişiklik isteği oldu, ancak en önemlisi geliştiriciler, birleştirme penceresi açıldığında yamaların 5.19 çekirdeğine çekilmesi için çağrıda bulunmaya başladılar. 5.18-rc6 daha yeni piyasaya sürüldü, bu nedenle iki ila üç hafta içinde kernel mint’in son sürüm olduğunu ve 5.19 birleştirme penceresinin açıldığını görmeliyiz. Bu doğru, Rust’ın yaklaşık üç hafta içinde Linux çekirdeğine eklendiğini görme şansımız çok yüksek!

Sonunda indiğinde, aşağıdaki sürümdeki desteği gerçekten kullanan basit bir sürücü görmeyi bekleyin. Yani 5.19, Rust desteğini görürse, muhtemelen 5.20’de pasla yazılmış bir sürücü olacaktır. Yukarıda ima edildiği gibi, Google en çok ilgilenen taraflardan biri Linux için Rust çabasında. Google’ın mobil ekosistemlerinin güvenliğini iyileştirmeye yönelik sürekli çabasının bir parçası olarak, Android ile ilgili bazı kodların Rust’a taşınması muhtemeldir.

Ne Muhtemelen Yanlış Gidebilir?

Linux’ta Rust neredeyse kesinlikle olacak, ama bunun iyi bir şey olduğu garanti mi? Göz önünde bulundurulması gereken birkaç olası olumsuzluk vardır. Öncelikle, C ve Rust arasındaki arayüz, beklenmeyen hataların ortaya çıkması için muhtemel bir yerdir. Bu yeni kod, bazıları otomatik olarak oluşturulmuş, yeni bir şey yapıyor – kesinlikle sürprizler olacak. Bu, diğer yeni kodlardan daha fazla sorun değil. Hatalar giderilir, sorunlar giderilir.

Daha fazla sorun olabilecek şey, dikkate alınması gereken başka bir dil olduğunda hata ayıklama sorunlarının ek karmaşıklığıdır. Şimdiye kadar, çekirdek, hepsinin C’de olması ve üzerinde çalışan tüm programcıların bu dile aşina olması avantajından yararlandı. İkinci bir dil ekleyin ve şimdi C programcıları, Rust programcıları ve her ikisinde de gerçekten yetkin olan birkaç kişi var. Hatalara yol açabilecek başka bir derleyici ve yönetilmesi gereken başka bir araç zinciri var.

Son olarak, yakalanmama tehlikesi var. Çekirdek topluluğu topluca omuz silkiyor ve C’de kod yazmaya devam ediyor olabilir ve Rust bit çürümelerini destekliyor olabilir. Bu en az sorunlu sorun çünkü Google gibi büyük oyuncuların desteği bunu olası kılıyor ve Rust asmada ölse bile kodu kaldırmak kolay.

Yukarıdaki sorunlardan herhangi birinin anlaşmayı bozması muhtemel mi? Muhtemelen değil. Rust’ın eklenmesi, çekirdek geliştirmenin gerçekleşme şeklini biraz değiştirecek ve çekirdek koruyucuların Rust bilgilerini tazelemeleri gerekecek. Potansiyel faydalar, dezavantajlardan daha ağır basıyor gibi görünüyor. Torvalds, son birkaç kırışık giderildiğinde, çekirdekte Pas fikrini kabul etmiş görünüyor. Rust’ın Linux’ta olgunlaşmasını görmek için sabırsızlanıyoruz ve bu gerçekleştiğinde size hikayenin geri kalanını getireceğiz.


Kaynak : https://hackaday.com/2022/05/17/things-are-getting-rusty-in-kernel-land/

Yorum yapın

SMM Panel