Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
freebsd
GitHub Repository: freebsd/freebsd-doc
Path: blob/main/website/content/ru/status/report-2025-10-2025-12/kernel_rust.adoc
18096 views
=== Поддержка Rust в ядре (Kernel Rust Support)

Ссылки: +
link:https://github.com/ayrtonm/freebsd-kpi-rs[Репозиторий KPI для Rust] URL: link:https://github.com/ayrtonm/freebsd-kpi-rs[] +
link:https://github.com/ayrtonm/freebsd-src/tree/virtio_snd[Звуковой драйвер virtio на Rust] URL: link:https://github.com/ayrtonm/freebsd-src/tree/virtio_snd[]

Контакт: Ayrton Muñoz <[email protected]>

Я занимаюсь добавлением поддержки использования Rust в ядре и написания драйверов устройств на нём.
Rust — хороший инструмент для того, чтобы взять существующие правила использования указателей и обеспечить их соблюдение с помощью системы типов.
Эти правила часто неявны в C, что означает дополнительную умственную нагрузку для разработчиков.
Rust не предотвратит каждую ошибку, но позволяет разработчикам избегать некоторых из них и больше сосредотачиваться на реализации интересующей их функциональности.

KPI для Rust в настоящее время находятся в разработке и не очень стабильны, но нет зависимости от более широкой экосистемы Rust или нестабильных языковых функций/API.
Это означает, что в конечном итоге они смогут обеспечивать такую же стабильность, как и эквивалентные KPI на C, а обновление до более новых инструментальных цепочек Rust не должно приводить к ошибкам.
Это также обеспечивает такую же прозрачность, как и C, в отношении того, когда происходят выделения памяти, поскольку используется невыделяющее подмножество link:https://doc.rust-lang.org/core/[стандартной библиотеки Rust].
Различные подсистемы ядра потребуют оберток на Rust, но они могут быть построены на основе базовой функциональности, предоставляемой в репозитории KPI для Rust.

Я экспериментировал с этим время от времени с конца 2024 года, и разработка в основном происходит в моём репозитории KPI для Rust.
Этот репозиторий также содержит make-файлы и корректировки для интеграции с man:config[8]/системой сборки.
Самый простой драйвер для разработчиков, чтобы собрать и попробовать самим, — это мой link:https://github.com/ayrtonm/freebsd-src/tree/virtio_snd[звуковой драйвер virtio].
Некоторые интерфейсы, которые он использует, находятся в стадии изменения, но драйвер достаточно функционален для воспроизведения музыки в link:https://www.qemu.org/docs/master/system/devices/virtio/virtio-snd.html[QEMU].
Эта ветка также включает обертки на Rust, которые могут быть повторно использованы для других устройств virtio или звуковых/PCM драйверов.

В настоящее время поддерживаются только x86-64 и aarch64.
Другие архитектуры, поддерживаемые LLVM, могут быть добавлены, если будет интерес, но я хотел изначально сосредоточиться лишь на нескольких вариантах использования.
Помимо QEMU, я также тестировал драйверы на Rust на оборудовании с некоторыми драйверами для link:https://github.com/ayrtonm/freebsd-src/tree/apple[ARM64 машин Apple].
Это был первоначальный вариант использования и включает в себя взятие некоторых незавершённых драйверов, с которыми я начал помогать в 2024 году, и портирование новых частей (greenfield parts) на Rust.
Это в основном низкоуровневые драйверы, но также включает драйвер HID DockChannel для клавиатуры на MacBook M2.

В какой-то момент в начале 2026 года KPI для Rust должны стать достаточно стабильными, чтобы заинтересованные разработчики могли попробовать писать с их помощью новый код.
Они не будут идеальными, но я хочу убедиться, что они работают примерно так, как ожидают существующие драйверы, а также соответствуют ожиданиям разработчиков на Rust, прежде чем запрашивать тестирование.
Надеюсь, драйверы для Apple также снова достигнут паритета с первоначальной незавершённой версией на C в первой половине 2026 года.

//
// The FreeBSD Russian Documentation Project
//
// Original EN revision (10.01.2026): a27569e15a1f400e2913829fb0cae2b98642cc1e
//