Rust ဘာသာစကားအတွက် ပံ့ပိုးမှုဖြင့် Linux kernel အတွက် ပဉ္စမအကြိမ် ဖာထေးမှု

Rust-for-Linux ပရောဂျက်ကိုရေးသားသူ Miguel Ojeda သည် Linux kernel developer များမှထည့်သွင်းစဉ်းစားရန်အတွက် Rust language တွင် device drivers များဖန်တီးရန်အတွက် ပဉ္စမမြောက်ဗားရှင်းကို အဆိုပြုထားသည်။ သံချေးတက်ခြင်းကို စမ်းသပ်သည်ဟု ယူဆသော်လည်း linux-next ဌာနခွဲတွင် ထည့်သွင်းထားပြီးဖြစ်ပြီး kernel subsystems များပေါ်တွင် abstraction layers ဖန်တီးခြင်းအပြင် drivers နှင့် modules များရေးသားခြင်းတို့ကို စတင်ရန်အတွက် လုံလောက်စွာ တီထွင်ထားပါသည်။ တီထွင်မှုကို Google နှင့် ISRG (Internet Security Research Group) တို့မှ ရန်ပုံငွေပံ့ပိုးထားပြီး Let's Encrypt ပရောဂျက်ကို တည်ထောင်သူဖြစ်ပြီး HTTPS နှင့် အင်တာနက်လုံခြုံရေးကို မြှင့်တင်ရန် နည်းပညာများ ဖွံ့ဖြိုးတိုးတက်မှုကို မြှင့်တင်ပေးပါသည်။

အဆိုပြုထားသောပြောင်းလဲမှုများသည် ဒရိုက်ဗာများနှင့် kernel module များဖန်တီးရန်အတွက် ဒုတိယဘာသာစကားအဖြစ် Rust ကိုအသုံးပြုရန် ဖြစ်နိုင်ကြောင်း သတိရပါ။ Rust ပံ့ပိုးမှုကို ပုံသေအားဖြင့် ဖွင့်မထားသော ရွေးချယ်မှုတစ်ခုအနေဖြင့် တင်ပြထားပြီး kernel အတွက် လိုအပ်သော တည်ဆောက်မှုမှီခိုမှုတစ်ခုအဖြစ် Rust ပါဝင်ခြင်းကို မဖြစ်ပေါ်စေပါ။ ယာဉ်မောင်းဖွံ့ဖြိုးတိုးတက်မှုအတွက် Rust ကိုအသုံးပြုခြင်းဖြင့် သင့်အား လွတ်ကင်းပြီးနောက် မှတ်ဉာဏ်ဝင်ရောက်ခွင့်၊ null pointer dereferences နှင့် buffer overruns ကဲ့သို့သော ပြဿနာများမှ ကင်းဝေးပြီး အနည်းငယ်သာ အားစိုက်ထုတ်ခြင်းဖြင့် ပိုမိုဘေးကင်းပြီး ပိုမိုကောင်းမွန်သော ယာဉ်မောင်းများကို ဖန်တီးနိုင်မည်ဖြစ်သည်။

ကိုးကားစစ်ဆေးခြင်း၊ အရာဝတ္တုပိုင်ဆိုင်မှုကိုခြေရာခံခြင်းနှင့် အရာဝတ္ထုသက်တမ်း (scope) တို့ကို စုစည်းချိန်တွင် Rust တွင် Memory ဘေးကင်းရေးကို ပံ့ပိုးပေးသည့်အပြင် ကုဒ်လုပ်ဆောင်နေစဉ်အတွင်း မမ်မိုရီဝင်ရောက်မှု၏ မှန်ကန်မှုကို အကဲဖြတ်ခြင်းမှတဆင့် ပေးပါသည်။ Rust သည် ကိန်းပြည့်ပြည့်လျှံမှုများကို အကာအကွယ်ပေးသည်၊ အသုံးမပြုမီ ပြောင်းလဲနိုင်သောတန်ဖိုးများကို မဖြစ်မနေစတင်လုပ်ဆောင်ရန် လိုအပ်သည်၊ စံဒစ်ဂျစ်တိုက်တွင် ပိုမိုကောင်းမွန်သော အမှားများကို ကိုင်တွယ်ရန်၊ ပုံသေအားဖြင့် မပြောင်းလဲနိုင်သော ကိုးကားချက်များနှင့် ကိန်းရှင်များ၏ သဘောတရားကို ကျင့်သုံးသည်၊ ယုတ္တိအမှားများကို အနည်းဆုံးဖြစ်စေရန် ခိုင်လုံသောအငြိမ်စာရိုက်ခြင်းကို ပံ့ပိုးပေးပါသည်။

ဖာထေးမှုဗားရှင်းအသစ်သည် ပထမ၊ ဒုတိယ၊ တတိယနှင့် စတုတ္ထထုတ်ဝေမှုများ၏ ဆွေးနွေးမှုအတွင်း ပြုလုပ်ခဲ့သော မှတ်ချက်များကို ဆက်လက်ဖယ်ရှားထားသည်။ ဗားရှင်းအသစ်တွင်-

  • Intel-ပံ့ပိုးထားသော 0DAY/LKP ဘော့တ်ကိုအခြေခံ၍ Rust ပံ့ပိုးမှုအတွက် အစိတ်အပိုင်းစမ်းသပ်ခြင်းအား စဉ်ဆက်မပြတ်ပေါင်းစပ်မှုစနစ်တွင် ထည့်သွင်းထားပြီး စမ်းသပ်ခြင်းအစီရင်ခံစာများကို စတင်ထုတ်ဝေလိုက်ပါပြီ။ ကျွန်ုပ်တို့သည် KernelCI အလိုအလျောက်စမ်းသပ်ခြင်းစနစ်တွင် Rust ပံ့ပိုးမှုကို ပေါင်းစပ်ရန် ပြင်ဆင်နေပါသည်။ GitHub CI ကိုအခြေခံ၍ စမ်းသပ်ခြင်းအား ကွန်တိန်နာများအသုံးပြုခြင်းသို့ လွှဲပြောင်းထားပါသည်။
  • သံချေးတက်နေသော kernel modules များသည် crate attributes “#![no_std]” နှင့် “#![feature(…)]” ကို သတ်မှတ်ရန် လိုအပ်ခြင်းမှ လွတ်မြောက်ပါသည်။
  • တစ်ခုတည်းသော စုဝေးမှုပစ်မှတ်များ (.o, .s, .ll နှင့် .i) အတွက် ပံ့ပိုးမှု ထပ်ထည့်ထားသည်။
  • ကုဒ်လမ်းညွှန်ချက်များသည် မှတ်ချက်များကို ပိုင်းခြားရန် စည်းမျဉ်းများ (“//”) နှင့် မှတ်တမ်းတင်ကုဒ် (“///”) ကို ခွဲခြားသတ်မှတ်သည်။
  • is_rust_module.sh script ကို ပြန်လည်ပြုပြင်ပြီးပါပြီ။
  • "CONFIG_CONSTRUCTORS" အကောင်အထည်ဖော်မှုအပေါ် အခြေခံ၍ static (global shared variable) synchronization primitives များအတွက် ပံ့ပိုးမှု ပေါင်းထည့်ထားပါသည်။
  • လော့ခ်စီမံခန့်ခွဲမှုကို ရိုးရှင်းအောင်ပြုလုပ်ထားသည်- Guard နှင့် GuardMut တို့ကို ပေါင်းစပ်ထားပြီး ကန့်သတ်အမျိုးအစားတစ်ခုဖြစ်သည်။
  • စက်ပစ္စည်းများကို စာရင်းသွင်းသည့်အခါ အပိုဘောင်များကို သတ်မှတ်ရန် ဖြစ်နိုင်သည်။
  • rw_semaphore C တည်ဆောက်ပုံအပေါ် ထုပ်ပိုးမှုတစ်ခုအဖြစ် လုပ်ဆောင်သည့် "RwSemaphore" abstraction ကို ထည့်သွင်းခဲ့သည်။
  • mmap ကိုအသုံးပြုရန်၊ mm module အသစ်နှင့် VMA abstraction (vm_area_struct တည်ဆောက်မှုအပေါ် ခြုံငုံသုံးသပ်ချက်) ကို ထည့်သွင်းထားသည်။
  • GPIO PL061 ဒရိုက်ဘာကို “dev_*!” မက်ခရိုကို အသုံးပြု၍ ပြောင်းလဲထားသည်။
  • ကုဒ်၏ ယေဘုယျရှင်းလင်းမှုကို ဆောင်ရွက်ခဲ့ပါသည်။

source: opennet.ru

မှတ်ချက် Add