Rust'ta Linux çekirdeği için güvenli sürücüler yazmaya yönelik çerçeve

Intel'de çalışan ve Crates.io'nun gelişimini denetleyen komitede yer alan Josh Triplett, Açık Kaynak Teknoloji Zirvesi'nde konuşuyor gönderilen sistem programlama alanında Rust dilini C dili ile eşit hale getirmeyi amaçlayan bir çalışma grubu.

Oluşturulma aşamasında olan bir çalışma grubunda Rust geliştiricileri, Intel mühendisleriyle birlikte, sistem programlama için Rust'ta uygulanması gereken işlevleri tanımlayan spesifikasyonları hazırlayacak. Sistem programlama genellikle ayrıcalıklı işlemci talimatlarının yürütülmesi ve işlemcinin durumu hakkında ayrıntılı bilgi elde edilmesi gibi düşük düzeyde manipülasyon gerektirir. Rust için hâlihazırda geliştirilmekte olan benzer özelliklerden, isimsiz yapılara, birleşimlere, montaj dili eklentilerine ("asm!" makrosu) ve BFLOAT16 kayan noktalı sayı formatına yönelik destek dikkat çekmektedir.

Josh, sistem programlamanın geleceğinin Rust'a ait olduğuna ve modern gerçekliklerdeki C dilinin, geçmiş yıllarda Assembly'nin işgal ettiği yeri talep ettiğine inanıyor. Pas
geliştiricileri yalnızca bellekle düşük seviyeli çalışma nedeniyle ortaya çıkan C dilinin doğasında olan sorunlardan kurtarmakla kalmaz, aynı zamanda onu modern programlama paradigmalarının geliştirilmesinde kullanma fırsatı da sağlar.

Sırasında tartışma Kütüphaneler
Josh, Rust dilinde Linux çekirdeğine sürücü geliştirme yeteneği ekleme fikrini ortaya attı; bu, minimum çabayla, serbest bırakıldıktan sonra belleğe erişim gibi sorunlardan arınmış, daha güvenli ve daha iyi sürücüler oluşturmayı mümkün kılacak, null işaretçi referansları ve arabellek taşmaları.

Linux çekirdeğinin istikrarlı dalını korumaktan sorumlu olan Greg Kroah-Hartman, C'ye göre gerçek avantajları varsa, örneğin güvenli bir ortam sağlayacaksa, Rust dilinde sürücüler geliştirmek için çekirdeğe bir çerçeve eklemeye hazır olduğunu ifade etti. Çekirdek API'si üzerinden bağlamalar. Ayrıca Greg, Rust'u çekirdeğe bir yapı bağımlılığı olarak dahil etmemek için bu çerçeveyi yalnızca bir seçenek olarak görüyor, varsayılan olarak aktif değil.

Birkaç ekibin halihazırda bu yönde çalıştığı ortaya çıktı. Örneğin, "Fıçıda Balık" şirketinden geliştiriciler подготовили Güvenliği artırmak için arayüzler ve çekirdek yapıları üzerinde bir dizi soyut katman kullanarak, Rust dilinde Linux çekirdeği için yüklenebilir modüller yazmaya yönelik bir araç seti. Katmanlar, yardımcı program kullanılarak mevcut çekirdek başlık dosyalarına göre otomatik olarak oluşturulur. bağlama. Clang katmanları oluşturmak için kullanılır. Ara katmanlara ek olarak, birleştirilen modüller staticlib paketini kullanır.

Paralel gelişiyor Başka bir proje, çekirdek başlık dosyalarına dayalı katmanlar oluşturmak için bağlamayı da kullanan, gömülü sistemler ve IoT cihazları için sürücüler geliştirmeye odaklandı. Çerçeve, çekirdekte değişiklik yapmadan sürücü güvenliğini artırmanıza olanak tanır - çekirdekteki sürücüler için ek izolasyon seviyeleri oluşturmak yerine, daha güvenli Rust dilini kullanarak derleme aşamasında sorunların engellenmesi önerilir. Böyle bir yaklaşımın, uygun bir denetim yapmadan aceleyle özel sürücüler geliştiren ekipman üreticileri tarafından talep edilebileceği varsayılmaktadır.

Amaçlanan işlevlerin tümü henüz uygulanmadı, ancak çerçeve zaten iş için oldukça uygun ve Raspberry Pi 9512 kartında sağlanan LAN3 USB Ethernet denetleyicisi için çalışan bir sürücü yazmak için kullanıldı. Mevcut smsc95xx sürücüsü tarafından yazılmıştır. C dili. Rust'ta bir sürücü geliştirirken modül boyutunun ve çalışma zamanı bileşenlerinden kaynaklanan yükün önemsiz olduğu ve bunun da çerçevenin sınırlı kaynaklara sahip cihazlar için kullanılmasına olanak sağladığı belirtiliyor.

Kaynak: opennet.ru

Yorum ekle