Linux kernel တွင် Rust development tools များထည့်ခြင်းဆိုင်ရာ ပြဿနာကို ဆွေးနွေးရန်အတွက် အဆိုပြုချက်

Nick Desagnier (Nick Desaulniers) ပေးစွမ်းရန် Google တွင် အလုပ်လုပ်နေသူ ထောက်ပံ့ Clang compiler ကိုအသုံးပြု၍ Linux kernel ကိုတည်ဆောက်ခြင်း။ ကူညီသည်။ Rust compiler တွင် bugs များကို ပြုပြင်ခြင်း၊ သူကကမ်းလှမ်းခဲ့သည် ညီလာခံတစ်ခုကျင်းပ Linux Plumbers Conference 2020 Rust တွင် kernel အစိတ်အပိုင်းများကို ပြုစုပျိုးထောင်ရန် ဖြစ်နိုင်ကြောင်း ဆွေးနွေးရန် session တစ်ခု။ Nick သည် LLVM အတွက် ရည်ရွယ်ထားသော အသေးစားဆွေးနွေးပွဲတစ်ခုကို စီစဉ်နေပြီး kernel ထဲသို့ Rust ပံ့ပိုးမှု ပေါင်းစည်းခြင်း၏ နည်းပညာဆိုင်ရာ ကဏ္ဍများကို ဆွေးနွေးခြင်းသည် ကောင်းမွန်မည်ဟု ယုံကြည်ပါသည် (သူသည် KBuild အတွက် အလုပ်လုပ်သော ရှေ့ပြေးပုံစံကို ပြင်ဆင်ထားပြီးဖြစ်သည်) နှင့် ထိုသို့သော ပံ့ပိုးကူညီမှု ရှိမရှိ နားလည်နိုင်သည် ။ အားလုံးကို ထည့်သွင်းထားပြီး Rust အသုံးပြုမှုအပေါ် ကန့်သတ်ချက်များကို လက်ခံသင့်သည်။

Open Source Summit နှင့် Embedded Linux ကွန်ဖရင့်တွင် မကြာသေးမီက ဆွေးနွေးမှုတစ်ခုတွင် Linus Torvalds စည်းကမ်းမရှိခဲ့ပါ။ Rust ကဲ့သို့သော ဘာသာစကားများတွင် core မဟုတ်သော kernel ခွဲစနစ်များ (ဥပမာ၊ ဒရိုက်ဗာများ) အတွက် စည်းနှောင်မှုများ ပေါ်ပေါက်လာခြင်း။ Rust ရှိ ဒရိုက်ဘာများကို တီထွင်နိုင်မှုသည် ကျွန်ုပ်တို့အား အနည်းငယ်မျှသော အားထုတ်မှုဖြင့် ပိုမိုဘေးကင်းပြီး ပိုမိုကောင်းမွန်သော ယာဉ်မောင်းများကို ဖန်တီးနိုင်စေမည်ဖြစ်ပြီး လွတ်မြောက်ပြီးနောက် မှတ်ဉာဏ်ဝင်ရောက်မှု၊ အချည်းနှီးသော pointer dereferences နှင့် buffer overrun များကဲ့သို့သော ပြဿနာများကင်းစင်စေသည်။ ဤအင်္ဂါရပ်ကို အကောင်အထည်ဖော်ရန် ပြင်ပကုမ္ပဏီ ပရောဂျက်များစွာ ရှိပြီးဖြစ်သည်-

  • “Fish in a Barrel” ကုမ္ပဏီမှ developer များ၊ ပြင်ဆင် လုံခြုံရေးတိုးမြှင့်ရန်အတွက် အင်တာဖေ့စ်များနှင့် kernel တည်ဆောက်ပုံများပေါ်ရှိ abstract အလွှာအစုံကို အသုံးပြု၍ Rust ဘာသာစကားရှိ Linux kernel အတွက် တင်နိုင်သော module များကို ရေးသားရန် ကိရိယာတန်ဆာပလာတစ်ခု။ utility ကို အသုံးပြု၍ ရှိပြီးသား kernel ခေါင်းစီးဖိုင်များအပေါ် အခြေခံ၍ အလွှာများကို အလိုအလျောက် ထုတ်ပေးပါသည်။ bingen. Clang ကို အလွှာများတည်ဆောက်ရာတွင် အသုံးပြုသည်။ interlayers အပြင်၊ စုစည်းထားသော module များသည် staticlib package ကိုအသုံးပြုသည်။
  • ဟောင်ကောင် တရုတ်တက္ကသိုလ်မှ သုတေသီများ ဖွံ့ဖြိုးတိုးတက် မြှုပ်သွင်းထားသောစနစ်များနှင့် Rust ရှိ Internet of Things စက်များအတွက် ဒရိုက်ဘာများကို တီထွင်ထုတ်လုပ်ရန် ပရောဂျက်တစ်ခုဖြစ်ပြီး kernel ခေါင်းစီးဖိုင်များကို အခြေခံ၍ အလွှာများထုတ်ပေးရန် bindgen ကိုအသုံးပြုသည်။ မူဘောင်သည် သင့်အား kernel တွင် အပြောင်းအလဲများမပြုလုပ်ဘဲ ယာဉ်မောင်းလုံခြုံရေးကို မြှင့်တင်နိုင်စေသည် - kernel အတွင်းရှိ ဒရိုက်ဘာများအတွက် ထပ်လောင်းအထီးကျန်အဆင့်များကို ဖန်တီးမည့်အစား ပိုမိုလုံခြုံသော Rust ဘာသာစကားကို အသုံးပြုကာ compilation အဆင့်တွင် ပြဿနာများကို ပိတ်ဆို့ရန် အဆိုပြုထားသည်။ ထိုသို့သောချဉ်းကပ်မှုသည် သင့်လျော်သောစာရင်းစစ်ကိုမလုပ်ဆောင်ဘဲ ကိုယ်ပိုင်ယာဉ်မောင်းများကို အလျင်အမြန်တီထွင်နေသော စက်ပစ္စည်းထုတ်လုပ်သူများ၏ တောင်းဆိုမှုဖြစ်နိုင်သည်ဟု ယူဆပါသည်။
  • မူဘောင်ရေးဆွဲသူများ C2Rust C ကုဒ်ကို Rust သို့ထုတ်လွှင့်ရန်အတွက်၊ ဖြုန်း အနည်းဆုံး လက်စွဲတည်းဖြတ်မှုများဖြင့် kernel module များကို ပြောင်းလဲခြင်းဆိုင်ရာ စမ်းသပ်မှုများ။ မှတ်သားထားသောပြဿနာများထဲမှတစ်ခုမှာ C2Rust တွင်မပံ့ပိုးရသေးသော GCC extension များကိုအသုံးပြုသည့် kernel ၏အစိတ်အပိုင်းများစွာတွင်အသုံးပြုခြင်းဖြစ်ပါသည်။ ဤပြဿနာကိုဖြေရှင်းရန်၊ C2Rust သည် GCC ရည်ညွှန်းချက်များ inline၊ cold၊ alias၊ used နှင့် section အပြင် inline assembler ၏စွမ်းရည်များကို ချဲ့ထွင်ပြီး aligned နှင့် packed နှစ်ခုလုံးရှိသော တည်ဆောက်ပုံများနှင့် ပြဿနာများကို ဖြေရှင်းရန် စီစဉ်ထားသည် (ဥပမာ xregs_state) . ကိုယ်တိုင်လုပ်ဆောင်ရန် လိုအပ်သည့် သိသာထင်ရှားသောပြဿနာများမှာ အသေးအဖွဲမဟုတ်သော C မက်ခရိုများကို Rust မက်ခရိုသို့ ဘာသာပြန်ဆိုနိုင်ခြင်း မရှိခြင်းနှင့် အမျိုးအစားများကို ပြန်လည်သတ်မှတ်ရန် လိုအပ်ခြင်း၊ C2Rust သည် C အမျိုးအစားများကို libc ပက်ကေ့ခ်ျတွင် အဓိပ္ပါယ်ဖွင့်ဆိုချက်များအဖြစ် ဘာသာပြန်ဆိုသော်လည်း ဤပက်ကေ့ဂျ်ကို kernel module များတွင် အသုံးမပြုနိုင်ပါ။

source: opennet.ru

မှတ်ချက် Add