Rust тилин колдоо менен Linux ядросу үчүн патчтардын бешинчи чыгарылышы

Мигель Ожеда, Rust-for-Linux долбоорунун автору, Linux ядросун иштеп чыгуучулардын кароосуна Rust тилинде түзмөк драйверлерин иштеп чыгуу үчүн компоненттердин бешинчи версиясын сунуштады. Rust колдоосу эксперименталдык деп эсептелет, бирок буга чейин Linux-кийинки бутагына киргизилген жана ядронун подсистемаларынын үстүнөн абстракция катмарларын түзүү, ошондой эле драйверлерди жана модулдарды жазуу боюнча ишти баштоо үчүн жетиштүү түрдө иштелип чыккан. Иштеп чыгуу Google жана ISRG (Internet Security Research Group) тарабынан каржыланат, ал Let's Encrypt долбоорунун негиздөөчүсү жана HTTPS жана интернет коопсуздугун жакшыртуу үчүн технологияларды өнүктүрүүгө көмөктөшөт.

Эске салсак, сунушталган өзгөртүүлөр Rust тилин драйверлерди жана ядро ​​модулдарын иштеп чыгуу үчүн экинчи тил катары колдонууга мүмкүндүк берет. Rust колдоосу демейки боюнча иштетилбеген опция катары сунушталат жана Rust ядро ​​үчүн керектүү куруу көз карандылыгы катары киргизилбейт. Драйверди өнүктүрүү үчүн Rust колдонуу сизге минималдуу күч менен коопсуз жана жакшыраак драйверлерди түзүүгө мүмкүндүк берет, алар бошоткондон кийин эстутумга кирүү, нөл көрсөткүчтүн ажыратылышы жана буфердин ашып кетиши сыяктуу көйгөйлөрдөн кутулат.

Эстутумдун коопсуз иштөөсү Rust программасында компиляция убагында маалымдама текшерүү, объектке ээлик кылуу жана объекттин иштөө мөөнөтүн (ааламында) эсепке алуу, ошондой эле кодду аткаруу учурунда эстутумга кирүүнүн тууралыгын баалоо аркылуу камсыз кылынат. Rust ошондой эле бүтүн сандардын ашып кетишинен коргоону камсыздайт, өзгөрмөлөрдү колдонуудан мурун инициализациялоону талап кылат, стандарттык китепканада каталарды жакшыраак иштетет, демейки боюнча өзгөрүлгүс шилтемелер жана өзгөрмөлөр концепциясын колдонот жана логикалык каталарды азайтуу үчүн күчтүү статикалык терүүнү сунуштайт.

Жамааттардын жаңы версиясы тактардын биринчи, экинчи, үчүнчү жана төртүнчү басылышын талкуулоо учурунда айтылган сын-пикирлерди жоюуну улантууда. Жаңы версияда:

  • Intel тарабынан колдоого алынган 0DAY/LKP ботунун негизинде үзгүлтүксүз интеграциялык тутумга Rust колдоосу үчүн компоненттик тестирлөө кошулду жана тестирлөө отчетторун жарыялоо башталды. Биз Rust колдоосун KernelCI автоматташтырылган тестирлөө системасына интеграциялоого даярданып жатабыз. GitHub CI негизинде тестирлөө контейнерлерди колдонууга өткөрүлүп берилди.
  • Rust ядросунун модулдары “#![no_std]” жана “#![feature(…)]” куту атрибуттарын аныктоо зарылдыгынан бошотулган.
  • Жалгыз монтаждоо максаттары үчүн кошумча колдоо (.o, .s, .ll жана .i).
  • Коддун көрсөтмөлөрү комментарийлерди («//») жана документтештирүү кодун («///») бөлүү эрежелерин аныктайт.
  • is_rust_module.sh скрипти кайра иштетилди.
  • "CONFIG_CONSTRUCTORS" ишке ашыруунун негизинде статикалык (глобалдык бөлүшүлгөн өзгөрмө) синхрондоштуруу примитивдери үчүн кошумча колдоо.
  • Кулпуну башкаруу жөнөкөйлөштүрүлгөн: Guard жана GuardMut бириктирилген жана бир параметрленген түрү.
  • Түзмөктөрдү каттоодо кошумча параметрлерди аныктоого болот.
  • "RwSemaphore" абстракциясы кошулду, ал rw_semaphore C түзүмүнүн үстүнөн орогуч катары иштейт.
  • mmap колдонуу үчүн, жаңы мм модулу жана VMA абстракциясы кошулду (vm_area_struct структурасынын үстүнөн орогуч).
  • GPIO PL061 драйвери “dev_*!” макросун колдонууга которулду.
  • Кодду жалпы тазалоо жүргүзүлдү.

Source: opennet.ru

Комментарий кошуу