Rust 1.74 программалоо тилинин чыгарылышы. RustVMM аудит. Rust ичинде Binder кайра жазуу

Mozilla долбоору тарабынан негизделген, бирок азыр Rust Foundation көз карандысыз коммерциялык эмес уюмунун демөөрчүлүгү астында иштелип чыккан Rust 1.74 жалпы максаттуу программалоо тилинин релизи жарыяланды. Бул тил эстутумдун коопсуздугуна көңүл бурат жана таштанды жыйгычты жана иштөө убактысын колдонуудан качуу менен жогорку жумуш параллелизмине жетүү үчүн каражаттарды камсыз кылат (иштөө убактысы стандарттык китепкананы негизги инициализацияга жана тейлөөгө чейин кыскарган).

Rust'тун эстутум менен иштөө ыкмалары иштеп чыгуучуну көрсөткүчтөрдү манипуляциялоодо каталардан куткарат жана эстутумдун төмөнкү деңгээлдеги иштөөсүнөн улам келип чыккан көйгөйлөрдөн коргойт, мисалы, эстутумдун аймагына ал бошотулгандан кийин жетүү, нөл көрсөткүчтөрдү шилтемеден чыгаруу, буфердин ашып кетиши ж.б. Китепканаларды жайылтуу, курууну камсыз кылуу жана көз карандылыкты башкаруу үчүн долбоор Cargo пакетинин менеджерин иштеп чыгат. crates.io репозиторий китепканаларды хостинг үчүн колдоого алынат.

Эстутумдун коопсуздугу Rust программасында компиляция убагында маалымдама текшерүү, объектке ээлик кылуу, объекттин иштөө мөөнөттөрүн (кошумчаларын) эсепке алуу жана кодду аткаруу учурунда эстутумга жетүүнүн тууралыгын баалоо аркылуу камсыз кылынат. Rust ошондой эле бүтүн сандардын ашып кетишинен коргоону камсыз кылат, колдонуудан мурун өзгөрмө маанилерин милдеттүү түрдө инициализациялоону талап кылат, стандарттык китепканада каталарды жакшыраак иштетет, өзгөрүлгүс шилтемелер жана өзгөрмөлөр концепциясын демейки боюнча колдонот, логикалык каталарды азайтуу үчүн күчтүү статикалык терүүнү сунуштайт.

Негизги инновациялар:

  • Пакет менеджери манифести менен Cargo.toml файлы аркылуу линт текшерүүлөрүн конфигурациялоо мүмкүнчүлүгү кошулду. Жооп деңгээли (тыюу, четке кагуу, эскертүү, уруксат берүү) сыяктуу линт жөндөөлөрүн аныктоо үчүн “[lints]” жана “[workspace.lints]” жаңы бөлүмдөрү сунушталат, аларда өзгөртүүлөр жөнүндө чечим кабыл алууда эске алынат. кайра куруу. Мисалы, "#![тыюу (кооптуу_код)]" жана "#![deny(clippy)" жыйноо же кошууда "-F", "-D", "-W" жана "-A" желектерин көрсөтүүнүн ордуна :” коддун атрибуттары) :enum_glob_use)]" эми Жүк манифестинде колдонулушу мүмкүн: [lints.rust] unsafe_code = "тыюу" [lints.clippy] enum_glob_use = "deny"
  • Crate пакетинин менеджери репозиторийге туташуу учурунда аныктыгын текшерүү мүмкүнчүлүгүн кошту. Негизги пакетте аутентификациянын параметрлерин Linux каттоо маалыматтарынын дүкөндөрүндө (libsecret негизинде), macOS (Anahtar чынжыр) жана Windows (Windows Credential Manager) жайгаштыруу үчүн колдоо камтылган, бирок система алгач модулдук кылып, сактоо үчүн ар кандай провайдерлер менен иштөөнү уюштурууга мүмкүндүк берет. токендерди түзүү, мисалы, 1Password сырсөз башкаргычын колдонуу үчүн плагин даярдалган. Аутентификация пакеттердин жарыяланганын ырастоо үчүн эле эмес, ар кандай операция үчүн репозиторий тарабынан талап кылынышы мүмкүн. ~/.cargo/config.toml [регистр] global-credential-providers = ["жүк:токен", "жүк:libsecret"]
  • Кайтаруу түрүндөгү проекцияларды колдоо (impl_trait_projections) турукташтырылып, "async fn" жана "->impl Trait" сыяктуу кайтарым түрлөрүндө Self жана T::Assoc жөнүндө сөз кылууга мүмкүндүк берди. struct Wrapper<'a, T>(&'a T); // `Self` деп айтылган тунук эмес кайтаруу түрлөрү: impl Wrapper<'_, ()> { async fn async_fn() -> Self { /* … */ } fn impl_trait() -> impl Итератор { /* … */ } } trait Trait<'a> { type Assoc; fn new() -> Self::Assoc; } impl Trait<'_> for () { type Assoc = (); fn new() {} } // Байланышкан типти айткан тунук эмес кайтаруу түрлөрү: impl<'a, T: Trait<'a>> Wrapper<'a, T> { async fn mk_assoc() -> T::Assoc { /* … */ } fn a_few_assocs() -> impl Iterator { /* … */ } }
  • API'нин жаңы бөлүгү туруктуу категорияга жылдырылды, анын ичинде сапаттардын ыкмалары жана ишке ашырылышы турукташтырылды:
  • Аны константалардын ордуна каалаган контекстте колдонуу мүмкүнчүлүгүн аныктаган "const" атрибуту функцияларда колдонулат:
    • core::mem::transmute_copy
    • str::is_ascii
    • [u8]::is_ascii
    • core::num::Saturating
    • impl From std::process::Stdio үчүн
    • impl From std::process::Stdio үчүн
    • impl From std::process::Child{Stdin, Stdout, Stderr} үчүн
    • impl From std::process::Child{Stdin, Stdout, Stderr} үчүн
    • std::ffi::OsString::from_encoded_bytes_unchecked
    • std::ffi::OsString::into_encoded_bytes
    • std::ffi::OsStr::from_encoded_bytes_unchecked
    • std::ffi::OsStr::as_encoded_bytes
    • std::io::Error:: other
    • impl TryFrom u16 үчүн
    • импл From<&[T; N]>век учун
    • импл From<&mut [T; N]>век учун
    • имп From<[T; N]> Arc<[T]> үчүн
    • импл From<[T; N]> Rc<[T]> үчүн
  • Компилятор, инструменттер топтому, стандарттуу китепкана жана түзүлгөн тиркемелердин аткарылуучу файлдары Apple платформаларына талаптарды жогорулатты, азыр иштөө үчүн кеминде macOS 10.12 Sierra, iOS 10 жана tvOS 10 2016-жылы чыгарылган.
  • Колдоонун үчүнчү деңгээли i686-pc-windows-gnullvm платформасы үчүн ишке ашырылган. Үчүнчү деңгээл негизги колдоону камтыйт, бирок автоматташтырылган тестирлөөсүз, расмий түзүмдөрдү жарыялоосуз же кодду курууга болорун текшерүүсүз.
  • loongarch64-unknown-none максаттуу платформасын колдоонун экинчи деңгээли ишке ашырылды. Колдоонун экинчи деңгээли монтаждык кепилдикти камтыйт.

Мындан тышкары, Rust тилине байланыштуу эки окуяны белгилесе болот:

  • Ачык коддуу долбоорлордун коопсуздугун бекемдөө үчүн түзүлгөн OSTIF (Ачык булак технологияларын жакшыртуу фонду) тапшырмага арналган гипервизорлорду жана виртуалдык машина мониторлорун (VMM) түзүү үчүн компоненттерди камсыз кылган RustVMM долбоорунун аудитинин жыйынтыгын жарыялады. Долбоорду иштеп чыгууга Intel, Alibaba, Amazon, Google, Linaro жана Red Hat сыяктуу компаниялар катышууда. Intel Cloud Hypervisor жана Dragonball гипервизорлору RustVMM негизинде иштелип чыгууда. Аудит коддук базанын жогорку сапатын жана максималдуу коопсуздукка жетишүүгө багытталган архитектурада жана ишке ашырууда техникаларды колдонууну тастыктады. Текшерүүнүн жүрүшүндө коопсуздукка түз таасирин тийгизбеген 6 көйгөй аныкталган.
  • Google Linux ядросун иштеп чыгуучу почта тизмесине Rust тилинде кайра жазылган Binder процесстер аралык байланыш механизминин жаңы ишке киргизди. Кайра иштеп чыгуу коопсуздукту бекемдөө, программалоонун коопсуз ыкмаларын илгерилетүү жана Android'де эс тутум менен иштөөдө көйгөйлөрдү аныктоонун натыйжалуулугун жогорулатуу боюнча долбоордун алкагында жүргүзүлдү (Androidде аныкталган бардык кооптуу кемчиликтердин 70%га жакыны эс тутум менен иштөөдөгү каталардан улам келип чыгат). ). Binder in Rust ишке ашырылышы Си тилиндеги оригиналдуу версия менен функционалдуулук боюнча паритетке жетишти, бардык AOSP (Android Open-Source Project) сыноолорунан өттү жана микропрограмманын жумушчу басылмаларын түзүүдө колдонулушу мүмкүн. Эки ишке ашыруунун көрсөткүчтөрү болжол менен бирдей деңгээлде (четтөөлөр -1.96% жана +1.38%).

Source: opennet.ru

Комментарий кошуу