Выпуск языка программирования Rust 1.73. Аудит RustVMM. Переписывание Binder на Rust

Новости мира unix. Хотите узнать секрет вечного счастья? Откройте страницу 246.
Ответить
acolyte
Аватара пользователя
Сообщения: 3255
Зарегистрирован: 20.08.2022

#

Выпуск языка программирования Rust 1.73. Аудит RustVMM. Переписывание Binder на Rust
Дата публикации:Fri, 17 Nov 2023 12:34:06 +0300




Опубликован релиз языка программирования общего назначения Rust 1.74, основанного проектом Mozilla, но ныне развиваемого под покровительством независимой некоммерческой организации Rust Foundation. Язык сфокусирован на безопасной работе с памятью и предоставляет средства для достижения высокого параллелизма выполнения заданий, при этом обходясь без использования сборщика мусора и runtime (runtime сводится к базовой инициализации и сопровождению стандартной библиотеки).



Методы работы с памятью в Rust избавляют разработчика от ошибок при манипулировании указателями и защищают от проблем, возникающих из-за низкоуровневой работы с памятью, таких как обращение к области памяти после её освобождения, разыменование нулевых указателей, выход за границы буфера и т.п. Для распространения библиотек, обеспечения сборки и управления зависимостями проектом развивается пакетный менеджер Cargo. Для размещения библиотек поддерживается репозиторий crates.io.



Безопасная работа с памятью обеспечивается в Rust во время компиляции через проверку ссылок, отслеживание владения объектами, учёт времени жизни объектов (области видимости) и оценку корректности доступа к памяти во время выполнения кода. Rust также предоставляет средства для защиты от целочисленных переполнений, требует обязательной инициализации значений переменных перед использованием, лучше обрабатывает ошибки в стандартной библиотеке, применяет концепцию неизменяемости (immutable) ссылок и переменных по умолчанию, предлагает сильную статическую типизацию для минимизации логических ошибок.




Основные новшества:
  • Добавлена возможность настройки lint-проверок через файл Cargo.toml с манифестом пакетного менеджера. Для определения настроек lint, таких как уровень реагирования (forbid, deny, warn, allow), предложены новые секции "[lints]" и "[workspace.lints]", изменение которых учитывается при принятии решения о пересборке. Например, вместо указания при сборке флагов "-F", "-D", "-W" и "-A" или добавления в код атрибутов "#![forbid(unsafe_code)]" и "#![deny(clippy::enum_glob_use)]" теперь можно использовать в манифесте Cargo:

    [lints.rust]
    unsafe_code = "forbid"

    [lints.clippy]
    enum_glob_use = "deny"


    В пакетный менеджер Crate добавлена возможность аутентификации при подключении к репозиторию. В базовую поставку включена поддержка размещения параметров аутентификации в хранилищах учётных данных Linux (на базе libsecret), macOS (Keychain) и Windows (Windows Credential Manager), но система изначально сделана модульной и позволяет организовать работу с различными провайдерами для хранения и генерации токенов, например, подготовлен плагин для использования менеджера паролей 1Password. Аутентификация может запрашиваться репозиторием для любых операций, а не только для подтверждения публикации пакетов.

    ~/.cargo/config.toml
    [registry]
    global-credential-providers = ["cargo:token", "cargo:libsecret"]

    Стабилизирована поддержка проекций возвращаемых типов (impl_trait_projections), позволяющая упоминать Self и T::Assoc в возвращаемых типах, таких как "async fn" и "-> impl Trait".

    struct Wrapper<'a, T>(&'a T);

    // Opaque return types that mention `Self`:
    impl Wrapper<'_, ()> {
    async fn async_fn() -> Self { /* ... */ }
    fn impl_trait() -> impl Iterator { /* ... */ }
    }

    trait Trait<'a> {
    type Assoc;
    fn new() -> Self::Assoc;
    }
    impl Trait<'_> for () {
    type Assoc = ();
    fn new() {}
    }

    // Opaque return types that mention an associated type:
    impl<'a, T: Trait<'a>> Wrapper<'a, T> {
    async fn mk_assoc() -> T::Assoc { /* ... */ }
    fn a_few_assocs() -> impl Iterator<Item = T::Assoc> { /* ... */ }
    }


    В разряд стабильных переведена новая порция API, в том числе стабилизированы методы и реализации типажей:

    Признак "const", определяющий возможность использования в любом контексте вместо констант, применён в функциях:
    • core::mem::transmute_copy
      [/url]
    • str::is_ascii
      [/url]
    • [u8]::is_ascii
      [/url]
    • core::num::Saturating
      [/url]
    • impl From for std::process::Stdio
      [/url]
    • impl From for std::process::Stdio
      [/url]
    • impl From for std::process::Child{Stdin, Stdout, Stderr}
      [/url]
    • impl From for std::process::Child{Stdin, Stdout, Stderr}
      [/url]
    • std::ffi::OsString::from_encoded_bytes_unchecked
      [/url]
    • std::ffi::OsString::into_encoded_bytes
      [/url]
    • std::ffi::OsStr::from_encoded_bytes_unchecked
      [/url]
    • std::ffi::OsStr::as_encoded_bytes
      [/url]
    • std::io::Error::other
      [/url]
    • impl TryFrom<char> for u16
      [/url]
    • impl<T: Clone, const N: usize> From<&[T; N]> for Vec<T>
      [/url]
    • impl<T: Clone, const N: usize> From<&mut [T; N]> for Vec<T>
      [/url]
    • impl<T, const N: usize> From<[T; N]> for Arc<[T]>
      [/url]
    • impl<T, const N: usize> From<[T; N]> for Rc<[T]>
      [/url]
В компиляторе, инструментарии, стандартной библиотеке и генерируемых исполняемых файлах приложений повышены требования к платформам Apple: для работы теперь требуются как минимум версии
macOS 10.12 Sierra, iOS 10 и tvOS 10, выпущенные в 2016 году.


Реализован третий уровень поддержки для платформы i686-pc-windows-gnullvm. Третий уровень подразумевает базовую поддержку, но без автоматизированного тестирования, публикации официальных сборок и проверки возможности сборки кода.

Реализован второй уровень поддержки целевой платформы loongarch64-unknown-none. Второй уровень поддержки подразумевает гарантию сборки.




Дополнительно можно отметить два события, связанных с языком Rust:
  • Фонд OSTIF (Open Source Technology Improvement Fund), созданный с целью усиления защищённости открытых проектов, опубликовал результаты аудита проекта RustVMM, предоставляющего компоненты для создания специфичных для определённых задач гипервизоров и мониторов виртуальных машин (VMM). В разработке проекта участвуют такие компании, как Intel, Alibaba, Amazon, Google, Linaro и Red Hat.
    На базе RustVMM развиваются гипервизоры Intel Cloud Hypervisor и Dragonball. Аудит подтвердил высокое качество кодовое базы и использование в архитектуре и реализации приёмов, нацеленных на достижение максимальной безопасности. В ходе аудита было выявлено 6 проблем, не имеющих прямого влияния на безопасность.

    Компания Google представила в списке рассылки разработчиков ядра Linux новую реализацию механизма межпроцессного взаимодействия Binder, переписанную на языке Rust. Переработка выполнена в рамках проекта по усилению защищённости, продвижению приёмов безопасного программирования и повышению эффективности выявления проблем при работе с памятью в Android (около 70% из всех опасных уязвимостей, выявленных в Android, вызваны ошибками при работе с памятью). Реализация Binder на Rust достигла паритета в функциональности с изначальным вариантом на языке Си, проходит все тесты AOSP (Android Open-Source Project) и может использоваться для создания рабочих редакций прошивок. Производительность обеих реализаций находится примерно на одном уровне (отклонения в пределах -1.96% и +1.38%).



Новость позаимствована с opennet.ru
Ссылка на оригинал: https://www.opennet.ru/opennews/art.shtml?num=60133

Жизнь за Нер'зула!

Ответить