Rust тілін қолдауы бар Linux ядросына арналған патчтардың екінші шығарылымы

Мигель Ожеда, Rust-for-Linux жобасының авторы Linux ядросының әзірлеушілерінің қарауы үшін Rust тілінде құрылғы драйверлерін әзірлеуге арналған компоненттердің жаңартылған нұсқасын ұсынды. Rust қолдауы эксперименталды болып саналады, бірақ Linux-келесі тармағына қосу үшін қазірдің өзінде келісілген. Жаңа нұсқа патчтардың бірінші нұсқасын талқылау кезінде жасалған ескертулерді алып тастайды. Линус Торвальдс талқылауға қосылып, кейбір бит операцияларын өңдеу логикасын өзгертуді ұсынды.

Еске салайық, ұсынылған өзгерістер Rust тілін драйверлер мен ядро ​​модульдерін әзірлеу үшін екінші тіл ретінде пайдалануға мүмкіндік береді. Rust қолдауы әдепкі бойынша қосылмаған опция ретінде ұсынылады және Rust-тың ядро ​​үшін қажетті құрастыру тәуелділіктерінің қатарына қосылуына әкелмейді. Драйверлерді әзірлеу үшін Rust пайдалану сізге аз күш жұмсап қауіпсіз және жақсырақ драйверлерді жасауға мүмкіндік береді, ол босатылғаннан кейін жад аймағына кіру, нөлдік көрсеткіштерге сілтеме жасау және буфердің асып кетуі сияқты проблемаларсыз.

Жадтың қауіпсіздігі Rust бағдарламасында компиляция уақытында анықтамалық тексеру, объект иеленуі мен объектінің қызмет ету мерзімін (ауқымын) қадағалау, сондай-ақ кодты орындау кезінде жадқа қол жеткізудің дұрыстығын бағалау арқылы қамтамасыз етіледі. Rust сонымен қатар бүтін сандардың толып кетуінен қорғауды қамтамасыз етеді, пайдалану алдында айнымалы мәндерді міндетті түрде инициализациялауды талап етеді, стандартты кітапханада қателерді жақсы өңдейді, әдепкі бойынша өзгермейтін сілтемелер мен айнымалылар тұжырымдамасын қолданады, логикалық қателерді азайту үшін күшті статикалық теруді ұсынады.

Патчтардың жаңа нұсқасындағы ең елеулі өзгерістер:

  • Жадты бөлу коды жад таусылған сияқты қателер орын алған кезде ықтимал «үрей» күйін жасаудан босатылады. Ақауларды өңдеу үшін кодты қайта өңдейтін Rust alloc кітапханасының нұсқасы қамтылған, бірақ түпкілікті мақсат ядроға қажетті барлық мүмкіндіктерді alloc негізгі басылымына көшіру (өзгертулер дайындалып, стандартқа көшірілді) Rust кітапханасы).
  • Түнгі құрастырулардың орнына енді Rust қолдауымен ядроны құрастыру үшін rustc компиляторының бета-шығарылымдары мен тұрақты шығарылымдарын пайдалануға болады. Қазіргі уақытта rustc 1.54-beta1 анықтамалық компилятор ретінде пайдаланылады, бірақ 1.54 шығарылымы айдың соңында шыққаннан кейін оған анықтамалық компилятор ретінде қолдау көрсетіледі.
  • Rust үшін стандартты “#[test]” төлсипатын пайдаланып сынақтарды жазуға қолдау және сынақтарды құжаттау үшін доктесттерді пайдалану мүмкіндігі қосылды.
  • Бұрын қолдау көрсетілетін x32_86 және ARM64-ке қосымша ARM64 және RISCV архитектураларына қолдау қосылды.
  • Енді барлық негізгі сынақтардан өтетін GCC Rust (Rust үшін GCC алдыңғы бөлігі) және rustc_codegen_gcc (GCC үшін rustc сервері) жақсартылды.
  • Абстракцияның жаңа деңгейі C тілінде жазылған ядро ​​механизмдерінің Rust бағдарламаларында пайдалану үшін ұсынылады, мысалы, қызыл-қара ағаштар, сілтеме бойынша есептелетін нысандар, файл дескрипторын құру, тапсырмалар, файлдар және енгізу/шығару векторлары.
  • Драйверді әзірлеу құрамдастарында file_operations модулі, модуль! макросы, макро тіркеу және қарапайым драйверлер (зерттеу және жою) үшін жақсартылған қолдау бар.
  • Binder енді файл дескрипторлары мен LSM ілгектерін жіберуді қолдайды.
  • Rust драйверінің неғұрлым функционалды мысалы ұсынылады - Raspberry Pi тақталарының аппараттық кездейсоқ сандар генераторы үшін bcm2835-rng.

Сонымен қатар, ядродағы Rust қолдануға қатысты кейбір компаниялардың жобалары атап өтілді:

  • Microsoft корпорациясы Rust қолдауын Linux ядросына біріктіру жұмысына қатысуға қызығушылық танытты және алдағы айларда Hyper-V on Rust драйверін енгізуге дайын.
  • ARM ARM негізіндегі жүйелер үшін Rust қолдауын жақсарту үшін жұмыс істейді. Rust жобасы 64 биттік ARM жүйелерін 1 деңгейлі платформаға айналдыратын өзгерістерді ұсынды.
  • Google Rust for Linux жобасына тікелей қолдау көрсетеді, Rust жүйесінде Binder процессаралық байланыс механизмінің жаңа іске асырылуын әзірлеуде және Rust жүйесінде әртүрлі драйверлерді қайта өңдеу мүмкіндігін қарастыруда. ISRG (Интернет қауіпсіздігін зерттеу тобы) арқылы Google Rust қолдауын Linux ядросына біріктіру жұмыстарын қаржыландыруды қамтамасыз етті.
  • IBM PowerPC жүйелеріне арналған Rust үшін ядролық қолдауды енгізді.
  • LSE (Systems Research Laboratory) зертханасы Rust қаласында SPI драйверін әзірледі.

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

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