Canonical "C-г Rust болгох" асуудлыг AI-аар шийдэхээр хөдөллөө: Ubuntu-ийн эх кодыг автоматаар аюулгүй болгох 3 жилийн төсөл эхлэв
Программ хангамжийн ертөнцөд "Rewrite it in Rust" (Бүгдийг Rust-ээр дахин бич) гэдэг үг нэг хэсэг хөгжүүлэгчдийн дунд хошигнол шиг сонсогддог байсан ч, бодит амьдрал дээр энэ нь асар том асуудал болоод байна. Өнөөдөр бидний ашиглаж буй Linux цөм, системийн түвшний daemon-ууд, сүлжээний серверийн дийлэнх нь олон арван жилийн турш бичигдсэн сая сая мөр C кодоос бүрддэг. C хэл хурдан, шууд техник хангамжтай ажилладаг ч buffer overflow, use-after-free зэрэг санах ойн ноцтой эмзэг байдлыг (memory safety vulnerabilities) байнга дагуулдаг.
Харин гар аргаар дахин бичих нь цаг хугацаа, зардлын хувьд асар өндөр эрсдэлтэй төдийгүй, эх кодод олон жилийн турш шингэсэн бүх жижиг patch, edge-case зохицуулалтуудыг алдагдуулах аюултай байдаг.
Үүнийг шийдэхээр Ubuntu үйлдлийн системийг хөгжүүлэгч Canonical компани болон UK Research and Innovation (UKRI) Их Британийн Бристолын их сургуулийн Программчлалын Хэлний Судалгааны Багтай хамтран, их хэмжээний C системийг автоматаар аюулгүй Rust руу хөрвүүлэх 3 жилийн судалгааны төслийг албан ёсоор эхлүүллээ.
Яагаад одоо байгаа хөрвүүлэгчид болон LLM-үүд хангалтгүй байна вэ?
Өнөөг хүртэл C кодыг Rust руу шилжүүлэхэд хоёр үндсэн зам байсан ч аль аль нь бодит үйлдвэрлэлийн шаардлага хангадаггүй:
- Дүрэмд суурилсан хөрвүүлэгчид (C2Rust г.м): Ийм багажууд C-ийн AST-ийг Rust рүү шууд хөрвүүлдэг боловч Rust-ийн бүх хүчийг устгадаг. Кодын 80-90% нь
unsafeблок дотор түүхий заагчтай (raw pointer) үлддэг тул "Rust хэл дээр бичсэн C код" болж хувирдаг бөгөөд санах ойн аюулгүй байдлыг хангаж чаддаггүй. - Энгийн LLM / AI моделиуд: Өнөөгийн ерөнхий зориулалтын хиймэл оюуны загварууд жижиг функцуудыг маш чадварлаг хөрвүүлдэг ч бүхэл бүтэн репозиторын хамаарал, контекстийг бүрэн хадгалж чаддаггүй. Хамгийн аюултай нь: AI-ийн үүсгэсэн Rust код алдаагүй 컴пиляци (compile) болж байгаа хэрнээ, цаанаа логикийн нарийн алдаа агуулж, үйлдвэрлэлийн орчинд гэнэт нурах эрсдэлийг бий болгодог.
Системийн хамгаалалтыг хариуцдаг гол сангуудад "бараг болчихсон" код хангалтгүй, эх кодтой 100% зан төлөвийн хувьд эквивалент (behaviorally correct) байх ёстой.
4 үе шаттай шинэ хөрвүүлэлтийн архитектур
Canonical болон Бристолын их сургуулийн төсөл нь дараах 4 шатлалт цогц систем боловсруулж байна:
+------------------+ +--------------------+ +---------------------+ +--------------------+
| 1. Хуваалт | | 2. LLM Хөрвүүлэлт | | 3. Баталгаажуулалт | | 4. Нэгтгэл ба |
| (Dependency- | --> | (Domain-Specific | --> | (Formal Verification| --> | Хөгжүүлэгчид |
| aware Slicing) | | Fine-tuned Model) | | & Fuzzing) | | Хүлээлгэн өгөх |
+------------------+ +--------------------+ +---------------------+ +--------------------+
1. Хамаарлыг тооцсон жижиглэх үе (Scheduling)
Хэдэн зуун мянган мөртэй кодыг шууд загвар луу хийх боломжгүй. Тиймээс уг систем C репозиторын функц, бүтэц хоорондын хамаарлын графийг (call graph / AST dependency) гаргаж, логик уялдаатай жижиг хэсгүүдэд (slices) хуваана.
2. Rust-ийн хэв маягт тохируулсан AI хөрвүүлэлт (Translation)
Энгийн код үүсгэгч биш, зөвхөн C-to-Rust шилжүүлэг дээр мэргэшүүлэн сургасан (fine-tuned) моделиудыг ашиглана. Гол зорилго нь: unsafe түлхүүр үгийг зүгээр нэг тойрч гарах бус, жинхэнэ Rust-ийн Option, Result, Ownership/Borrowing зарчмуудыг бүрэн шингээсэн "идиоматик" (idiomatic) код гаргах явдал юм.
3. Харьцуулсан шалгалт ба Баталгаажуулалт (Validation & Differential Testing)
Төслийн хамгийн гол цөм нь энэ хэсэг юм. Автомат систем нь үүссэн Rust код болон хуучин C кодыг хоёуланг нь олон сая санамсаргүй оролтоор зэрэг ажиллуулж (differential fuzzing), мөн математик баталгаажуулалтын (formal verification) аргаар бүх тохиолдолд ижил үр дүн өгч байгааг нотолно.
4. Засварлахад ойлгомжтой, цэвэр код (Maintainability)
Зөвхөн машин ажиллуулах биш, дараа нь хүн уншаад ойлгох, шинэ feature нэмэхэд хялбар байх цэвэр бүтэцтэй гаралтыг хангана.
Бодит туршилт: AppArmor болон snap-confine
Энэхүү төсөл зөвхөн онолын түвшинд үлдэхгүй. Тэд туршилтын полигон болгон Ubuntu-ийн хамгийн хариуцлагатай хоёр бүрэлдэхүүн хэсгийг сонгон авчээ:
- AppArmor: Linux систем дэх программуудын файл, сүлжээнд хандах эрхийг хязгаарладаг үндсэн аюулгүй байдлын модуль.
- snap-confine: Ubuntu-ийн Snap багцуудыг системээс тусгаарлан (sandbox) ажиллуулдаг чухал сервис.
Эдгээр нь олон жил үйлдвэрлэлд ажилласан, алдаа гаргах эрхгүй чухал C кодууд бөгөөд систем яг энэ түвшинд үр дүнтэй ажиллаж чадвал цаашид бүхэл бүтэн Linux цөмийн сангуудыг "исэлдүүлэх" (oxidize) замыг нээх юм.
Хөгжүүлэгчдэд яагаад хамаатай вэ?
Canonical-ийн энэхүү алхам нь дэд бүтэц, backend болон системийн инженерүүдэд дараах дохиог өгч байна:
- AI нь зөвхөн "код бичих" төдий биш, "legacy код шинэчлэх" гол хэрэгсэл болж байна: Хэдэн тэрбум долларын өртөгтэй олон зуун системийн C/C++ эх кодуудыг Rust рүү шилжүүлэх зардлыг автоматжуулалт хэдэн арав дахин бууруулах боломжтой.
- Compiles != Works: Хиймэл оюунаар код бичүүлэхэд "Алдаагүй ажиллаж байна" гэдэг нь "Зөв ажиллаж байна" гэсэн үг биш. Автоматжуулалтын гол хүч нь код бичихдээ биш, харин түүнийг баталгаажуулах (verification) архитектурт оршиж байна.
Хэрэв та өөрийн төсөлд хуучин кодоо шинэчлэхээр төлөвлөж байгаа бол зөвхөн AI-ийн гаралтыг хуулж тавихаас сэргийлж, автомат differential test болон fuzzing-ийг одооноос пайплайндоо нэвтрүүлж сурах нь хамгийн чухал чадвар болж байна.
Эх сурвалж: Ubuntu Discourse / Jon Seager Announcement, InfoWorld, Linuxiac
Сэтгэгдэл
Ачаалж байна...