Linux yadrosiga Rust ishlab chiqish vositalarini qo'shish masalasini muhokama qilish bo'yicha taklif

Nik Desagnier (Nik Desaulniers), ta'minlash uchun Google'da ishlaydigan qo'llab-quvvatlash Clang kompilyatoridan foydalanib Linux yadrosini yaratish va shuningdek yordam berish Rust kompilyatoridagi xatolarni tuzatish, taklif qildi konferentsiyada o'tkazing Linux Plumbers Konferentsiyasi 2020 Rust-da yadro komponentlarini ishlab chiqish imkoniyatini muhokama qilish uchun sessiya. Nik LLVM-ga bag'ishlangan mikro-konferentsiya tashkil qilmoqda va Rust qo'llab-quvvatlashining yadroga mumkin bo'lgan integratsiyalashuvining texnik jihatlarini muhokama qilish yaxshi bo'lardi (u allaqachon KBuild uchun ishlaydigan prototipni tayyorlagan) va bunday yordam kerak yoki yo'qligini tushunish yaxshi bo'lar edi, deb hisoblaydi. umuman qo'shilishi va Rustdan foydalanish bo'yicha qanday cheklovlarni qabul qilish kerak.

Eslatib o'tamiz, yaqinda Open Source Summit va Embedded Linux konferentsiyasidagi muhokamada Linus Torvalds istisno qilmadi Rust kabi tillarda yadro bo'lmagan quyi tizimlarni (masalan, drayverlarni) rivojlantirish uchun bog'lanishlarning paydo bo'lishi. Rust-da drayverlarni ishlab chiqish qobiliyati bizga bo'shatilgandan so'ng xotiraga kirish, null ko'rsatgichni o'zgartirish va buferni haddan tashqari oshirib yuborish kabi muammolardan xoli, minimal kuch sarflagan holda xavfsizroq va yaxshiroq drayverlarni yaratishga imkon beradi. Ushbu xususiyatni amalga oshirish uchun allaqachon bir nechta uchinchi tomon loyihalari mavjud:

  • "Bochkadagi baliq" kompaniyasining ishlab chiqaruvchilari 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.
  • Gonkongdagi Xitoy universiteti tadqiqotchilari rivojlantirmoq Rust-da o'rnatilgan tizimlar va Internet of Things qurilmalari uchun drayverlarni ishlab chiqish loyihasi, shuningdek, yadro sarlavhalari fayllari asosida qatlamlarni yaratish uchun bindgen-dan 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.
  • Framework ishlab chiquvchilari C2 Rust Rust-ga C kodini uzatish uchun, sarflamoq yadro modullarini minimal qo'lda tahrirlash bilan aylantirish bo'yicha tajribalar. Qayd etilgan muammolardan biri C2Rust-da hali qo'llab-quvvatlanmaydigan GCC kengaytmalaridan foydalanadigan kod yadrosining ko'p qismlarida foydalanishdir. Ushbu muammoni hal qilish uchun C2Rust GCC atributlarini inline, sovuq, taxallus, ishlatilgan va bo'lim uchun qo'llab-quvvatlashni qo'shishni, shuningdek, inline assemblerning imkoniyatlarini kengaytirishni va tekislangan va qadoqlangan tuzilmalar bilan bog'liq muammolarni hal qilishni rejalashtirmoqda (masalan, xregs_state) . Qo'lda ishlashni talab qiladigan muhim muammolar qatoriga arzimas C makroslarini Rust makroslariga tarjima qilishning iloji yo'qligi va turlarni qayta belgilash zarurati kiradi, chunki C2Rust C turlarini libc paketidagi ta'riflarga aylantiradi, ammo bu paketni yadro modullarida ishlatib bo'lmaydi.

Manba: opennet.ru

a Izoh qo'shish