Rust-da Linux yadrosi uchun xavfsiz drayverlarni yozish uchun ramka

Intelda ishlaydigan va Crates.io ning rivojlanishini nazorat qiluvchi qo'mita a'zosi Josh Triplett Ochiq manba texnologiyalari sammitida nutq so'zladi. tanishtirdi tizimli dasturlash sohasida Rust tilini C tili bilan tenglashtirishga qaratilgan ishchi guruh.

Yaratilayotgan ishchi guruhda Rust ishlab chiquvchilari Intel muhandislari bilan birgalikda tizim dasturlash uchun Rust-da amalga oshirilishi kerak bo'lgan funksiyalarni belgilovchi spetsifikatsiyalarni tayyorlaydilar. Tizimni dasturlash ko'pincha imtiyozli protsessor ko'rsatmalarini bajarish va protsessor holati haqida batafsil ma'lumot olish kabi past darajadagi manipulyatsiyani talab qiladi. Rust uchun allaqachon ishlab chiqilgan shunga o'xshash xususiyatlardan nomsiz tuzilmalar, birlashmalar, assembly tili qo'shimchalari ("asm!" Makros) va BFLOAT16 suzuvchi nuqtali raqamlar formatini qo'llab-quvvatlash qayd etilgan.

Joshning fikricha, tizimli dasturlashning kelajagi Rustga tegishli va zamonaviy haqiqatda C tili o'tgan yillarda Assambleya egallab turgan o'rinni egallab turibdi. Zang
Ishlab chiquvchilarni nafaqat xotira bilan past darajadagi ishlash tufayli yuzaga keladigan Si tiliga xos bo'lgan muammolardan xalos qiladi, balki undan zamonaviy dasturlash paradigmalarini ishlab chiqishda foydalanish imkoniyatini ham beradi.

Davomida munozaralar spektakllar
Josh Linux yadrosida drayverlarni Rust tilida ishlab chiqish qobiliyatini qo'shish g'oyasi bilan chiqdi, bu esa bo'shatilgandan so'ng xotiraga kirish kabi muammolardan xoli xavfsizroq va yaxshiroq drayverlarni minimal kuch bilan yaratishga imkon beradi, null ko'rsatgichni yo'qotish va buferni ortiqcha yuklash.

Linux yadrosining barqaror filialini saqlash uchun mas'ul Greg Kroah-Hartman, yadroga Rust tilida drayverlarni ishlab chiqish uchun ramka qo'shishga tayyorligini bildirdi, agar u C ga nisbatan haqiqiy afzalliklarga ega bo'lsa, masalan, u xavfsizlikni ta'minlaydi. yadro API orqali ulanishlar. Bundan tashqari, Greg bu ramkani faqat variant sifatida ko'rib chiqadi, sukut bo'yicha faol emas, shuning uchun Rustni yadroga qurilishga bog'liqlik sifatida kiritmaslik uchun.

Ma'lum bo'lishicha, bu yo'nalishda allaqachon bir nechta jamoalar ish olib bormoqda. Masalan, "Fish in a barrel" kompaniyasining ishlab chiquvchilari tayyorlangan xavfsizlikni oshirish uchun interfeyslar va yadro tuzilmalari ustidagi mavhum qatlamlar to'plamidan foydalangan holda Rust tilida Linux yadrosi uchun yuklanadigan modullarni yozish uchun asboblar to'plami. Yordamchi dastur yordamida mavjud yadro sarlavhalari fayllari asosida qatlamlar avtomatik ravishda yaratiladi bog'lovchi. Clang qatlamlarni qurish uchun ishlatiladi. Interlayerlardan tashqari, yig'ilgan modullar staticlib to'plamidan foydalanadi.

Parallel rivojlanmoqda Yana bir loyiha oʻrnatilgan tizimlar va IoT qurilmalari uchun drayverlarni ishlab chiqishga qaratilgan boʻlib, u ham yadro sarlavhalari fayllari asosida qatlamlarni yaratish uchun bindgendan foydalanadi. Ramka yadroga o'zgartirish kiritmasdan drayver xavfsizligini yaxshilash imkonini beradi - yadroda drayverlar uchun qo'shimcha izolyatsiya darajalarini yaratish o'rniga, xavfsizroq Rust tilidan foydalangan holda kompilyatsiya bosqichida muammolarni bloklash taklif etiladi. Bunday yondashuv tegishli audit o'tkazmasdan shoshilinch ravishda xususiy haydovchilarni ishlab chiquvchi uskunalar ishlab chiqaruvchilari tomonidan talab qilinishi mumkin deb taxmin qilinadi.

Hali barcha mo'ljallangan funksiyalar amalga oshirilmagan, lekin ramka allaqachon ishlash uchun juda mos keladi va u Raspberry Pi 9512 platasi bilan ta'minlangan LAN3 USB Ethernet kontrolleri uchun ishchi drayverni yozish uchun ishlatilgan.Mavjud smsc95xx drayveri, tomonidan yozilgan C tili. Ta'kidlanishicha, Rust-da drayverni ishlab chiqishda modulning o'lchami va ish vaqti komponentlarining qo'shimcha xarajatlari ahamiyatsiz, bu esa cheklangan resurslarga ega qurilmalar uchun ramkadan foydalanishga imkon beradi.

Manba: opennet.ru

a Izoh qo'shish