Нашри панҷуми часпакҳо барои ядрои Linux бо дастгирии забони Rust

Мигел Охеда, муаллифи лоиҳаи Rust-for-Linux, версияи панҷуми ҷузъҳоро барои таҳияи драйверҳои дастгоҳ бо забони Rust барои баррасӣ аз ҷониби таҳиягарони ядрои Linux пешниҳод кардааст. Дастгирии Rust таҷрибавӣ ҳисобида мешавад, аммо аллакай ба филиали linux-навбат дохил карда шудааст ва барои оғоз кардани кор оид ба эҷоди қабатҳои абстраксия дар зерсистемаҳои ядро, инчунин навиштани драйверҳо ва модулҳо ба қадри кофӣ таҳия шудааст. Ин таҳия аз ҷониби Google ва ISRG (Гурӯҳи Тадқиқоти Амнияти Интернет) маблағгузорӣ мешавад, ки муассиси лоиҳаи Let's Encrypt мебошад ва HTTPS ва рушди технологияҳоро барои беҳтар кардани амнияти интернет мусоидат мекунад.

Ёдовар мешавем, ки тағйироти пешниҳодшуда имкон медиҳад, ки Rust ҳамчун забони дуюм барои таҳияи драйверҳо ва модулҳои ядроӣ истифода шавад. Дастгирии Rust ҳамчун варианте пешниҳод карда мешавад, ки бо нобаёнӣ фаъол нест ва боиси он намегардад, ки Rust ҳамчун вобастагии зарурии сохтмон барои ядро ​​дохил карда шавад. Истифодаи Rust барои таҳияи драйвер ба шумо имкон медиҳад, ки драйверҳои бехатартар ва беҳтарро бо саъю кӯшиши кам эҷод кунед, ки аз мушкилоте ба монанди дастрасии хотира пас аз озодшавӣ, истинодҳои нул нишоннамо ва изофаи буфер озод карда шаванд.

Муомилоти аз хотираи бехатар дар Rust дар вақти тартибдиҳӣ тавассути санҷиши истинод, нигоҳ доштани моликияти объект ва мӯҳлати умри объект (миқёс), инчунин тавассути арзёбии дурустии дастрасии хотира ҳангоми иҷрои код таъмин карда мешавад. Rust инчунин муҳофизатро аз фаромадани ададҳо таъмин мекунад, пеш аз истифода оғозкунии ҳатмии арзишҳои тағирёбандаро талаб мекунад, хатогиҳоро дар китобхонаи стандартӣ беҳтар идора мекунад, консепсияи истинодҳо ва тағирёбандаҳоро ба таври нобаёнӣ татбиқ мекунад, чопкунии қавии статикиро барои кам кардани хатогиҳои мантиқӣ пешниҳод мекунад.

Варианти нави часпакҳо барои аз байн бурдани эродҳое, ки ҳангоми муҳокимаи нашри якум, дуюм, сеюм ва чоруми часпакҳо дода шудаанд, идома медиҳад. Дар версияи нав:

  • Озмоиши ҷузъҳо барои дастгирии Rust ба системаи муттаҳидсозии пайваста дар асоси боти 0DAY/LKP аз ҷониби Intel дастгирӣ карда шуд ва нашри гузоришҳои санҷишӣ оғоз ёфт. Мо барои ҳамгиро кардани дастгирии Rust ба системаи автоматии санҷиши KernelCI омодагӣ мебинем. Санҷиш дар асоси GitHub CI ба истифодаи контейнерҳо гузаронида шуд.
  • Модулҳои ядрои Rust аз зарурати муайян кардани атрибутҳои crate "#![no_std]" ва "#![функсия(...)]" озод карда шудаанд.
  • Дастгирии иловашуда барои ҳадафҳои ягонаи маҷлис (.o, .s, .ll ва .i).
  • Дастурҳои кодӣ қоидаҳои ҷудо кардани шарҳҳоро (“//”) ва рамзи ҳуҷҷатгузории (“///”) муайян мекунанд.
  • Скрипти is_rust_module.sh аз нав кор карда шуд.
  • Дастгирии иловагӣ барои примитивҳои ҳамоҳангсозии статикӣ (тағйирёбандаи муштараки ҷаҳонӣ) дар асоси татбиқи "CONFIG_CONSTRUCTORS".
  • Идоракунии қулф содда карда шудааст: Guard ва GuardMut якҷоя карда шудаанд ва як намуди параметрҳо.
  • Ҳангоми бақайдгирии дастгоҳҳо параметрҳои иловагиро муайян кардан мумкин аст.
  • Иловаи абстраксияи "RwSemaphore", ки ҳамчун печанда бар сохтори rw_semaphore C амал мекунад.
  • Барои истифодаи mmap, модули нави мм ва абстраксияи VMA илова карда шуд (пранда бар сохтори vm_area_struct).
  • Драйвери GPIO PL061 ба истифодаи макроси "dev_*!"
  • Тозакунии умумии код гузаронида шуд.

Манбаъ: opennet.ru

Илова Эзоҳ