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

Rust-for-Linux loyihasi muallifi Migel Ojeda Linux yadrosini ishlab chiquvchilari uchun Rust tilida qurilma drayverlarini ishlab chiqish uchun uchinchi komponent variantini taklif qildi. Rust qo'llab-quvvatlashi eksperimental hisoblanadi, ammo Linux-keyingi filialiga kiritish uchun allaqachon kelishilgan. Ishlanma Google va ISRG (Internet Security Research Group) tomonidan moliyalashtiriladi, u Let's Encrypt loyihasining asoschisi bo'lib, HTTPS va Internet xavfsizligini yaxshilash uchun 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 va ikkinchi versiyalarini muhokama qilish paytida bildirilgan sharhlarni yo'q qilishda davom etmoqda. Eng sezilarli o'zgarishlar:

  • Rust 1.57 ning barqaror versiyasidan mos yozuvlar kompilyatori sifatida foydalanishga o‘tildi va Rust 2021 tilining barqarorlashtirilgan nashriga havola berildi. Ilgari yamoqlar Rustning beta-bo‘limiga ulangan va ba’zi til xususiyatlaridan foydalanilgan. beqaror deb tasniflangan. Rust 2021 spetsifikatsiyasiga o‘tish bizga const_fn_transmute, const_panic, const_unavailable_unchecked va core_panic va try_reserve kabi beqaror xususiyatlardan foydalanmaslik bo‘yicha ishlarni boshlashimizga imkon berdi.
  • Yamoqlarga kiritilgan Rust kutubxonasining ajratilgan versiyasini ishlab chiqish davom etdi, bu xotirani taqsimlash funktsiyalaridan xalos bo'lish uchun o'zgartirildi, xatolar yuzaga kelganda, masalan, xotira yo'qolganida "vahima" holatini yaratish mumkin. Yangi versiya "no_rc" va "no_sync" opsiyalarini qo'llaydi, bu esa yadro Rust kodida ishlatilmaydigan funksiyalarni o'chirib, kutubxonani yanada modulli qiladi. Yadro uchun zarur bo'lgan o'zgarishlarni asosiy kutubxonaga o'tkazishga qaratilgan asosiy ajratuvchi ishlab chiquvchilar bilan ishlash davom etmoqda. Kutubxonaning yadro darajasida ishlashi uchun zarur bo'lgan "no_fp_fmt_parse" opsiyasi Rust bazasi kutubxonasiga (yadro) ko'chirildi.
  • Yadroni CONFIG_WERROR rejimida yaratishda mumkin bo'lgan kompilyator ogohlantirishlaridan xalos bo'lish uchun kod tozalandi. Rust-da kod yaratishda qo'shimcha kompilyator diagnostika rejimlari va Clippy linter ogohlantirishlari yoqiladi.
  • Abstraktsiyalar Rust kodida ketma-ket blokirovkalar (ketma-ketlik blokirovkalari), quvvatni boshqarish uchun qayta qo'ng'iroqlar, kiritish/chiqarish xotirasi (readX/writeX), uzilishlar va ish zarralarini qayta ishlovchilar, GPIO, qurilmalar, drayverlar va hisob ma'lumotlariga kirish uchun foydalanish uchun taklif etiladi.
  • Drayvlarni ishlab chiqish vositalariga ko'chirilishi mumkin bo'lgan mutekslar, bit iteratorlari, soddalashtirilgan ko'rsatgichlar ulanishlari, takomillashtirilgan nosozlik diagnostikasi va ma'lumotlar shinasidan mustaqil infratuzilma kiradi.
  • Murojaatlarni hisoblash uchun bir xil nomdagi yadro API dan foydalanadigan refcount_t backend asosida soddalashtirilgan Ref turidan foydalangan holda havolalar bilan ishlash yaxshilandi. Standart ajratish kutubxonasida taqdim etilgan Arc va Rc turlarini qo'llab-quvvatlash olib tashlandi va yadro darajasida bajarilgan kodda mavjud emas (kutubxonaning o'zi uchun bu turlarni o'chirib qo'yadigan variantlar tayyorlangan).
  • Yamalar Rust-da qayta yozilgan PL061 GPIO drayverining versiyasini o'z ichiga oladi. Drayvning o'ziga xos xususiyati shundaki, uni amalga oshirish deyarli satr bo'yicha C tilida mavjud GPIO drayverini takrorlaydi. Rust-da drayverlarni yaratish bilan tanishmoqchi bo'lgan ishlab chiquvchilar uchun Rust-da C kodi qaysi konstruktsiyalarga aylantirilganligini tushunish imkonini beruvchi satr bo'yicha taqqoslash tayyorlandi.
  • Rustning asosiy kod bazasi rustc_codegen_gcc ni qabul qildi, bu rustc_codegen_gcc libgccjit kutubxonasidan foydalangan holda oldindan (AOT) kompilyatsiyasini amalga oshiradigan GCC uchun rustc backend. Backendni to'g'ri ishlab chiqish bilan u GCC yordamida yadroda ishtirok etgan Rust kodini to'plash imkonini beradi.
  • ARM, Google va Microsoft’dan tashqari Red Hat Linux yadrosida Rust tilidan foydalanishga qiziqish bildirgan. Eslatib o'tamiz, Google Rust for Linux loyihasini bevosita qo'llab-quvvatlaydi, Rust-da Binder protsesslararo aloqa mexanizmining yangi tatbiqini ishlab chiqmoqda va Rust-da turli drayverlarni qayta ishlash imkoniyatini ko'rib chiqmoqda. Microsoft Rustda Hyper-V uchun drayverlarni joriy qilishni boshladi. ARM, ARM-ga asoslangan tizimlar uchun Rust-ni qo'llab-quvvatlashni yaxshilash ustida ishlamoqda. IBM PowerPC tizimlari uchun yadroda Rust qo'llab-quvvatlashini amalga oshirdi.

Manba: opennet.ru

a Izoh qo'shish