Rust tilini qo'llab-quvvatlaydigan Linux yadrosi uchun yamoqlarning beshinchi nashri

Rust-for-Linux loyihasi muallifi Migel Ojeda Linux yadrosini ishlab chiquvchilari ko‘rib chiqish uchun Rust tilida qurilma drayverlarini ishlab chiqish uchun komponentlarning beshinchi versiyasini taklif qildi. Rust qo'llab-quvvatlashi eksperimental hisoblanadi, lekin u allaqachon Linux-keyingi filialiga kiritilgan va yadro quyi tizimlari ustida abstraktsiya qatlamlarini yaratish, shuningdek, drayverlar va modullarni yozish bo'yicha ishlarni boshlash uchun etarlicha rivojlangan. Ishlanma Google va ISRG (Internet Security Research Group) tomonidan moliyalashtiriladi, u Let's Encrypt loyihasining asoschisi bo‘lib, HTTPS va Internet xavfsizligini yaxshilash bo‘yicha texnologiyalarni rivojlantirishga yordam beradi.

Eslatib o'tamiz, taklif etilayotgan o'zgarishlar Rust tilidan drayverlar va yadro modullarini ishlab chiqish uchun ikkinchi til sifatida foydalanish imkonini beradi. Zangni qo'llab-quvvatlash sukut bo'yicha yoqilmagan variant sifatida taqdim etiladi va Rust yadro uchun zarur bo'lgan qurilish bog'liqligi sifatida kiritilishiga olib kelmaydi. Drayvlarni ishlab chiqish uchun Rust-dan foydalanish sizga minimal kuch sarflagan holda xavfsizroq va yaxshiroq drayverlarni yaratishga imkon beradi, ular bo'shatilgandan so'ng xotiraga kirish, null ko'rsatkichni o'zgartirish va buferni ortiqcha yuklash kabi muammolardan xoli bo'ladi.

Rust kompilyatsiya vaqtida xotira xavfsizligini mos yozuvlarni tekshirish, ob'ektga egalik qilish va ob'ektning ishlash muddatini kuzatish (ko'lamlar) va ish vaqtida xotiraga kirishning to'g'riligini baholash orqali amalga oshiradi. Rust shuningdek, butun sonlarning to'lib ketishidan himoya qiladi, foydalanishdan oldin o'zgaruvchan qiymatlarni ishga tushirishni talab qiladi, standart kutubxonada xatolarni yaxshiroq boshqarishga ega, sukut bo'yicha o'zgarmas havolalar va o'zgaruvchilar tushunchasidan foydalanadi va mantiqiy xatolarni minimallashtirish uchun kuchli statik yozishni taklif qiladi.

Yamoqlarning yangi versiyasi yamoqlarning birinchi, ikkinchi, uchinchi va to'rtinchi nashrlarini muhokama qilish paytida qilingan izohlarni yo'q qilishda davom etmoqda. Yangi versiyada:

  • Intel tomonidan qo'llab-quvvatlanadigan 0DAY/LKP botga asoslangan uzluksiz integratsiya tizimiga Rust-ni qo'llab-quvvatlash uchun komponent testlari qo'shildi va sinov hisobotlarini nashr etish boshlandi. Biz Rust yordamini KernelCI avtomatlashtirilgan sinov tizimiga integratsiya qilishga tayyorlanmoqdamiz. GitHub CI asosidagi sinov konteynerlardan foydalanishga o'tkazildi.
  • Rust yadro modullari “#![no_std]” va “#![feature(…)]” sandiq atributlarini aniqlash zaruratidan ozod qilingan.
  • Yagona montaj maqsadlari (.o, .s, .ll va .i) uchun qoʻshimcha yordam.
  • Kod ko'rsatmalari sharhlarni ("//") va hujjatlashtirish kodini ("///") ajratish qoidalarini belgilaydi.
  • is_rust_module.sh skripti qayta ishlangan.
  • "CONFIG_CONSTRUCTORS" ilovasiga asoslangan statik (global umumiy o'zgaruvchi) sinxronizatsiya primitivlari uchun qo'shimcha yordam.
  • Qulfni boshqarish soddalashtirilgan: Guard va GuardMut birlashtirilgan va bitta parametrlangan tur.
  • Qurilmalarni ro'yxatdan o'tkazishda qo'shimcha parametrlarni aniqlash mumkin.
  • rw_semaphore C tuzilmasi ustidan oʻram vazifasini oʻtaydigan “RwSemaphore” abstraksiyasi qoʻshildi.
  • Mmapdan foydalanish uchun yangi mm moduli va VMA abstraksiyasi qo'shildi (vm_area_struct strukturasi ustidagi o'ram).
  • GPIO PL061 drayveri “dev_*!” makrosidan foydalanishga o‘tkazildi.
  • Kodni umumiy tozalash amalga oshirildi.

Manba: opennet.ru

a Izoh qo'shish