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 біріктірілген және бір параметрленген түрі.
  • Құрылғыларды тіркеу кезінде қосымша параметрлерді анықтауға болады.
  • rw_semaphore C құрылымының үстіне орауыш ретінде әрекет ететін "RwSemaphore" абстракциясы қосылды.
  • mmap пайдалану үшін жаңа мм модулі және VMA абстракциясы қосылды (vm_area_struct құрылымының үстіндегі қаптама).
  • GPIO PL061 драйвері “dev_*!” макросын пайдалану үшін түрлендірілді.
  • Кодты жалпы тазалау жүргізілді.

Ақпарат көзі: opennet.ru

пікір қалдыру