Linux цөмд Rust хөгжүүлэлтийн хэрэгслийг нэмэх асуудлыг хэлэлцэх санал

Ник Дезагнер (Ник Десолниерс), хэн хангахын тулд Google-д ажилладаг дэмжлэг Clang хөрвүүлэгчийг ашиглан Линукс цөмийг бүтээх, мөн түүнчлэн тусалж байна Rust хөрвүүлэгчийн алдааг засах, санал болгосон чуулган дээр хийх Линукс сантехникчдийн бага хурал 2020 Rust дахь цөмийн бүрэлдэхүүн хэсгүүдийг хөгжүүлэх боломжтой болгох талаар хэлэлцэх хуралдаан. Ник LLVM-д зориулсан бичил бага хурлыг зохион байгуулж байгаа бөгөөд Rust дэмжлэгийг цөмд нэгтгэх техникийн талуудын талаар ярилцах нь сайхан байх болно (тэр KBuild-ийн ажлын прототипийг аль хэдийн бэлтгэсэн) мөн ийм дэмжлэг үзүүлэх шаардлагатай эсэхийг ойлгоход таатай байх болно. огт нэмж, зэв хэрэглэхэд ямар хязгаарлалтыг хүлээн зөвшөөрөх ёстой.

Нээлттэй эх сурвалжийн дээд хэмжээний уулзалт ба Embedded Linux бага хурлын үеэр Линус Торвалдс саяхан болсон хэлэлцүүлгийг сануулъя. үгүйсгээгүй Rust гэх мэт хэл дээр цөмийн бус дэд системийг (жишээлбэл, драйверууд) хөгжүүлэхэд зориулсан холбоосууд бий болсон. Rust-д драйверуудыг хөгжүүлэх чадвар нь суллагдсаны дараа санах ойн хандалт, хоосон заагч хаягжилт, буфер хэт их ачаалал гэх мэт асуудалгүй, хамгийн бага хүчин чармайлтаар илүү аюулгүй, илүү сайн драйверуудыг бий болгох боломжийг бидэнд олгоно. Энэ функцийг хэрэгжүүлэх хэд хэдэн гуравдагч этгээдийн төслүүд аль хэдийн байна:

  • "Торх дахь загас" компанийн хөгжүүлэгчид бэлтгэсэн аюулгүй байдлыг нэмэгдүүлэхийн тулд интерфэйсүүд болон цөмийн бүтцүүд дээр хийсвэр давхаргын багцыг ашиглан Linux цөмд ачаалах боломжтой модулиудыг Rust хэлээр бичих хэрэгсэл. Хэрэгслийг ашиглан одоо байгаа цөмийн толгой файлууд дээр үндэслэн давхаргууд автоматаар үүсгэгддэг холбогч. Clang нь давхаргыг барихад ашиглагддаг. Угсарсан модулиуд нь давхаргын давхаргаас гадна staticlib багцыг ашигладаг.
  • Хонконгийн Хятадын их сургуулийн судлаачид хөгжүүлэх Rust дахь суулгагдсан систем болон зүйлсийн интернет төхөөрөмжүүдийн драйверуудыг хөгжүүлэх төсөл бөгөөд энэ нь цөмийн толгой файлууд дээр тулгуурлан давхарга үүсгэхийн тулд bindgen ашигладаг. Энэхүү хүрээ нь цөмд өөрчлөлт оруулахгүйгээр драйверын аюулгүй байдлыг сайжруулах боломжийг олгодог - цөмд драйверуудыг тусгаарлах нэмэлт түвшинг бий болгохын оронд илүү найдвартай Rust хэлийг ашиглан эмхэтгэлийн үе шатанд асуудлыг хаахыг санал болгож байна. Ийм арга нь зохих аудит хийхгүйгээр яаран өмчийн жолооч нарыг хөгжүүлж буй тоног төхөөрөмж үйлдвэрлэгчдэд эрэлт хэрэгцээтэй байж магадгүй гэж таамаглаж байна.
  • Хүрээний хөгжүүлэгчид C2 Зэв C кодыг Rust руу дамжуулах, зарцуулах цөмийн модулиудыг хамгийн бага гараар засварлах замаар хөрвүүлэх туршилтууд. Тэмдэглэгдсэн асуудлуудын нэг нь C2Rust-д хараахан дэмжигдээгүй байгаа GCC өргөтгөлүүдийг ашигладаг кодын цөмийн цөмийн олон хэсэгт ашиглах явдал юм. Энэ асуудлыг шийдэхийн тулд C2Rust нь GCC-ийн inline, cold, alias, used and section-ийн атрибутуудад дэмжлэг нэмэхээс гадна шугаман ассемблерийн чадавхийг өргөжүүлэх, зэрэгцүүлсэн болон багцлагдсан бүтэцтэй холбоотой асуудлуудыг шийдвэрлэхээр төлөвлөж байна (жишээлбэл, xregs_state) . Гараар ажиллах шаардлагатай чухал асуудлууд нь C2Rust нь C төрлүүдийг libc багц дахь тодорхойлолт болгон хөрвүүлдэг тул энгийн бус C макрог Rust макро руу хөрвүүлэх боломжгүй, төрлүүдийг дахин тодорхойлох хэрэгцээ багтана.

Эх сурвалж: opennet.ru

сэтгэгдэл нэмэх