Rust-ում Linux միջուկի համար անվտանգ դրայվերներ գրելու շրջանակ

Ջոշ Թրիպլետը, ով աշխատում է Intel-ում և հանդիսանում է Crates.io-ի զարգացումը վերահսկող հանձնաժողովում, ելույթ ունենալով Open Source Technology Summit-ում։ ներկայացրեց աշխատանքային խումբ, որը նպատակաուղղված է համակարգային ծրագրավորման ոլորտում Rust լեզուն C-ի հետ հավասարեցնելուն:

Աշխատանքային խմբում, որը ստեղծման փուլում է, Rust-ի մշակողները Intel-ի ինժեներների հետ միասին կպատրաստեն տեխնիկական բնութագրեր, որոնք սահմանում են Rust-ում համակարգերի ծրագրավորման համար անհրաժեշտ գործառույթները: Համակարգի ծրագրավորումը հաճախ պահանջում է ցածր մակարդակի մանիպուլյացիա, ինչպես օրինակ՝ պրոցեսորի արտոնյալ հրահանգների կատարումը և պրոցեսորի վիճակի մասին մանրամասն տեղեկություններ ստանալը: Rust-ի համար արդեն մշակված նմանատիպ առանձնահատկություններից նշվում է անանուն կառույցների, միությունների, անսամբլի լեզվի ներդիրների աջակցությունը («asm!» մակրո) և BFLOAT16 լողացող կետի համարի ձևաչափը:

Ջոշը կարծում է, որ համակարգի ծրագրավորման ապագան պատկանում է Rust-ին, իսկ C լեզուն ժամանակակից իրողություններում հավակնում է այն տեղը, որը նախորդ տարիներին զբաղեցնում էր Assembly-ը: Ժանգը
ոչ միայն ազատում է ծրագրավորողներին C լեզվին բնորոշ խնդիրներից, որոնք առաջանում են հիշողության հետ ցածր մակարդակի աշխատանքի պատճառով, այլև հնարավորություն է տալիս այն օգտագործել ժամանակակից ծրագրավորման պարադիգմների մշակման մեջ:

Ընթացքում քննարկումներ ներկայացումներ
Ջոշը մտահղացել է Linux միջուկում վարորդների մշակման հնարավորությունը Rust լեզվով ավելացնելու հնարավորությունը, ինչը հնարավորություն կտա նվազագույն ջանքերով ստեղծել ավելի ապահով և լավ դրայվերներ՝ զերծ խնդիրներից, ինչպիսիք են հիշողության հասանելիությունը ազատելուց հետո, null: ցուցիչի հետհղումներ և բուֆերների գերազանցումներ:

Գրեգ Քրոահ-Հարթմանը, ով պատասխանատու է Linux միջուկի կայուն ճյուղի պահպանման համար, իր պատրաստակամությունն է հայտնել միջուկին ավելացնել Rust լեզվով դրայվերների մշակման շրջանակ, եթե այն իրական առավելություններ ունենա C-ի նկատմամբ, օրինակ՝ ապահովի անվտանգություն: կապեր Kernel API-ի հետ: Բացի այդ, Գրեգը դիտարկում է այս ֆրեյմուքը միայն որպես տարբերակ, ոչ լռելյայն ակտիվ, որպեսզի չներառի Rust-ը որպես build կախվածություն միջուկից։

Պարզվեց, որ մի քանի թիմեր արդեն աշխատում են այս ուղղությամբ։ Օրինակ, «Fish in a Barrel» ընկերության մշակողները подготовили Linux միջուկի համար Rust լեզվով բեռնվող մոդուլներ գրելու գործիքակազմ՝ օգտագործելով վերացական շերտերի մի շարք միջերեսների և միջուկի կառուցվածքների վրա՝ անվտանգությունը բարձրացնելու համար: Շերտերն ավտոմատ կերպով ստեղծվում են միջուկի վերնագրի առկա ֆայլերի հիման վրա՝ օգտագործելով կոմունալ ծրագիրը bindingen. Clang-ը օգտագործվում է շերտեր կառուցելու համար: Բացի միջշերտերից, հավաքված մոդուլներն օգտագործում են staticlib փաթեթը:

Զուգահեռ զարգանում է Մեկ այլ նախագիծ կենտրոնացած էր ներկառուցված համակարգերի և IoT սարքերի համար վարորդների մշակման վրա, որը նաև օգտագործում է bindgen միջուկի վերնագրի ֆայլերի վրա հիմնված շերտեր ստեղծելու համար: Շրջանակը թույլ է տալիս բարելավել վարորդի անվտանգությունը՝ առանց միջուկում փոփոխություններ կատարելու. միջուկում դրայվերների համար լրացուցիչ մեկուսացման մակարդակներ ստեղծելու փոխարեն, առաջարկվում է արգելափակել խնդիրները կոմպիլյացիայի փուլում՝ օգտագործելով առավել անվտանգ Rust լեզուն: Ենթադրվում է, որ նման մոտեցումը կարող է պահանջարկ ունենալ սարքավորումներ արտադրողների կողմից, որոնք շտապում են սեփական վարորդներ մշակել առանց պատշաճ աուդիտ անցկացնելու:

Նախատեսված բոլոր գործառույթները դեռ չեն իրականացվել, բայց շրջանակն արդեն բավականին հարմար է աշխատանքի համար և օգտագործվել է LAN9512 USB Ethernet կարգավորիչի համար աշխատող դրայվեր գրելու համար, որը մատակարարվում է Raspberry Pi 3 տախտակում: Գոյություն ունեցող smsc95xx դրայվերը, որը գրվել է C լեզու. Նշվում է, որ Rust-ում դրայվեր մշակելիս մոդուլի չափը և աշխատաժամանակի բաղադրիչների վերին ծախսերը աննշան են, ինչը թույլ է տալիս շրջանակն օգտագործել սահմանափակ ռեսուրսներով սարքերի համար:

Source: opennet.ru

Добавить комментарий