Առաջարկ՝ Linux-ի միջուկում Rust մշակման գործիքների ավելացման հարցը քննարկելու համար
Նիկ Դեզանիեր (Նիկ Դեզոլնիերս), ով աշխատում է Google-ում՝ տրամադրելու համար աջակցություն Linux միջուկի կառուցում Clang կոմպիլյատորի միջոցով և նաև օգնելով ուղղել Rust կոմպիլյատորի սխալները, Առաջարկվում է անցկացնել համաժողովում Linux Plumbers Conference 2020 նիստ՝ քննարկելու Rust-ում միջուկի բաղադրիչների մշակման հնարավորությունը: Նիկը կազմակերպում է միկրոկոնֆերանս՝ նվիրված LLVM-ին և կարծում է, որ լավ կլիներ քննարկել Rust-ի աջակցության միջուկում հնարավոր ինտեգրման տեխնիկական ասպեկտները (նա արդեն պատրաստել է KBuild-ի աշխատանքային նախատիպը) և հասկանալ՝ արդյոք նման աջակցությունը պետք է։ ընդհանրապես ավելացվի, և Rust-ի օգտագործման ինչ սահմանափակումներ պետք է ընդունվեն:
Հիշեցնենք, որ վերջերս բաց կոդով գագաթնաժողովի և ներդրված Linux կոնֆերանսի ժամանակ Լինուս Տորվալդսը չի բացառել կապերի առաջացումը ոչ հիմնական միջուկային ենթահամակարգերի (օրինակ՝ դրայվերների) զարգացման համար այնպիսի լեզուներով, ինչպիսին է Rust-ը: Rust-ում դրայվերներ մշակելու ունակությունը թույլ կտա մեզ ստեղծել ավելի ապահով և ավելի լավ դրայվերներ՝ նվազագույն ջանքերով, առանց այնպիսի խնդիրների, ինչպիսիք են հիշողության հասանելիությունը ազատվելուց հետո, զրոյական ցուցիչի մատնանշումները և բուֆերների գերազանցումները: Արդեն կան մի քանի երրորդ կողմի նախագծեր այս գործառույթն իրականացնելու համար.
«Ձուկը տակառում» ընկերության մշակողները подготовили Linux միջուկի համար Rust լեզվով բեռնվող մոդուլներ գրելու գործիքակազմ՝ օգտագործելով վերացական շերտերի մի շարք միջերեսների և միջուկի կառուցվածքների վրա՝ անվտանգությունը բարձրացնելու համար: Շերտերն ավտոմատ կերպով ստեղծվում են միջուկի վերնագրի առկա ֆայլերի հիման վրա՝ օգտագործելով կոմունալ ծրագիրը bindingen. Clang-ը օգտագործվում է շերտեր կառուցելու համար: Բացի միջշերտերից, հավաքված մոդուլներն օգտագործում են staticlib փաթեթը:
Հոնկոնգի չինական համալսարանի գիտնականները զարգացնել Rust-ում ներկառուցված համակարգերի և իրերի ինտերնետ սարքերի համար դրայվերների մշակման նախագիծ, որն օգտագործում է նաև bindgen-ը՝ միջուկի վերնագրի ֆայլերի վրա հիմնված շերտեր ստեղծելու համար: Շրջանակը թույլ է տալիս բարելավել վարորդի անվտանգությունը՝ առանց միջուկում փոփոխություններ կատարելու. միջուկում դրայվերների համար լրացուցիչ մեկուսացման մակարդակներ ստեղծելու փոխարեն, առաջարկվում է արգելափակել խնդիրները կոմպիլյացիայի փուլում՝ օգտագործելով առավել անվտանգ Rust լեզուն: Ենթադրվում է, որ նման մոտեցումը կարող է պահանջված լինել սարքավորումներ արտադրողների կողմից, որոնք շտապում են սեփական վարորդներ մշակել առանց պատշաճ աուդիտ անցկացնելու:
Շրջանակային մշակողներ C2Rust C կոդը Rust-ին հեռարձակելու համար, վարք փորձեր միջուկի մոդուլների փոխակերպման վերաբերյալ նվազագույն ձեռքով խմբագրումներով: Նշված խնդիրներից մեկը կոդի միջուկի շատ մասերում օգտագործումն է, որն օգտագործում է GCC ընդլայնումներ, որոնք դեռ չեն աջակցվում C2Rust-ում: Այս խնդիրը լուծելու համար C2Rust-ը նախատեսում է աջակցություն ավելացնել GCC ատրիբուտներին inline, cold, alias, used և section, ինչպես նաև ընդլայնել inline assembler-ի հնարավորությունները և լուծել խնդիրներ կառուցվածքների հետ, որոնք և՛ հավասարեցված են, և՛ փաթեթավորված (օրինակ, xregs_state) . Ձեռքով աշխատանք պահանջող զգալի խնդիրները ներառում են ոչ տրիվիալ C մակրոները Rust մակրոների թարգմանելու անկարողությունը և տեսակները վերասահմանելու անհրաժեշտությունը, քանի որ C2Rust-ը C տիպերը թարգմանում է սահմանումների libc փաթեթում, բայց այս փաթեթը չի կարող օգտագործվել միջուկի մոդուլներում: