Отчёт о состоянии работ FreeBSD за третий квартал 2026
Это третий отчёт о состоянии за 2026 год, содержащий 51 запись.
Этот отчёт публикуется немного позже, чем последние несколько, но мы наконец здесь! Основная причина задержки — недавняя проблема с уязвимостями PHP: https://reviews.freebsd.org пришлось на некоторое время отключить, и, к сожалению, некоторые отчёты всё ещё рассматривались там. Но проблема теперь исправлена, и мы вернулись в график. Поскольку это произошло в октябре, не ожидайте прочитать об этом в данном отчёте о состоянии. Это будет материалом для последнего отчёта о состоянии за 2026 год: не пропустите!
Приятного чтения!
Lorenzo Salvadore, от имени команды Status
- Отчёты команд FreeBSD
- Проекты
- FreeBSD, CRA, EuroBSDCon и Security Team
- Проект подготовки к Cyber Resilience Act (CRA)
- Перечень программных компонентов FreeBSD (SBOM)
- Перечень программных компонентов FreeBSD (SBOM)
- Перевод fts(3) в Capsicum
- Полный контроль CPUID для bhyve
- Графический интерфейс управления bhyve, написанный на Freepascal/Lazarus
- Скрипт рабочего стола для bsdinstall
- Sylve — унифицированная платформа управления системой для FreeBSD
- Доступность для слабовидящих
- x11appjail: инструмент для создания, проверки, установки и запуска AppJail
- Портирование проекта rdma-core во FreeBSD
- NFS через Remote Direct Memory Access (RDMA)
- nfsdtop(8) показывает, кто использует сервер NFS
- Расширение поддержки Zoned Storage
- Улучшение LLDB во FreeBSD
- Procdesc: API отладки
- Пользовательские программы
- Ядро
- Улучшения загрузчика
- Улучшения приостановки/возобновления
- Улучшения звуковой подсистемы
- Внедрение -fbounds-safety в стек TCP/IP ядра FreeBSD
- Поддержка Netlink для туннельных интерфейсов
- Инфраструктура декодирования полезной нагрузки Netlink для инструментов трассировки FreeBSD
- Обновление LinuxKPI 802.11 и встроенной поддержки беспроводных сетей
- Серия улучшений IPv6
- Серия улучшений стека маршрутизации
- Ужесточение контракта BPF/ifnet: D59140
- Улучшения обнаружения и диагностики систем хранения
- Поддержка обнаружения splitlocks на x86
- Драйвер устройств Aquantia / Marvell aq(4)
- Архитектуры
- Облачная архитектура
- Документация
- Порты
- Краткое описание
- Состояние
- Открытые вопросы
Отчёты команд FreeBSD
Отчёты различных официальных и полуофициальных команд, представленные на Странице администрации.
Основная команда FreeBSD
Контакт: FreeBSD Core Team <core@FreeBSD.org>
Основная команда FreeBSD является руководящим органом FreeBSD.
Завершённые задачи
Мы завершили следующие задачи:
Передача дел от предыдущей основной команды
Передача дел от core.13 завершена: почтовые псевдонимы, группа LDAP и группа Phabricator теперь содержат только членов core.14.
Представители основной команды
-
Фонд FreeBSD: bapt@ (при участии большей части core@ в ежемесячных встречах с Фондом)
-
secteam: kevans@
-
clusteradm: adrian@
-
srcmgr: imp@
-
portmgr: adamw@, olivier@
-
doceng: hrs@
-
re: hrs@
Протоколы публичных встреч
Мы достигли консенсуса о публикации наших протоколов публичных встреч, которые ранее отправлялись только в рассылку разработчиков.
Опрос разработчиков FreeBSD об ИИ
bapt@ создал опрос для разработчиков FreeBSD об использовании ИИ и больших языковых моделей. Он представил результаты core@, а краткое изложение было распространено среди разработчиков. Ответили 140 разработчиков.
-
Политика: 88% хотят, чтобы проект принял политику — либо формальную, письменную политику (49%), либо базовые рекомендации и передовые практики (39%). 6% заявили, что не следует явным образом поощрять ИИ, а 3% — что существующих правил внесения вклада достаточно.
-
Код, созданный с помощью ИИ: 35% заявили, что это должно раскрываться, 25% — что он должен проверяться строже, чем человеческий код, 22% — что к нему следует относиться как к любому другому вкладу, а 16% — что его следует полностью отклонять.
-
Меры предосторожности: чаще всего запрашивались обязательная проверка человеком (78%) и обязательное раскрытие (69%), затем документация о происхождении или лицензировании (47%) и обязательное тестирование (39%).
-
Раскрытие: 84% хотят, чтобы использование ИИ раскрывалось — либо всегда (48%), либо когда его участие значительно (36%). 79% хотят, чтобы коммиты с помощью ИИ помечались в журнале коммитов, а 56% предпочитают тег с указанием инструмента.
-
Опасения: основные опасения по поводу качества — корректность и тонкие ошибки (39%), лицензирование и происхождение (26%) и сопровождаемость (21%). 75% несколько или очень обеспокоены вопросами авторского права и лицензирования.
-
Принципы: чаще всего выбирались подотчётность, означающая, что человек остаётся ответственным (91%), и прозрачность (78%), а сохранение качества кода стало целью политики, занявшей первое место.
-
Другое использование: 65% допустили бы документацию, сгенерированную ИИ, при условии проверки человеком. 54% допустили бы инструменты ИИ на инфраструктуре проекта, большинство из них с ограничениями, а 29% не допустили бы.
Комитет по опросу сообщества
Фонд FreeBSD запросил представителя core в комитете для предстоящего опроса пользователей. jrm@ вызвался добровольцем.
Заморозка репозитория Ports и перезапись истории
2026-07-20 в дерево ports был по ошибке добавлен бинарный файл размером 150 МБ. Этот коммит нарушил зеркалирование на GitHub, который отклоняет файлы размером более 100 МБ, и добавил в историю репозитория файл с сомнительным лицензированием. 2026-07-21 core@ решил заморозить репозиторий ports, чтобы ограничить количество коммитов, которые потребуется переписать, и разработал план совместно с clusteradm@, portmgr@ и администраторами Git. kevans@ опубликовал подписанное заявление 2026-07-22, чтобы объяснить заморозку и дать понять, что дерево ports не было скомпрометировано. Проблемные коммиты были удалены путём перезаписи истории основной ветки, а сборки пакетов со старых хешей были остановлены. механизмы контроля на стороне сервера теперь предотвращают повторение подобного.
Заявление о EU Cyber Resilience Act (CRA)
Фонд FreeBSD попросил core@ признать его в качестве open source steward.
Мы остановились на заявлении о поддержке, которое было опубликовано в рассылках announce и developers.
Релизы
Мы рассмотрели черновик анонса для 14.5-RELEASE и предложенный график для 15.2-RELEASE.
Конфликты между разработчиками и участниками
Мы разбирались с конфликтами между разработчиками и внешними участниками. Решения были доведены до сведения вовлечённых сторон.
Политика commit bit
jrm@ закоммитил разъяснение политики commit bit.
Переписка
Мы обработали переписку по ряду тем, включая текущую и будущую работу над политикой ИИ и влияние возросшего сбора данных с помощью ИИ/ботов на инфраструктуру FreeBSD.
Текущая работа
Роль секретаря основной команды
Мы определяем объём оплачиваемой роли секретаря, которая может обслуживать весь проект, а не только core@. В качестве ориентира используются примеры из других некоммерческих организаций и рабочих групп FreeBSD. Достигнут определённый консенсус в отношении того, чтобы содержимое этой роли было приближено к роли помощника по управлению проектами. Предложение было передано в Фонд FreeBSD, ожидается обратная связь.
Политика в отношении ИИ
imp@ создал рабочую группу по ИИ, состоящую из участников с разными мнениями по этой теме. Рабочая группа будет использовать результаты опроса разработчиков в качестве входных данных для политики использования ИИ/больших языковых моделей. Установочная встреча группы состоится 7 октября. Окончательные отчёты ожидаются в Q4.
Устав и сроки полномочий core
Мы продолжаем работу предыдущей основной команды над введением поэтапных сроков занятия должностей. Мы считаем себя переходной основной командой и планируем задействовать положение устава об этапных сроках, при этом изменение вступит в силу в 2027 году. Перед выборами 2027 года мы определим, какие члены уйдут через год, а какие прослужат полный двухлетний срок; освободившиеся места будут заполнены на этих выборах.
Упорядочение политики
Ведутся работы по модернизации и централизации документации по политикам проекта FreeBSD, которая в настоящее время непоследовательна, плохо видима и опирается на неписаные внутрикомандные практики. imp@ работает над консолидацией существующих руководств, разрешением противоречий в политиках между группами проекта и формальной фиксацией давних традиций. Кроме того, эта инициатива выявит пробелы, где необходимы новые формальные политики для обеспечения плавной и эффективной работы. Мы надеемся завершить это к концу Q1 2027.
Ожидания от представителей
Мы документируем обязанности каждой роли представителя и опубликуем документ, когда он будет готов.
Организация рабочего процесса
Мы оцениваем инструменты для отслеживания наших задач, документов и переписки. Мы начали использовать экземпляр CryptPad, настроенный bapt@ и clusteradm@.
Политика в отношении допустимого контента для пространств проекта
Мы обсуждали запись норм проекта о том, какой контент допустим для пространств проекта, таких как wiki и метаданные репозитория. За годы у нас сложилась традиция избегать политики, религии и других спорных вопросов, не связанных с проектом, и нам нужно записать это и привести в соответствие с нормами open source.
Структура portmgr
Мы обсуждаем структуру portmgr@ и то, как перестроить команду.
Планирование администрирования кластера
adrian@ и некоторые члены clusteradm@ готовят бюджет, расставляют приоритеты в работе, улучшают документацию и процессы и планируют набрать новых участников команды в 2027 году.
Возвращающиеся разработчики
У srcmgr@ есть новая политика для возвращающихся разработчиков, по которой от возвращающихся разработчиков требуется некоторая недавняя работа или предоставление планов перед восстановлением доступа, и у portmgr@ есть нечто подобное. Мы обсуждаем, имеет ли смысл согласовать эти политики между командами.
Запросы о конфиденциальности
core@ получил запрос на удаление данных в соответствии с GDPR, касающийся сообщений в рассылках более чем двадцатилетней давности. Удаление контента из публичных архивов рассылок непрактично, особенно для архивов, которые проект не контролирует. У проекта есть политика конфиденциальности, которую следует расширить, чтобы охватить рассылки, Bugzilla и другие сервисы. Мы сообщили об этом человеку, запросившему удаление.
Встречи core и Фонда FreeBSD
Ежемесячные встречи запланированы до декабря 2026 года.
Bay Area Vendor Summit в ноябре
Мы планируем короткое вступление и обновление, за которыми последует сессия вопросов и ответов.
FreeBSD Foundation
Ссылки:
FreeBSD Foundation URL: https://freebsdfoundation.org/
Технологическая дорожная карта URL: https://freebsdfoundation.org/blog/technology-roadmap/
Пожертвовать URL: https://freebsdfoundation.org/donate/
Программа партнёрства Фонда URL: https://freebsdfoundation.org/our-donors/freebsd-foundation-partnership-program/
FreeBSD Journal URL: https://freebsdfoundation.org/journal/
Мероприятия Фонда URL: https://freebsdfoundation.org/our-work/events/
Контакт: Deb Goodkin <deb@FreeBSDFoundation.org>
FreeBSD Foundation — это некоммерческая организация в соответствии с 501(c)(3), посвящённая продвижению FreeBSD посредством как технической, так и нетехнической поддержки. Полностью финансируемый за счёт пожертвований, Фонд поддерживает разработку программного обеспечения, инфраструктуру, безопасность и усилия по сотрудничеству; организует мероприятия и саммиты разработчиков; предоставляет образовательные ресурсы; и представляет Проект FreeBSD в юридических вопросах.
Улучшения ОС
В третьем квартале 2026 года при спонсорской поддержке FreeBSD Foundation было сделано 530 коммитов в src, 82 в ports и 19 в doc.
Обратитесь к этим записям отчёта, описывающим большую часть этой спонсируемой работы по разработке:
Другие важные моменты:
-
Фонд поддерживает два проекта: проект поддержки и удобства использования ноутбуков (в сотрудничестве с Quantum Leap Research) и Проект подготовки к Cyber Resilience Act (CRA).
-
Для получения справочной информации о проекте поддержки и удобства использования ноутбуков обратитесь к квартальному отчёту о состоянии за 2025Q1.
-
FreeBSD завершила участие в Google Summer of Code (GSoC) 2026. Информацию о каждом проекте см. на вики-странице проектов FreeBSD Summer of Code 2026.
Популяризация
В третьем квартале 2026 года наши усилия по популяризации были сосредоточены на расширении образовательного видеоконтента, взаимодействии с сообществом FreeBSD и подготовке к предстоящему FreeBSD Vendor Summit. Мы также продолжали освещать людей, проекты и инициативы, которые поддерживают рост и долгосрочный успех FreeBSD. Вот некоторые из способов, которыми Фонд популяризировал FreeBSD в третьем квартале 2026 года:
-
Представлял FreeBSD на EuroBSDCon 2026, где Alice Sowerby, менеджер программ в FreeBSD Foundation, вместе с Pierre Pronchery и Peter Hansteen провела полнодневный учебный курс The Night Before CRAmas — Why EU Regulations Are a Gift to Open Source, охватывающий EU Cyber Resilience Act (CRA) и его последствия для поставщиков FreeBSD.
-
Опубликованы следующие блоги и видео, помогающие информировать и просвещать сообщество:
-
FreeBSD Foundation приветствует нового члена совета: Dave Cottlehuber
-
Стажёр FreeBSD Foundation Jim Huang Chen о поддержке Raspberry Pi и открытом исходном коде
-
Стажёр FreeBSD Foundation Sourojeet Adhikari о переносе ROCm во FreeBSD
-
Обучение в масштабе: стажёр FreeBSD Foundation Nimish Jain об изучении кодовой базы FreeBSD
-
Опубликованы июньский/июльский выпуск новостей и августовский/сентябрьский выпуск новостей FreeBSD Foundation за 2026 год.
-
Выпущены апрельский/майский/июньский и июльский/августовский/сентябрьский выпуски FreeBSD Journal за 2026 год с HTML-версиями статей.
Непрерывная интеграция и улучшение рабочих процессов
Фонд поддерживает штатного сотрудника, посвящённого улучшению системы непрерывной интеграции и тестовой инфраструктуры Проекта.
Юридические вопросы/ИС FreeBSD
Фонд владеет товарными знаками FreeBSD, и наша обязанность — защищать их. Мы также предоставляем юридическую поддержку основной команде для расследования возникающих вопросов.
Перейдите на https://freebsdfoundation.org, чтобы узнать больше о том, как мы поддерживаем FreeBSD и как мы можем помочь вам!
Команда подготовки релизов FreeBSD
Ссылки:
Анонс FreeBSD 14.5-RELEASE URL: https://www.freebsd.org/releases/14.5R/announce/
График FreeBSD 15.2-RELEASE URL: https://www.freebsd.org/releases/15.2R/schedule/
Релизы FreeBSD URL: https://download.freebsd.org/releases/ISO-IMAGES/
Снимки разработки FreeBSD URL: https://download.freebsd.org/snapshots/ISO-IMAGES/
Контактное лицо: Команда управления релизами FreeBSD <re@FreeBSD.org>
Команда управления релизами FreeBSD отвечает за установление и публикацию графиков выпуска официальных релизов FreeBSD, объявление заморозок кода и поддержку соответствующих веток, среди прочего.
Команда управляла процессом выпуска 14.5-RELEASE, что привело к официальной сборке RELEASE и объявлению в сентябре. Началось планирование предстоящего 15.2-RELEASE, который должен выйти в декабре.
Команда управления релизами продолжила предоставление еженедельных промежуточных сборок для разработчиков для веток main, stable/15 и stable/14.
Команда администрирования кластера
Ссылки:
Члены команды администрирования кластера URL: https://www.freebsd.org/administration/#t-clusteradm
Контакт: Cluster Administration Team <clusteradm@FreeBSD.org>
Контакт: Philip Paeps <philip@FreeBSD.org>
Члены команды администрирования кластера FreeBSD отвечают за управление машинами, на которые опирается проект для синхронизации своей распределённой работы и коммуникаций.
В этом квартале команда занималась следующим:
-
Регулярная поддержка учётных записей пользователей FreeBSD.org.
-
Регулярная поддержка дисков и комплектующих (и их замена) для всех физических хостов и зеркал.
-
Обновление программного обеспечения кластера.
-
Координация общедоступных зеркал.
-
Перезапись истории репозитория Ports.
-
Частые вмешательства для предотвращения отказа в обслуживании со стороны ботов.
-
Улучшения cgit в нашей глобальной сети зеркал.
Обновление кластера
Работа по обновлению программного обеспечения, работающего на машинах кластера FreeBSD.org, продолжается. Мы начали размещать производственные нагрузки на stable/15. В рамках этой работы некоторые нагрузки перемещаются на другие машины. По состоянию на конец квартала работа всё ещё продолжается.
Команда clusteradm обновляет производственные сборочные машины пакетов (около 35 физических машин) примерно с шести-восьминедельной периодичностью. Эти машины работают под управлением промежуточных версий FreeBSD current.
Остальные машины обновляются по мере необходимости с учётом степени их уязвимости и наличия исправлений безопасности.
На момент написания этого текста в кластере 143 физические машины. У нас 45 машин на current, 33 на stable/15 и 59 на stable/14.
Большинство оставшихся установленных версий stable/13 будут обновлены до stable/15 или выведены из эксплуатации.
12.x: Regular 0, Jails 7
13.x: Regular 6, Jails 28
14.x: Regular 59, Jails 223
15.x: Regular 33, Jails 60
>16.x: Regular 45, Jails 6
Total: Regular 143, Jails 324
Total installations: 467
Running -RELEASE|{-p*}: 0
Total geographic sites: 14
Официальные зеркала FreeBSD
Текущие местоположения: Австралия, Бразилия, Япония (два полных зеркальных сайта), Малайзия, Южная Африка, Швеция, Тайвань и Соединённые Штаты Америки — Калифорния, Чикаго, Нью-Джерси и Вашингтон.
Наше зеркало на Тайване не работает уже продолжительное время. Новый зеркальный сайт на Тайване развёртывается в начале 2026Q4.
Один из наших зеркальных сайтов в Японии получит полное обновление аппаратного обеспечения в 2026Q4.
Аппаратное обеспечение и сетевое подключение были любезно предоставлены:
-
Cloud and SDN Laboratory at BroadBand Tower, Inc
-
Department of Computer Science, National Yang Ming Chiao Tung University
Новые официальные зеркала всегда приветствуются. Мы отметили преимущества размещения одиночных зеркал на точках обмена интернет-трафиком по всему миру, что подтверждается нашими существующими зеркалами в Австралии, Бразилии и Южной Африке. Если вы связаны с какой-либо организацией или знаете организации, готовые спонсировать одиночный зеркальный сервер, пожалуйста, свяжитесь с нами. Мы особенно заинтересованы в локациях в Европе.
Смотрите generic mirrored layout для полных спецификаций зеркальных сайтов и tiny-mirror для одиночного зеркального сайта.
Перезапись истории репозитория Ports
В июле коммиттер непреднамеренно отправил большой бинарный файл в репозиторий ports, что потребовало заморозки и последующей перезаписи истории. Команда clusteradm перезаписала историю дерева ports и обеспечила видимость новой истории на всех наших внутренних и внешних зеркалах в кратчайшие возможные сроки. Были внесены улучшения в нашу инфраструктуру Git и автоматизацию, чтобы предотвратить повторение этого.
Сбор данных большими языковыми моделями
Инфраструктура проекта FreeBSD продолжает подвергаться постоянным атакам со стороны сборщиков данных, собирающих обучающие данные для больших языковых моделей («ИИ»). Компании, обучающие эти модели, в значительной степени перенесли операции по сбору данных со своей собственной — легко идентифицируемой — инфраструктуры на ботнеты («резидентные прокси»), что затрудняет их блокировку на сетевых границах без значительного сопутствующего ущерба. Команда администрирования кластера снова потратила значительное количество времени в этом квартале на смягчение последствий этих распределённых атак типа «отказ в обслуживании».
Улучшения cgit в нашей глобальной сети зеркал
https://cgit.FreeBSD.org является особенно популярной целью для обучающих вероятностное вредоносное ПО. Мы испытываем постоянный поток сборщиков данных, работающих на заражённых компьютерах и устройствах по всему миру. Чтобы распределить нагрузку от этих атак, команда clusteradm увеличила количество узлов cgit на наших зеркалах. В этом квартале мы развернули дополнительные зеркала https://cgit.FreeBSD.org в Калифорнии и в Париже.
Спонсор: Анонимные частные лица и компании
Спонсор: https://github.com/sponsors/ppaeps
Команда Bugmeister
Ссылки:
FreeBSD Bugzilla URL: https://bugs.freebsd.org/
Общее число открытых ошибок во времени URL: https://bugs.freebsd.org/bugzilla/page.cgi?id=showreport.html&type=total_open_bugs_over_time
Контакт: Bugmeister <bugmeister@FreeBSD.org>
Решения, требующие отзывов сообщества
В https://wiki.freebsd.org/Bugmeister/ActionItems был добавлен новый раздел:
link:https://wiki.freebsd.org/Bugmeister/ActionItems#Decisions_That_Require_Community_Feedback[]
Комментарии приветствуются. Список неполон.
Пункт №1 — главный приоритет, проблема веб-краулеров.
tl:dr; мы знаем о ней; мы потратили немало времени на её анализ; поскольку нам известна её причина, симптомы не особенно интересны; и это было поднято и признано серьёзной проблемой для/со стороны core@. Сами Bugmeister’ы здесь мало что ещё могут сделать.
Желающие наказать себя могут прочитать: https://wiki.freebsd.org/MarkLinimon/Crawlers
Пункт №2 — выработка политики в отношении вкладов, производных от LLM.
Это зависит от отзыва portmgr, который Mark Linimon запросил довольно давно.
Пункт №3 принадлежит Mark Linimon.
Обзор таков: содержимое патчей в базе данных Bugzilla в гораздо лучшем состоянии, чем два года назад, и Mark продолжает пытаться сортировать их еженедельно; но также и то, что Mark постоянно отвлекается от этой работы другими вопросами.
Пункт №4 — конференц-звонки.
Мы всё ещё не настроили еженедельные конференц-звонки или какой-либо иной способ координации. Без этого эти вопросы, как правило, просто остаются нерешёнными. Нам определённо пригодилась бы здесь помощь.
Статистика
В этом квартале мы немного увеличили число Problem Report. Однако пропускная способность гораздо выше, особенно для портов. Это может быть связано с настройками автоуведомителя, которые мы внедрили ранее.
Для дерева src за последние 90 дней мы получили 329 новых Problem Report и закрыли 269. Для портов соответствующие показатели составили 2208 и 2138.
В настоящее время мы не ведём статистику о том, сколько из них фактически приводят к коммитам, хотя полагаем, что число это немаловажное.
Mark Linimon взял на себя долгосрочный проект по обеспечению того, чтобы все представленные патчи применялись. Однако он не претендует на роль QA-специалиста и на способность самостоятельно оценивать их пригодность. Здесь он не в своей стихии.
Общий вывод таков: благодаря просвещению пользователей в этом году мы получаем Problem Report более высокого качества. В частности, те из них, что содержат патчи, проверяются на применимость в течение одной-двух недель после поступления и при необходимости исправляются.
Мы создали множество новых учётных записей Bugzilla по запросу пользователей. Число запросов на новые учётные записи в этом квартале возросло. В третьем квартале 2026 года мы добавили 164, что чуть меньше двух в день.
Дополнительные обновления
Были исправлены некоторые досадные проблемы с правами доступа к скриптам в производственной среде. Это вновь включило еженедельные отчёты.
Версия базовой системы 14.3 была отключена для новых ошибок, а версия 14.5-STABLE была создана.
Незначительные обновления были внесены в:
Следующая страница была выделена из вышеуказанных:
Спасибо Alexander Ziaee и многим другим, кто помог привести нас к текущему состоянию.
Проекты
Проекты, охватывающие несколько категорий — от ядра и пользовательских инструментов до Коллекции портов или внешних проектов.
FreeBSD, CRA, EuroBSDCon и Security Team
Ссылки:
Alpha-Omega — проект Linux Foundation URL: https://alpha-omega.dev
FreeBSD Foundation URL: https://freebsdfoundation.org
Информация о безопасности FreeBSD URL: https://www.freebsd.org/security/
Контакт: Pierre Pronchery <pierre@freebsdfoundation.org>
Это мой второй квартал в FreeBSD Foundation в рамках инициативы Security Engineers In Residence (SEIRs) от Alpha-Omega. Благодаря вкладу, полученному от Security Team, я интегрировал промежуточный экземпляр Forgejo с самостоятельно размещённой LLM, продемонстрировав потенциал новых возможностей для Security Team без нарушения каких-либо требований конфиденциальности. Эта система способна обрабатывать поступающие отчёты об уязвимостях безопасности путём:
-
Подготовки первоначального ответа для отправителя
-
Выдачи немедленного автоматизированного анализа представленной проблемы
-
Подготовки шаблона для возможного Security Advisory (SA) или Errata Notice (EN)
-
Проверки черновиков SA или EN на соответствие
-
Автоматического подписания итоговых SA, EN и соответствующих материалов
-
Загрузки результата в нужное место
Это реализовано как типичная современная система CI/CD с инструментом runner от Forgejo в виде рабочего процесса, совместимого с GitHub. Цель — задействовать возможности LLM в наших процессах в соответствии с текущим рабочим процессом, не жертвуя ни конфиденциальностью, ни необходимостью проверки качества со стороны нас, смертных членов команды безопасности.
Всё ещё требуется значительная доработка, но соответствующий экземпляр в производственной среде должен быть полезен даже без части с LLM. Ожидается, что автоматизация более рутинных задач рабочего процесса поможет нам справляться с постоянным потоком поступающих отчётов и расширить возможности от наших отдельных умов на всю команду в целом.
Параллельно я не жалел усилий для соответствия европейскому Cyber Resilience Act (CRA) для Проекта FreeBSD. После импорта pkgconf в базовую систему FreeBSD в прошлом квартале я прошёл через ряд итераций фреймворка, генерирующего артефакты Software Bill of Material (SBOM) во время сборки. Подготовленный совместно с Tuukka Pasanen, фреймворк доступен для рецензирования в D56474, и теперь я считаю его серьёзным кандидатом на интеграцию. Хочу поблагодарить всех, кто уже предоставлял отзывы! Это чрезвычайно помогло найти баланс, который ощущается более правильным, чем когда-либо ранее, — по крайней мере, для меня. Отдельный запрос на рецензирование метаданных теперь также доступен — D60352, который в настоящее время генерирует в общей сложности 218 артефактов для сборки amd64. Баланс состоит примерно из одного артефакта на генерируемый базовый пакет, а также одного артефакта на каждую библиотеку, фактически используемую во время сборки. Таким образом, можно отследить полную цепочку зависимостей, сохраняя гранулярность близкой к отдельным сторонним проектам или внутренним компонентам.
Я также хотел бы выразить благодарность Alice Sowerby и Peter Hansteen за прекрасный семинар по соответствию CRA во время EuroBSDCon 2026 в Брюсселе в сентябре 2026 года. Если вы его пропустили, вам может повезти, поскольку мы готовимся провести его снова на будущем мероприятии. Не стесняйтесь обращаться к нам, если вы заинтересованы, указав ваше примерное местоположение и гибкость в поездках, чтобы мы могли получить более точное представление о времени и местах, к которым стоит стремиться.
Спонсор: Alpha-Omega, Фонд FreeBSD
Проект подготовки к Cyber Resilience Act (CRA)
Ссылки:
Cyber Resilience Act Readiness URL: https://github.com/FreeBSDFoundation/all-projects/tree/main/Cyber%20Resilience%20Act%20Readiness
Фонд в течение 2026 года ведёт проект по активной подготовке FreeBSD Foundation, Проекта и сообщества к EU Cyber Resilience Act. Есть шесть основных направлений: безопасность и обработка уязвимостей, инструментарий SBOM, публичная документация, взаимодействие сообщества с законодателями, публичный репозиторий проекта и коммуникации.
В третьем квартале проект продолжал переходить от планирования к реализации, с особым упором на готовность к требованиям CRA по сообщению об уязвимостях и инцидентах, которые вступили в силу для производителей 11 сентября 2026 года.
Фонд создал политику кибербезопасности и протокол отчётности CRA, чтобы помочь Фонду выполнять свои обязательства как распорядителя открытого программного обеспечения. Оба документа разработаны с участием Основной Команды (Core Team) и Команды инженера по безопасности (Security Team) FreeBSD и описывают, как Фонд будет работать с Проектом и реагировать, если для Фонда как распорядителя сработают обязательства по отчётности CRA. Отметим, что Европейская комиссия разъяснила, что обязательства по отчётности для распорядителей начинаются 11 декабря 2027 года. На данный момент эти документы останутся внутренними ресурсами.
Техническая работа над инструментарием Software Bill of Materials (SBOM) продолжалась в виде разработки, тестирования и рецензирования. Предлагаемый подход к генерации SBOM для базовой системы FreeBSD уточняется в ответ на отзывы и всё ещё требует дальнейшего рецензирования и сопутствующих изменений перед интеграцией. Работа также продвигается в более широкой экосистеме SBOM — как через Фонд, так и в сообществе, — включая планируемую поддержку портов, совместимую со SPDX информацию о лицензиях, а также поддержку SBOM CycloneDX и SPDX в pkgconf.
Публичное руководство по CRA теперь доступно на веб-сайте FreeBSD Foundation: оно содержит обзор законодательства наряду с отдельными руководствами для бизнес-пользователей FreeBSD и членов сообщества. Это даёт пользователям FreeBSD более чёткую информацию о том, как CRA может их затронуть, где могут лежать их обязанности и как работать с FreeBSD для выполнения своих обязательств по CRA.
Фонд продолжал взаимодействовать с сообществом FreeBSD и более широким сообществом открытого исходного кода, особенно с рабочей группой Open Regulatory Compliance (ORC) фонда Eclipse Foundation. На EuroBSDCon 2026 мы совместно с Peter Hansteen провели однодневный учебный курс по CRA и SBOM. Мы также представили обновление по этому проекту на FreeBSD Developer Summit.
Обновления проекта и заметки о встречах продолжают публиковаться в публичном репозитории проекта. При переходе в четвёртый квартал основное внимание будет уделено продвижению реализации SBOM и вышестоящей работы, улучшению обнаруживаемости нашего публичного руководства по CRA, а также работе с Проектом FreeBSD по выявлению ключевых потребностей производителей, связанных с их обязательством по CRA внедрить безопасный жизненный цикл программного обеспечения к 11 декабря 2027 года.
Перечень программных компонентов FreeBSD (SBOM)
Ссылки:
sys/arm/arm/busdma_machdep.c: исправление SPDX-License-Identifier URL: https://reviews.freebsd.org/D59528
sys/powerpc/powerpc/busdma_machdep.c: исправление SPDX-License-Identifier URL: https://reviews.freebsd.org/D59527
sys/powerpc/powerpc/busdma_bounce.c: исправление SPDX-License-Identifier URL: https://reviews.freebsd.org/D59526
sys/x86/x86/busdma_machdep.c: исправление SPDX-License-Identifier URL: https://reviews.freebsd.org/D59525
sys/x86/x86/busdma_bounce.c: исправление SPDX-License-Identifier URL: https://reviews.freebsd.org/D59524
sys/kern/subr_busdma_bounce.c: исправление SPDX-License-Identifier URL: https://reviews.freebsd.org/D59523
D60352 URL: https://reviews.freebsd.org/D60352
D60441 URL: https://reviews.freebsd.org/D60441
Открытые upstream PR по SPDX license identifier:
ATF PR#128 URL: https://github.com/freebsd/atf/pull/128
bmake NetBSD GNATS#60308 URL: https://gnats.netbsd.org/60308
LDNS ISSUE#305 URL: https://github.com/NLnetLabs/ldns/issues/305
Less PR#792 URL: https://github.com/gwsw/less/pull/792
Libarchive PR#3129 URL: https://github.com/libarchive/libarchive/pull/3129
LibCBOR ISSUE#430 URL: https://github.com/PJK/libcbor/issues/430
Libevent ISSUE#1864 URL: https://github.com/libevent/libevent/issues/1864
LibPCAP PR#1689 URL: https://github.com/the-tcpdump-group/libpcap/pull/1689
LibUCL PR#386 URL: https://github.com/vstakhov/libucl/pull/386
TCSH Mantis#777 URL: https://bugs.astron.com/view.php?id=777
Контакт: Tuukka Pasanen <tuukka.pasanen@ilmi.fi>
Работа над перечнем программных компонентов FreeBSD (SBOM) продолжалась в третьем квартале 2026 года. Наконец, включение SBOM в исходники FreeBSD обретает реальные очертания и, как мы надеемся, будет завершено в четвёртом квартале. Благодаря Pierre Pronchery идёт обзор в Phabricator: D60352 для исходников FreeBSD. Кроме того, для портов есть обзор: D60441, сделанный Mathieu Arnold.
В качестве вариантов вывода SBOM сейчас доступны SPDX 2.2 и Lite 3.0.1.
Инструмент CycloneDX SBOM находится в разработке и всё ещё требует доработки, чтобы быть столь же качественным, как вывод SPDX.
В будущем все варианты вывода SBOM будут объединены в одном инструменте под названием sbomtool, и, поскольку оба решения полагаются на pkgconf, они получат поддержку CycloneDX, когда она появится в исходниках FreeBSD.
Кроме того, были приняты несколько новых SPDX License Identifiers. Все три присутствуют в исходниках FreeBSD: * BSD-2-Clause-pos-unchanged * BSD-Source-Code-no-disclaimer * BSD-Source-alt-GPL
На рассмотрении находится несколько обновлений с BSD-2-Clause на BSD-Source-beginning-file:
-
sys/arm/arm/busdma_machdep.c: исправление SPDX-License-Identifier
-
sys/powerpc/powerpc/busdma_machdep.c: исправление SPDX-License-Identifier
-
sys/powerpc/powerpc/busdma_bounce.c: исправление SPDX-License-Identifier
-
sys/x86/x86/busdma_machdep.c: исправление SPDX-License-Identifier
-
sys/x86/x86/busdma_bounce.c: исправление SPDX-License-Identifier
-
sys/kern/subr_busdma_bounce.c: исправление SPDX-License-Identifier
Кроме того, многие сторонние репозитории получили SPDX License Identifiers, например libxo (спасибо Juniper за это), и другие. Некоторые проекты не хотят добавлять заголовки, а некоторые всё ещё находятся в активной разработке.
Если вы хотите помочь в этой работе:
-
Проверяйте изменения в Phabricator. Исправления SPDX License Identifier находятся на очень низком уровне и легко поддаются проверке.
-
Когда станет доступен pkgconf CycloneDX, помогите с его проверкой и тестированием.
Спонсор: Фонд FreeBSD
Перечень программных компонентов FreeBSD (SBOM)
Ссылки:
sys/arm/arm/busdma_machdep.c: исправление SPDX-License-Identifier URL: https://reviews.freebsd.org/D59528
sys/powerpc/powerpc/busdma_machdep.c: исправление SPDX-License-Identifier URL: https://reviews.freebsd.org/D59527
sys/powerpc/powerpc/busdma_bounce.c: исправление SPDX-License-Identifier URL: https://reviews.freebsd.org/D59526
sys/x86/x86/busdma_machdep.c: исправление SPDX-License-Identifier URL: https://reviews.freebsd.org/D59525
sys/x86/x86/busdma_bounce.c: исправление SPDX-License-Identifier URL: https://reviews.freebsd.org/D59524
sys/kern/subr_busdma_bounce.c: исправление SPDX-License-Identifier URL: https://reviews.freebsd.org/D59523
D60352 URL: https://reviews.freebsd.org/D60352
D60441 URL: https://reviews.freebsd.org/D60441
Открытые upstream PR по SPDX license identifier:
ATF PR#128 URL: https://github.com/freebsd/atf/pull/128
bmake NetBSD GNATS#60308 URL: https://gnats.netbsd.org/60308
LDNS ISSUE#305 URL: https://github.com/NLnetLabs/ldns/issues/305
Less PR#792 URL: https://github.com/gwsw/less/pull/792
Libarchive PR#3129 URL: https://github.com/libarchive/libarchive/pull/3129
LibCBOR ISSUE#430 URL: https://github.com/PJK/libcbor/issues/430
Libevent ISSUE#1864 URL: https://github.com/libevent/libevent/issues/1864
LibPCAP PR#1689 URL: https://github.com/the-tcpdump-group/libpcap/pull/1689
LibUCL PR#386 URL: https://github.com/vstakhov/libucl/pull/386
TCSH Mantis#777 URL: https://bugs.astron.com/view.php?id=777
Контакт: Tuukka Pasanen <tuukka.pasanen@ilmi.fi>
Работа над перечнем программных компонентов FreeBSD (SBOM) продолжалась в третьем квартале 2026 года. Наконец, включение SBOM в исходники FreeBSD обретает реальные очертания и, как мы надеемся, будет завершено в четвёртом квартале. Благодаря Pierre Pronchery идёт обзор в Phabricator: D60352 для исходников FreeBSD. Кроме того, для портов есть обзор: D60441, сделанный Mathieu Arnold.
В качестве вариантов вывода SBOM сейчас доступны SPDX 2.2 и Lite 3.0.1.
Инструмент CycloneDX SBOM находится в разработке и всё ещё требует доработки, чтобы быть столь же качественным, как вывод SPDX.
В будущем все варианты вывода SBOM будут объединены в одном инструменте под названием sbomtool, и, поскольку оба решения полагаются на pkgconf, они получат поддержку CycloneDX, когда она появится в исходниках FreeBSD.
Кроме того, были приняты несколько новых SPDX License Identifiers. Все три присутствуют в исходниках FreeBSD: * BSD-2-Clause-pos-unchanged * BSD-Source-Code-no-disclaimer * BSD-Source-alt-GPL
На рассмотрении находится несколько обновлений с BSD-2-Clause на BSD-Source-beginning-file:
-
sys/arm/arm/busdma_machdep.c: исправление SPDX-License-Identifier
-
sys/powerpc/powerpc/busdma_machdep.c: исправление SPDX-License-Identifier
-
sys/powerpc/powerpc/busdma_bounce.c: исправление SPDX-License-Identifier
-
sys/x86/x86/busdma_machdep.c: исправление SPDX-License-Identifier
-
sys/x86/x86/busdma_bounce.c: исправление SPDX-License-Identifier
-
sys/kern/subr_busdma_bounce.c: исправление SPDX-License-Identifier
Кроме того, многие сторонние репозитории получили SPDX License Identifiers, например libxo (спасибо Juniper за это), и другие. Некоторые проекты не хотят добавлять заголовки, а некоторые всё ещё находятся в активной разработке.
Если вы хотите помочь в этой работе:
-
Проверяйте изменения в Phabricator. Исправления SPDX License Identifier находятся на очень низком уровне и легко поддаются проверке.
-
Когда станет доступен pkgconf CycloneDX, помогите с его проверкой и тестированием.
Спонсор: Фонд FreeBSD
Перевод fts(3) в Capsicum
Контакт: Jitendra Bhati <jitendrabhati2026@gmail.com>
Контакт: Alan Somers <asomers@FreeBSD.org>
Библиотека обхода каталогов fts(3), используемая find(1), rm(1), ls(1), chflags(1) и другими утилитами, исторически полагалась на системные вызовы на основе путей, которые не работают в режиме возможностей capsicum(4).
В этом квартале fts получила новую точку входа fts_openat(), принимающую предварительно открытый дескриптор каталога, поле fts_dirfd для каждой записи и преобразование её внутренностей в операции относительно файловых дескрипторов, с сохранением совместимости ABI посредством версионирования символов ELF.
Теперь обход может выполняться полностью внутри песочницы Capsicum.
В качестве первого потребителя chflags был переведён в Capsicum для выполнения своей работы через chflagsat() над дескрипторами, открытыми до входа в режим возможностей, что ограничивает его иерархиями, указанными в его командной строке.
Эта работа была выполнена в рамках проекта Google Summer of Code 2026.
Спонсор: Google Summer of Code 2026
Полный контроль CPUID для bhyve
Контакт: Hans Rosenfeld <rosenfeld@grumpf.hope-2000.org>
Обзор проекта
Текущая работа над этим проектом направлена на интеграцию существующей концептуальной проработки в FreeBSD и на добавление следующих функций удобства использования:
-
удобный для пользователя метод конфигурации для переопределения отдельных битов, частей или даже целых функций CPUID по мере необходимости, сохраняя при этом остальную информацию CPUID хост-системы или предопределённую конфигурацию CPUID
-
удобный для пользователя метод конфигурации для подписи гипервизора, сообщаемой bhyve
-
набор предопределённых конфигураций CPUID на основе общих уровней архитектуры x86, возможно, также включающий набор данных CPUID для нескольких реальных моделей CPU, и удобный для пользователя метод конфигурации для выбора одной из них для виртуальной машины
Изменения за последний квартал
Изменения в синтаксисе конфигурации bhyve
В последний момент произошло изменение синтаксиса конфигурации.
Вместо использования двух разных опций cpuid.enable и cpuid.disable для включения или отключения функций по имени, теперь есть единая опция cpuid.features.
Эта опция принимает имя функции, либо с префиксом - для их отключения, либо с префиксом + или без префикса для включения функции.
Предопределённые модели CPU
В дополнение к абстрактным моделям архитектуры x86, ряд моделей CPU был реализован в виде предопределённых фрагментов конфигурационных файлов. В настоящее время это заканчивается поколением Icelake для Intel и поколением Bulldozer для AMD.
Введено множество дополнительных опций конфигурации cpuid для упрощения написания конфигураций моделей CPU, таких как cpuid.brand для строки бренда CPU или cpuid.vendor для переопределения идентификации производителя.
Проверки ограничений CPUID
Проверки ограничений были расширены, чтобы позволить определять битовые маски для значений, которые могут быть только численно понижены.
Введена новая опция конфигурации cpuid.check для переопределения действия по умолчанию в отношении проверок ограничений.
Она принимает значения fail (по умолчанию), warn, none и fix.
Конфигурация кэша
Конфигурации кэша по умолчанию были добавлены в модели архитектуры x86 и во все предопределённые модели CPU.
Идентификация гипервизора
Новая опция cpuid.hypervisor позволяет легко переопределить идентификацию гипервизора в функции CPUID 0x40000000.
Реальная идентификация гипервизора и флаги функций по-прежнему могут быть запрошены гостями из функции CPUID 0x40000100.
Планы на следующий квартал
-
Добавить больше современных предопределённых моделей CPU
-
Обновить страницы руководства bhyve(8), bhyve_config(5) и bhyvectl(8).
-
Провести рецензирование всего комплекса работ и зафиксировать его в FreeBSD.
Графический интерфейс управления bhyve, написанный на Freepascal/Lazarus
Ссылки:
Bhyvemgr URL: https://github.com/alonsobsd/bhyvemgr/
Bhyvemgrd URL: https://github.com/alonsobsd/bhyvemgrd/
Контакт: José Alonso Cárdenas Márquez <acm@FreeBSD.org>
Bhyvemgr — это графический интерфейс управления bhyve, написанный на Freepascal/Lazarus во FreeBSD. Ему требуется набор инструментов, большинство из которых установлено в базовой системе, а некоторые устанавливаются из портов/пакетов. Основная цель — быть настольным приложением, ориентированным на пользователей настольных систем, чтобы легко и быстро настраивать и запускать виртуальные машины на хостах FreeBSD.
Начиная с версии v2.0.0, bhyvemgr был переведён на клиент-серверную архитектуру. В результате был разработан серверный компонент. Этот новый компонент называется bhyvemgrd.
Bhyvemgrd поддерживает два способа выполнения привилегированных задач: mac_do/mdo (FreeBSD >= 140000) и mac_do/setcred/exec_paths (только для FreeBSD >= 1501501). Сам процесс выполняется под непривилегированным пользователем bhyvemgrd.
За последние два квартала было внесено множество исправлений ошибок и улучшений в Bhyvemgr.
Вот некоторые из основных добавленных возможностей:
-
Добавлены новые опции операционной системы
-
Добавлена поддержка использования VNC unix-сокета (vnc.sock), когда FreeBSD >= 1500509
-
Добавлена поддержка снимков хранилища (только если включён zfs)
-
Улучшена поддержка TPM
-
Переход на клиент-серверную архитектуру (unixsocket, json и т. д.). Bhyvemgr остаётся клиентом, а новое приложение bhyvemgrd используется как сервер.
-
Удалены привилегированные функции/процедуры. Теперь они являются частью bhyvemgrd.
-
Удалена поддержка sudo/doas. Она больше не нужна, поскольку привилегированные задачи будут запускаться из службы bhyvemgrd.
-
Удалена поддержка FreeBSD 13.x
-
Поддержка remote-viewer (virt-viewer) заменена на vncviewer (tigervnc-viewer). vncviewer требует меньше зависимостей и может быть легче, чем вариант virt.
-
Прочие исправления, улучшения и изменения
Bhyvemgr и Bhyvemgrd поддерживают aarch64 с 15.x до 16-CURRENT и amd64 с FreeBSD 14.x до 16-CURRENT. Bhyvemgr можно скомпилировать или установить из sysutils/bhyvemgr с поддержкой интерфейса gtk2, qt5 или qt6. Bhyvemgrd можно скомпилировать или установить из sysutils/bhyvemgrd.
Люди, заинтересованные в помощи или поддержке проектов, приглашаются.
Текущая версия bhyvemgr: 2.1.0 Текущая версия bhyvemgrd: 1.2.0
Спонсор: https://paypal.me/alonsocbsd
Скрипт рабочего стола для bsdinstall
Ссылки:
Задача проекта поддержки и удобства использования ноутбуков URL: https://github.com/FreeBSDFoundation/proj-laptop/issues/25
Репозиторий проекта URL: https://gitlab.com/alfix/kde-installer-dialogs
Контакт: Alfonso S. Siciliano <asiciliano@FreeBSD.org>
Цель этого проекта — предоставить простую функцию в bsdinstall(8), установщик системы FreeBSD, для установки и настройки графического окружения. Установщик должен спрашивать пользователей, хотят ли они установить окружение рабочего стола и, если да, автоматически установить и настроить всё необходимое с минимальным вмешательством пользователя или без него. После перезагрузки пользователям должен быть показан графический экран входа в систему.
В первом отчёте о состоянии за 2026 год было описано возможное решение: shell-скрипт примерно из 400 строк кода для установки и автоматической настройки компонентов, необходимых для графического окружения рабочего стола, включая драйверы GPU, Xorg, KDE Plasma и SDDM. После призыва к тестированию, который получил значительное количество отзывов от пользователей, на рассмотрение была подана рецензия D56167 для добавления нового скрипта рабочего стола в bsdinstall.
После подачи рецензии состоялось несколько обсуждений предложенной реализации. По результатам рецензии было запрошено разделить скрипт на более мелкие компоненты и перенести часть его функциональности в отдельные порты. Рецензия D56167 теперь устарела. Затем было проанализировано и протестировано несколько возможных подходов.
Выбранное решение — создание новых портов с вариантами (flavors).
Базовый порт предоставляет инструменты для построения меню и/или возврата скрипту списка пакетов для установки. Утилиты меню реализованы как shell-скрипты, поскольку разработка API Lua для текстовых пользовательских интерфейсов всё ещё продолжается.
Каждый вариант предоставляет скрипт pkg-post-install-lua(5) для настройки пакета, установленного в новой системе. pkg-post-install-lua был выбран вместо shell-скрипта pkg-post-install(5), потому что это облегчит повторное использование кода, если в будущем возникнет необходимость использовать pkg-trigger(5).
Следующие четыре новых порта с вариантами, в общей сложности 26 пакетов, были созданы и поданы в Bugzilla:
-
x11/bsdinstall-desktop PR298402
-
Утилиты базового порта: bsdinstall-desktop-checks, bsdinstall-desktop-users с поддержкой меню.
-
Вариант: -audio.
-
-
graphics/bsdinstall-gpu PR298413
-
Утилита базового порта: bsdinstall-gpu с поддержкой меню.
-
Варианты: -amd, -drm, -intel, -nv304, -nv340, -nv390, -nv470, -nv580, -nv595, -nv610, -nvaddons, -nvoptimus, -radeon, -scfb, -vbox, -vesa, -vmware.
-
-
x11/bsdinstall-de PR298442
-
Утилита базового порта: bsdinstall-de.
-
Варианты: -kde, -wireplumber.
-
-
x11/bsdinstall-dm PR298455
-
Утилита базового порта: bsdinstall-dm с поддержкой меню.
-
Варианты: -ly, -sddm.
-
В репозитории проекта также завершён новый черновик скрипта рабочего стола. Он существенно отличается от исходного скрипта и теперь составляет примерно 100 строк кода. Новая рецензия на добавление скрипта рабочего стола в bsdinstall будет подана после того, как новые порты будут добавлены в коллекцию портов.
Это всё ещё экспериментальная функция. В будущем, в зависимости от интереса пользователей и отзывов, скрипт рабочего стола можно будет дополнительно улучшить для поддержки дополнительных окружений рабочего стола и графических инструментов.
Спонсор: Фонд FreeBSD
Sylve — унифицированная платформа управления системой для FreeBSD
Ссылки:
Веб-сайт URL: https://sylve.io
GitHub URL: https://github.com/AlchemillaHQ/Sylve
CI URL: https://sylve-ci.alchemilla.io
Discord URL: https://discord.gg/bJB826JvXK
Контакт: Hayzam Sherif <hayzam@alchemilla.io>
Sylve — это современная унифицированная платформа управления системой для FreeBSD. Она предоставляет интегрированный веб-интерфейс для управления виртуальными машинами (через Bhyve), джейлами, сетью вокруг них и хранилищем ZFS.
Бэкенд реализован на Go, а фронтенд построен на Svelte. Проект делает упор на минимальный системный след. По умолчанию он не требует каких-либо пакетов вне базовой системы.
Необязательные зависимости среды выполнения, требуемые только при использовании соответствующих функций, включают:
-
devel/libvirt для виртуализации
-
devel/qemu для управления образами дисков
-
Samba 4.x (например, net/samba424) для обмена файлами по SMB
-
sysutils/swtpm для поддержки эмуляции TPM
-
dns/dnsmasq для служб DHCP и DNS
Порт подтягивает эти зависимости для удобства пользователя, но сам по себе Sylve не требует зависимостей для работы.
Основные достижения третьего квартала
В этом квартале мы опубликовали два помеченных выпуска: v0.3.0 24 августа, который включил работу по сети, миграции, репликации и резервному копированию, о которой сообщалось в прошлом квартале, и v0.3.1 7 сентября, последний улучшил восстановление кластера, резервное копирование, миграцию и управление хранилищем гостей.
Центр обработки данных / Кластер
-
Миграция между узлами кластера теперь передаёт основную часть данных ZFS, пока рабочая нагрузка ещё онлайн, с последующей финальной инкрементальной передачей и защищённым переключением.
-
Резервные копии теперь фиксируют связанные наборы данных и диски виртуальных машин как согласованные поколения, с более надёжными рабочими процессами восстановления.
Хранилище
-
Добавлена более глубокая телеметрия ZFS и ARC, а также запланированные тесты S.M.A.R.T.
-
Рабочие процессы хранилища виртуальных машин были переработаны в v0.3.1 с явной семантикой извлечения и удаления подключений.
Эксплуатация
-
Добавлены защищённый локальный CLI и интерактивная консоль для общих операций с виртуальными машинами, джейлами, сетью и жизненным циклом.
-
Встроено управление сертификатами и динамическим DNS, включая бесплатные имена хостов Sylve.app с управляемым TLS, а также поддержку Cloudflare и Namecheap.
Общее
-
Пользовательская документация была значительно переработана, с ориентированными на задачи руководствами по всем основным функциям.
-
Sylve теперь требует libvirt 12.5.0 или новее для управления виртуальными машинами; по-прежнему требуется FreeBSD 15.0 или новее.
Обновление дорожной карты
FreeBSD Foundation расширила свою поддержку Sylve новым грантом на части следующего этапа платформы.
Следующий квартал(ы) принесёт:
-
Нативное управление контейнерами OCI через Podman.
-
Галерею приложений с шаблонами для развёртывания приложений в джейлах и контейнерах.
-
Общий доступ по NFS и автоматическую настройку наборов данных ZFS.
-
Мобильное приложение для управления кластерами, обновления операционной системы из интерфейса и расписания очистки ZFS.
-
Сквозное тестирование и более понятную документацию по миграции.
-
Упрощённый интерфейс для начинающих.
Спонсоры: Фонд FreeBSD, Alchemilla Ventures (разработка), IPTechnics LLC (инфраструктура и тестирование)
Доступность для слабовидящих
Ссылки:
Руководство по доступности URL: https://docs.freebsd.org/en/books/accessibility/
Репозиторий проекта URL: https://gitlab.com/alfix/freebsd-accessibility/
LearnBraille URL: https://gitlab.com/-/snippets/6065143
bsddialog URL: https://gitlab.com/alfix/bsddialog
Контакт: Accessibility <accessibility@FreeBSD.org>
Контакт: Alfonso S. Siciliano <asiciliano@FreeBSD.org>
Vision Accessibility — это проект, направленный на улучшение визуальной доступности во FreeBSD путём документирования, разработки и интеграции вспомогательных технологий для слепых и слабовидящих пользователей.
Тема высокой контрастности
В этом квартале работа была сосредоточена в основном на этапе 2: создании новых доступных тем для утилит TUI в базовой системе FreeBSD с возможностью выбора одной из них во время установки ОС.
В рамках этой работы была разработана следующая версия bsddialog с упором на улучшение поддержки тем. Код работы с темами был реорганизован и улучшен, а API bsddialog_theme.h расширен, чтобы приложения могли легче и автоматически выбирать и настраивать темы.
В частности, процесс инициализации библиотеки теперь использует bsddialog_get_auto_theme(), которая автоматически определяет используемую тему. Если доступно, тема может быть выбрана через централизованный общесистемный или пользовательский конфигурационный файл. Это позволяет утилитам в базовой системе FreeBSD, таким как tzsetup(8) и bsdinstall(8), а также портам, таким как ports-mgmt/portconfig, использовать одну и ту же конфигурацию темы без необходимости индивидуальных изменений в каждом приложении.
Также были улучшены или добавлены несколько тем, ориентированных на доступность:
-
Улучшена встроенная чёрно-белая тема. Изначально она была разработана для терминалов без поддержки цвета, но также полезна для представления информации без опоры только на цвета.
-
Добавлена тема без красного, использующая чёрный, синий, голубой, белый и жёлтый.
-
Добавлена тема без жёлтого и синего, использующая чёрный, зелёный, красный и белый.
-
Добавлена новая тема высокой контрастности, использующая чёрный, пурпурный, белый и жёлтый.
Новая функциональность задокументирована в страницах руководства с новыми примерами, а также в CHANGELOG bsddialog.
Этапы проектирования и реализации завершены, и сейчас начинается тестирование. Новая функциональность в настоящее время доступна только в основной ветке репозитория bsddialog.
Следующие шаги — завершить тестирование, выпустить версию 1.2, обновить порт devel/bsddialog и импортировать новую версию в базовую систему FreeBSD.
Брайлевские дисплеи
В этом квартале для использования в предстоящих этапах был приобретён HumanWare BrailleNote Apex. Было получено подходящее зарядное устройство, и устройство успешно протестировано. Брайлевский дисплей и клавиатура работают, как и встроенный речевой синтезатор.
Хотя брайлевская подсистема запланирована на будущий этап, начальное экспериментирование уже началось, поскольку проектирование и интеграция такой подсистемы — сложная задача. Эти первые тесты предназначены для предоставления практической информации для её будущего проектирования и реализации.
BrailleNote Apex — это не просто брайлевский дисплей, а брайлевский ноутбук, работающий под управлением Windows Embedded CE 6.0. Он предоставляет одномерный пользовательский интерфейс через KeySoft с такими приложениями, как текстовый процессор, электронная почта, веб-браузинг и другие функции. Apex также был подключён к внешнему монитору через VGA, что облегчило изучение и лучшее понимание его функциональности.
Использование Apex требует знания брайля — как для письма через брайлевскую клавиатуру, так и для чтения через брайлевский дисплей. По этой причине также был разработан и использован LearnBraille. Это простой скрипт на Lua, использующий devel/liblouis для проведения викторины по практике брайлевских символов.
Apex был подключён к FreeBSD через USB и использовался в режиме «Screen Reader Terminal», который позволяет устройству работать как брайлевский дисплей, подключённый к другому компьютеру. Устройство распознаётся uipaq(4), а связь обеспечивается через интерфейс ucom(4). Это соответствует архитектуре устройства, поскольку Apex работает под управлением Windows Embedded CE 6.0.
Первоначальные тесты связи были успешными в обоих направлениях. Данные отправлялись из FreeBSD на брайлевский дисплей, включая простое сообщение «Hello World, FreeBSD!», отображаемое на брайлевских ячейках. Символы, набранные на брайлевской клавиатуре, также принимались FreeBSD. В этом направлении каждый брайлевский символ представляется одним байтом, биты которого соответствуют точкам брайля.
Дальнейшие тесты, документация и информация о прогрессе и результатах этой работы будут предоставлены в будущих отчётах.
Спонсор: Фонд FreeBSD
x11appjail: инструмент для создания, проверки, установки и запуска AppJail
Ссылки:
x11appjail на GitHub URL: https://github.com/DtxdF/x11appjail
Контакт: Jesús Daniel Colmenares Oviedo <dtxdf@FreeBSD.org>
x11appjail — это специализированный инструмент для создания, проверки, установки и запуска AppJail. AppJail — это приложение CLI, TUI или X11, которое работает внутри джейла FreeBSD, но воспринимается конечным пользователем как идентичное (или по крайней мере очень похожее) приложению, работающему непосредственно в хост-системе.
Этот инструмент широко использует appjail(1) в качестве своего движка; однако, в отличие от последнего, основным пользователем в x11appjail является не root и не привилегированный пользователь, а непривилегированный пользователь. Фундаментальная цель этого проекта — предоставить пользователю ограниченный доступ к джейлу, ограниченный исключительно выполнением приложения CLI, TUI или X11.
Этот проект начался несколько месяцев назад как прототип для установления рабочего процесса с использованием appjail-x11(1); однако, начиная с версии 1.0.0, он был переписан с нуля в единый инструмент, который интегрирует все его проекты, такие как sysutils/appjail, sysutils/unixexec, archivers/appscript и sysutils/jtransfer, среди прочих. Что ещё лучше, он позволяет выполнять не только приложения X11, но и программы CLI и TUI.
Наиболее значимым проектом для x11appjail(1) является не только appjail(1), но и appscript(1).
Моя цель с appscript(1) — создать сверхлёгкую альтернативу AppImage для FreeBSD, которая не зависит от FUSE, тем самым устраняя необходимость настройки vfs.usermount=1.
appscript(1) позволяет создать исполняемый файл elf(5), который содержит всё необходимое для запуска самодостаточного исполняемого файла.
Наиболее значительные изменения и улучшения для appscript(1) и x11appjail(1):
-
Исполняемые файлы, созданные appscript(1), извлекают полезную нагрузку кооперативно: ведущий процесс извлекает полезную нагрузку один раз с использованием эксклюзивной блокировки, тогда как другие процессы (если они есть) ждут с использованием разделяемой блокировки. В отличие от предыдущих версий, где полезная нагрузка извлекалась в случайный каталог при каждом выполнении, это значительно повышает производительность за счёт извлечения полезной нагрузки только один раз; кроме того, результирующий каталог удаляется последним оставшимся процессом, когда запущенных процессов больше не остаётся.
-
appscript-verify(1) — это новая команда, устанавливаемая archivers/appscript для проверки исполняемых файлов, подписанных signify(1); она особенно важна для
veriexecв x11appjail(1) (см. ниже). -
veriexecв x11appjail(1) — это внутренний инструмент, используемый x11appjail(1) для запуска AppJail в портативном режиме только в том случае, если он подписан доверенным ключом. Этот инструмент не связан сveriexecиз NetBSD. -
Оба инструмента поддерживают классический, проверенный временем алгоритм SHA-256 и более быстрый, но безопасный алгоритм BLAKE3. Когда sysutils/b3sum доступен (по умолчанию, если x11appjail(1) был установлен из портов), BLAKE3 является выбором по умолчанию, если SHA-256 явно не указан в rc.conf(5).
Алгоритм контрольной суммы имеет фундаментальное значение как для x11appjail(1), так и для appscript(1). В случае x11appjail(1) алгоритм используется во внутренних операциях, таких как
veriexec, тогда как appscript(1) использует его для проверки исполняемых файлов. BLAKE3 был выбран в качестве опции по умолчанию, поскольку он обеспечивает большую скорость без ущерба для безопасности. -
В x11appjail(1) реализованы атрибуты как средство для пользователя и системного оператора управлять поведением AppJail. Например, системный оператор может создать системный атрибут users.uid.perms, содержимым которого может быть «enable_3d sound usb webcam». Непривилегированный пользователь может создать пользовательские атрибуты appname:profile.allow.enable_3d и appname:profile.allow.sound. Впоследствии при выполнении AppJail устройства становятся видимыми или остаются скрытыми в зависимости от того, имеет ли пользователь соответствующее разрешение и авторизовал ли он эти разрешения для создаваемого джейла. В этом случае устройства аппаратного ускорения и звука станут видимыми, при условии что AppJail включил необходимую логику для их видимости.
Ещё одно заметное изменение, о котором стоит упомянуть для x11appjail(1), — это примеры, добавленные в ${EXAMPLESDIR}/Apps: badwolf, chromium, evince, feh, firefox, htop, linux-brave, mpv, nanonote, telegram-desktop и thunderbird.
Помимо самих приложений, ключевым фактором является способ развёртывания.
htop — это пример приложения CLI, linux-brave — приложение Linux, а остальные — приложения X11.
Веб-браузеры, Mpv и Thunderbird — наиболее интересные примеры, поскольку они демонстрируют, как AppJail может использовать VirtualGL для правильного включения аппаратного ускорения внутри джейла FreeBSD, что обычно было бы невозможно, учитывая, что Xephyr является бэкендом, используемым appjail-x11(1).
Что лучше всего, с точки зрения конечного пользователя, всё это прозрачно.
Демонстрационное видео: https://youtu.be/EBSMHBC0Phc
Спонсор: https://www.patreon.com/appjail
Портирование проекта rdma-core во FreeBSD
Ссылки:
link: Серия коммитов порта URL: https://github.com/linux-rdma/rdma-core/pull/1778
link: Проект LinuxAPI URL: https://github.com/freebsd/linuxapi
Контакт: Konstantin Belousov <kib@FreeBSD.org> Контакт: Ariel Ehrenberg <aehrenberg@nvidia.com> Контакт: Slava Shwartsman <slavash@nvidia.com> Контакт: Gleb Popov <arrowd@FreeBSD.org>
Инфраструктура Remote Direct Memory Access (RDMA) обеспечивает высокопроизводительное межсоединение между вычислительными узлами и узлами хранения. Она может работать поверх различных физических сетей, например Ethernet и Infiniband.
Реализация стека RDMA состоит из нескольких компонентов. Есть ядерная инфраструктура и драйверы для Host Channel Adapters (HCA), обеспечивающие доступ к verbs ядра (прим. переводчика: verbs — стандартный API RDMA/InfiniBand). Пользовательские приложения никогда не взаимодействуют с устройствами ядра напрямую; основная библиотека libibverbs и зависящие от вендора пользовательские драйверы предоставляют унифицированные и специфичные для устройства verbs.
Поскольку RDMA нацелена на операции с низкой задержкой и малыми накладными расходами, производительные HCA снимают с CPU множество операций. Кроме того, типичные встроенные операции, такие как отправка и приём, могут инициироваться и завершаться в пользовательском пространстве, где ядро лишь помогает при установлении и разрыве соединения. Из-за этого пользовательский программный стек RDMA критически важен для её работы.
Базовая система FreeBSD включает порт так называемого ядерного компонента OFED, ядерные драйверы, а также пользовательское ядро (libibverbs) и пользовательские драйверы, например libmlx5 для управления HCA Nvidia Connect-X4 и более поздними. Со временем ядерные части получают значительные обновления из кода infiniband в ядре Linux, который становится домом для обновлённого OFED. Пользовательская часть OFED была преобразована в пользовательский проект rdma-core, который поддерживает только Linux (и glibc). Поскольку пользовательские драйверы в rdma-core обеспечивают существенную функциональность, а пользовательские компоненты RDMA во FreeBSD довольно устарели, ситуация в целом требует решения.
Мы попытались обновить внутрисистемные пользовательские компоненты, импортировав серию коммитов rdma-core с зависимостями, но быстро выяснилось, что это нецелесообразно. Вместо этого мы начали изучать, что потребуется, чтобы заставить rdma-core компилироваться и работать во FreeBSD.
Во-первых, был ряд отсутствующих специфичных для glibc API, которые использовались в rdma-core, например strdupa() и подобные, main:tdestroy(3), некоторые функции pthread. Их было легко обработать в базовой системе, и их добавление пошло на пользу всей истории портирования FreeBSD.
Далее, и более серьёзно, непортируемые особенности glibc использовались повсюду в исходниках, и попытка охватить их все вызвала бы огромный патч портирования, который проблематично отправить в upstream, даже для сотрудничающего upstream. Вместо этого была сформирована и разработана идея использования подхода, аналогичного LinuxKPI для кода ядра, названного LinuxAPI. В отличие от LinuxKPI, который обрабатывает архитектурные несоответствия между ядром Linux и ядром FreeBSD в дополнение к различным C-интерфейсам, LinuxAPI должен сглаживать различия вокруг расширений одной и той же базовой функциональности, определённой POSIX. Речь в основном идёт о частях, которые не определены POSIX, но необходимы для работы RDMA, таких как перечисление сетевых интерфейсов или обнаружение устройств с поддержкой rdma и их возможностей и т. д.
Похоже, люди уже считают LinuxAPI полезным за пределами усилий по портированию rdma-core; есть проект github.com/freebsd/linuxapi, который берёт разработанный набор заголовков и расширяет его дальше. В настоящее время мы работаем над предоставлением разрешительной лицензии, чтобы сделать библиотеку полезной без дополнительных условий.
Наша первоначальная цель, также ограниченная доступным оборудованием, — заставить rdma-core работать с картами ConnectX-4. Разумеется, мы приветствуем всех вендоров, заинтересованных в RDMA во FreeBSD, улучшать порт для надлежащей поддержки их карт.
Результат портирования доступен в виде репозитория. Мы также стараемся отправить изменения в upstream, чтобы FreeBSD стала второй нативно поддерживаемой платформой для rdma-core. Pull Request в проект на github отправлен. В настоящее время идёт блокирующее обсуждение о способе организации CI для платформы FreeBSD. Глеб Попов создал порт net/rdma-core из ответвлённых исходников, который уже находится в дереве портов.
Изменения ядра, необходимые для работы порта, были на удивление небольшими и локализованными. Они в основном состояли из исправлений ошибок в путях кода, ранее не задействованных пользовательским пространством, поскольку пользовательского пространства не было. Самая интересная часть — пожалуй, разница в поведении ioctl(2) между Linux и FreeBSD, где Linux может одновременно вернуть ошибку и выполнить copyout структуры данных. Эта проблема уже наблюдалась в LinuxKPI, и работа по портированию предоставила там общее решение.
Спонсор: Nvidia networking
NFS через Remote Direct Memory Access (RDMA)
Ссылки:
Актуальные исходники NFS-сервера в ветке freebsd-rdma URL: https://github.com/viniciusferrao/freebsd-src.git
nfs-over-rdma-setup.txt URL: https://people.freebsd.org/~rmacklem/nfs-over-rdma-setup.txt
Контакт: Rick Macklem <rmacklem@freebsd.org>, Vinicius Ferrao <ferrao@versatushpc.com.br>
В настоящее время NFS в FreeBSD поддерживается через TCP (и UDP для NFSv3). Этот проект добавляет поддержку NFS через RDMA, как описано в RFC-8166 и RFC-8267. Это должно позволить RDMA-совместимым сетевым картам разгрузить большую часть сетевого транспорта и повысить производительность в быстрых локальных сетях.
Благодаря Vinicius был достигнут значительный прогресс. У него работает серверная сторона NFS, и, насколько я знаю, довольно хорошо.
Клиентская сторона теперь довольно хорошо тестируется против сервера Vinicius, и как клиент, и сервер готовы к тестированию третьими сторонами. Для тестирования требуются клиент и сервер с сетевыми картами Mellanox ConnectX4→6, работающие на ядре, собранном из недавних исходников FreeBSD main.
Информацию о настройке тестовой среды см. в nfs-over-rdma-setup.txt.
Ядра stable/15 должно быть достаточно для загружаемых модулей через несколько недель. Клиентский код также должен быть закоммичен в FreeBSD main через несколько недель, с MFC в stable/15 к концу 2026 года. Серверный код был создан с помощью генеративного ИИ, и проект FreeBSD работает над политикой обработки материалов, созданных генеративным ИИ. Тем временем серверный код будет доступен как "неофициальный порт", собирающий загружаемый модуль ядра.
Мы были бы очень признательны тестированию третьими сторонами.
Спасибо Vinicius за работу над NFS-сервером и участникам кластера FreeBSD Netperf, без которых я бы никогда не протестировал этот код.
Спонсор серверного кода NFS: Verastus HPC
nfsdtop(8) показывает, кто использует сервер NFS
Ссылки:
D59438 URL: https://reviews.freebsd.org/D59438
rG60c7313074b9 URL: https://cgit.freebsd.org/src/commit/?id=60c7313074b93adf4ea70ff44b78b3b4fc15c29f
Контакт: Devin Teske <dteske@FreeBSD.org>
nfsstat(1) сообщает о сервере в целом.
nfsdtop(8) сообщает о пользователе, группе или клиенте, стоящем за чтением и записью.
Это дисплей в стиле top, снимаемый с помощью dtrace(1) с путей nfsd(8) nfsrvd_read, nfsvno_read, nfsrvd_write и nfsvno_write.
Представление по умолчанию — по пользователям.
-g объединяет по группе, а -c — по IPv4-клиенту.
На каждом интервале выводится итог, а затем строки, выполнявшие ввод-вывод, отсортированные по суммарному объёму чтения и записи.
Интервал по умолчанию — две секунды.
Столбцы показывают пропускную способность в человекочитаемом представлении, если только -b не запрашивает объём байтов, перемещённых за этот интервал.
WRITE(IN) — данные, отправленные клиентами.
READ(OUT) — данные, отправленные сервером.
nfsdtop nfsdtop -c nfsdtop -g -G wheel
UID, GID или адрес клиента на этих путях принадлежат клиенту, а не серверу.
nfsdtop(8) не обращается к getent(1) для их именования во время выборки.
Имена берутся из файлов сопоставления в текущем каталоге: .nfsd.passwd, .nfsd.group и .nfsd.hosts.
Фильтр (-U, -G или -C) разрешается один раз из этих карт, а затем с помощью getent(1) или host(1), и результат компилируется в предикат dtrace(1).
-j выдаёт один JSON-объект для итога представления и один на каждый ключ, на каждом интервале, с количеством байтов и скоростями.
-J выбирает представления клиентов, групп и пользователей вместе:
nfsdtop -J -N 1
Запускать может только root или пользователь, способный запускать dtrace(1).
Представление клиентов и -C работают только с IPv4.
-R или непустой NFSDTOP_REDACT заменяет имена, не являющиеся общеизвестными системными учётными записями, случайными строками той же длины.
Введение присутствует в HEAD начиная с 60c7313074b9 (D59438), и nfsdtop(8) впервые выйдет в FreeBSD 16.0.
Спасибо Alexander Ziaee и Benedict Reuschling за страницу руководства, Adrian Chadd за рецензию и Rick Macklem за взгляд на сторону NFS.
Запускайте его на сервере, который уже под нагрузкой. Если вам нужна строка — не пользователь, не группа и не клиент, пожалуйста, напишите.
Расширение поддержки Zoned Storage
Ссылки:
Страница проекта GSoC в вики URL: https://wiki.freebsd.org/SummerOfCode2026Projects/EnhancingZonedStorageSupportOnFreeBSD
Контакт: voidanix <voidanix@FreeBSD.org>
Обзор проекта
Работа над этим проектом направлена на расширение поддержки Zoned Storage во FreeBSD путём добавления следующих новых возможностей:
-
Новый GEOM-драйвер gzoned(8) для эмуляции зонированных устройств.
-
Поддержка Zoned Namespaces (ZNS) для зонированных NVMe-накопителей.
-
Улучшенная обработка Zoned Storage для gconcat(8), glabel(8) и gpart(8).
Работа выполнялась в рамках Google Summer of Code 2026.
Важность для FreeBSD
Новый драйвер gzoned(8) эмулирует Zoned Storage поверх обычных, незонированных накопителей, что позволяет разрабатывать, тестировать и интегрировать Zoned Storage без зонированного оборудования.
Поддержка ZNS позволяет использовать Zoned Storage на NVMe SSD.
Zone-aware классы GEOM позволяют использовать управляемые хостом накопители с обычными инструментами хранения.
Состояние
gzoned(8) теперь находится в main.
Поддержка ZNS была добавлена в драйвер nda(4), тогда как поддержка nvd(4) не планируется из-за его минималистичной природы.
Управляемые хостом устройства теперь можно объединять через gconcat(8), тогда как glabel(8) будет аккуратно отказывать им в автоматической маркировке из-за своих требований к метаданным. gpart(8) теперь может создавать схемы разделов GPT на управляемых хостом накопителях, не записывая резервную таблицу GPT.
Планы на следующий квартал
-
Доработать gconcat(8), glabel(8) и поддержку ZNS, поскольку теперь они могут полагаться на gzoned(8) из main.
-
Влить всю работу в main.
Наставники: Robert Clausecker, Alan Somers и Ken Merry
Спонсор: Google Summer of Code 2026
Улучшение LLDB во FreeBSD
Контакт: Minsoo Choo <mchoo@FreeBSD.org>
С мая по август я был занят в университете и теперь вернулся к работе над этим проектом. Поскольку я не смог выполнить эту задачу для LLVM 23, целевой выпуск для завершения изменён на LLVM 24.
Теперь кандидатами на поддержку являются armv7 и powerpc64be. Как только рефакторинг LLDB будет завершён, я реализую поддержку этих архитектур.
В отличие от KGDB, который использует собственный анализатор кадров для размотки trapframe, LLDB использует вместо этого DWARF CFI. DWARF CFI работает и в KGDB; когда кадр не распознаётся анализатором кадров KGDB, он переключается на CFI. Таким образом, на стороне KGDB никаких изменений не требуется.
Спонсор: Фонд FreeBSD
Procdesc: API отладки
Контакт: Konstantin Belousov <kib@FreeBSD.org>
Проект по расширению API дескрипторов процессов продолжался с целью обеспечить полный контроль над процессом с помощью дескрипторов, в частности отладку. Я хотел сделать возможным отказаться от ссылок на pid как идентификаторы процессов. Вехой для этого должна стать демонстрация включения режима capsicum для некоторого нетривиального отладчика; я выбрал truss(1), поскольку после подключения к целевой программе ему не требуется доступ ни к файловой системе, ни к сетевому пространству имён.
Полуочевидное решение здесь — ввести pdptrace(2), который эквивалентен ptrace(2), но принимает дескриптор процесса в качестве обозначения процесса. Нам нужно уметь получать уведомления о событиях отладки процесса, которые предоставляются семейством системных вызовов waitpid[2] для управления по pid. И нам нужен способ получать дескриптор процесса для нового потомка, ответвлённого от отлаживаемой программы, чтобы продолжать трассировку всех потомков.
Ранее был добавлен системный вызов pdopenpid(2), который позволяет получить дескриптор произвольного процесса. Существующие операции над дескрипторами процессов несколько ограничены: владелец дескриптора может ожидать уведомление о завершении с помощью kqueue(2) и при некоторой удаче получить статус завершения процесса.
Последний пункт требует некоторых пояснений. Поскольку вызов pdwait(2) был добавлен недавно, в ядре было некоторое количество обходных решений, позволявших вызовы waitpid(2) для pid процессов, созданных с помощью pdfork(2). В результате вызывающий waitpid(2) мог забрать процесс раньше, чем владелец дескриптора процесса смог вызвать pdwait(2). Аналогично, если на один и тот же процесс открыто более одного дескриптора процесса, только первый вызывающий pdwait(2) мог получить статус завершения с помощью pdwait(2), делая остальные дескрипторы бесполезными.
Перечисленный набор проблем также делал очень трудным корректное использование предложенного pdptrace(2). Отлаживаемый процесс мог перехватывать события у дескрипторов процессов, и наоборот. Простое запрещение wait(2) для процессов с открытыми дескрипторами не является вариантом по двум причинам: * обратная совместимость: waitpid(2) уже был разрешён, и существующие бинарные файлы полагались на него * если отлаживаемая программа использовала fork(2) для создания потомка, она ожидает получить уведомление о завершении (например, SIGCHLD) и статус завершения от wait(2)
Решение было многосторонним. Во-первых, мы должны отложить сбор (reaping), если есть открытые дескрипторы процессов, или, если процесс был создан с помощью fork(2), мы не должны собирать его до тех пор, пока родитель не вызовет wait(2) по pid. Во-вторых, статус завершения нужно сохранять в приватных данных дескрипторов процесса даже после сбора, чтобы позволить pdwait(2) по любому из дескрипторов. Это было реализовано путём предоставления битовой карты «ссылок зомби» в структуре ядра struct proc. Каждая ссылка зомби предотвращает сбор и очищается соответствующим вызовом waitpid(2) или pdwait(2). Только когда все зарегистрированные ссылки очищены, зомби может быть собран. Если процесс создан с помощью pdfork(2) или открыт с помощью pdopenpid[2], он получает ссылку зомби procdesc. Если процесс был создан с помощью fork(2), он получает ссылку зомби «родитель». По умолчанию pdfork[2] также устанавливает родительскую ссылку, чтобы разрешить waitpid(2) для совместимости. Новый флаг pdfork(2) PD_NOWAITPID предотвращает это.
Затем события, подобные wait, должны работать с дескрипторами процессов. Фильтр событий kqueue(2) для procdesc был расширен подсказками NOTE_PDSIGCHLD, чтобы сообщать, что pdwait(2) может получить событие трассировки или завершения по дескриптору.
Затем pdptrace(2) смог полезно управлять целевой программой. Новый вызов ptrace для получения списка присоединённых процессов PT_GET_CHILDREN позволил pdptrace(2) получать дескрипторы потомков, созданных через fork.
Со всеми реализованными функциями стало возможным преобразовать truss(1) так, чтобы он использовал только дескрипторы процессов для управления трассируемыми процессами. Существующий режим использования pid был сохранён и может быть выбран опцией '-y' как аварийный переключатель, а также для удобного сравнения и отладки нового режима.
Спонсор: Фонд FreeBSD
Пользовательские программы
Изменения, затрагивающие базовую систему и программы в ней.
Планировщик
Ссылки:
Вики-страница DevSummit EuroBSDCon 2026 URL: https://wiki.freebsd.org/DevSummit/202609
Слайды URL: https://wiki.freebsd.org/DevSummit/202609?action=AttachFile&do=view&target=EuroBSDCon2026-Scheduler.pdf
Контакт: Olivier Certner <olce@FreeBSD.org>
Контакт: Minsoo Choo <mchoo@FreeBSD.org>
В этом квартале в ULE и 4BSD был влит ряд исправлений и чисток:
-
Исправлено смешение приоритетов потоков, ограниченных CPU, с разными значениями nice (4BSD).
-
Исправлено слишком медленное снижение приоритета при потреблении CPU из-за некоторого устаревшего масштабирования SMP (4BSD).
-
Исправлен выбор потока с наименьшим приоритетом на раннем этапе в некоторых краевых случаях (ULE).
-
Локальные очереди выполнения (используемые для привязанных/прикреплённых потоков) теперь выделяются только для фактически присутствующих CPU (4BSD).
-
Удалены неиспользуемые
hlt_cpus_maskиsched_do_timer_acccounting(). -
Удалён неиспользуемый
kern.sched.4bsd.followon(4BSD). -
При установке
kern.sched.{4bsd,ule}.sliceпроверяется, что значение имеет смысл, и обеспечивается обновление зависимых внутренних констант, таких какhogticksиsched_slice_min. -
Обеспечено, что
sched_slice_minи вычисление кванта остаются разумными для малых значений кванта (ULE). -
Обновлены некоторые комментарии.
Работа продолжается и близится к завершению по очистке механизма, позволяющего нескольким реализациям планировщика (так называемым «экземплярам») сосуществовать в одном ядре.
Из единого списка дескрипторов функций он теперь автоматически порождает объявление функций в интерфейсе планировщика и в экземплярах планировщика, поля структуры дескриптора экземпляра планировщика и функции диспетчеризации.
Готовится второй раунд изменений с целью потенциально удалить пространства имён функций реализации (например, наличие ule или 4bsd в их именах) в исходном коде, фактически переименовав их обратно в их старые имена, которые являются именами интерфейсных функций, сохраняя при этом пространства имён для символов C, что требуется для отладки и в целом для манипуляций различными инструментами ELF.
В фоновом режиме продолжается работа над решениями давних недостатков планировщика ULE, таких как несправедливость для неинтерактивных потоков в некоторых особых обстоятельствах и очень слабый эффект значений nice. Для получения дополнительной информации обратитесь к предыдущему отчёту и слайдам последней презентации на DevSummit EuroBSDCon 2026.
Спонсор: Фонд FreeBSD
Фильтрация системных вызовов для truss(1)
Ссылки:
D59275 URL: https://reviews.freebsd.org/D59275
rGaf25f2476230 URL: https://cgit.freebsd.org/src/commit/?id=af25f24762307bf606690c0aca6a3205a0515914
Контакт: Devin Teske <dteske@FreeBSD.org>
truss(1) трассирует системные вызовы, которые делает процесс. До этого квартала он сообщал о каждом вызове, что для любой программы крупнее игрушечной хоронит интересующие вызовы.
HEAD теперь принимает -t с выражением через запятую, называющим системные вызовы для отчёта.
Буква опции — та же, которую используют System V Release 4 и SunOS truss.
Терм может быть именем системного вызова, glob-шаблоном fnmatch(3) (readlink*), номером системного вызова в ABI трассируемого процесса или @group для семейства связанных вызовов.
Ведущий ! исключает то, что соответствует этому одному терму, и не применяется к другим термам — в отличие от SVR4 truss и Linux strace, где ! действует на весь остаток списка.
Термы применяются по порядку; побеждает последнее совпадение.
truss -t без выражения перечисляет группы и завершается.
Группы сами являются -t-выражениями, поэтому они компонуются без второго языка.
@desc строится из @read и @write, а не повторяет их элементы.
Списки элементов — это шаблоны (extattr_*file, sctp*), а не замороженные списки имён, поэтому более поздний системный вызов, следующий той же конвенции именования, присоединяется к нужной группе без изменения исходников здесь.
Поставляются тринадцать групп для начала: @all, @creds, @desc, @file, @ipc, @memory, @net, @none, @proc, @read, @signal, @time и @write.
Они не являются клоном классов % Linux strace: @read и @write разделяют ввод данных дескриптора и вывод данных, а @time охватывает часы, таймеры и сон, а не только часы.
Показать только файловую и сетевую активность команды:
truss -t @file,@net fetch https://www.freebsd.org/
Показать всё, что делает команда, кроме управления памятью:
truss -t '!@memory' make buildworld
Показать активность дескрипторов работающего процесса отдельно от самих передач данных:
truss -t '@desc,!@read,!@write' -p 34
Подсчитать вызовы readlink(2) и readlinkat(2), сделанные при запуске программы:
truss -c -t 'readlink*' /bin/ls
Системный вызов, исключённый -t, не декодируется, поэтому фильтр также пропускает стоимость форматирования аргументов, которые никогда не были бы напечатаны, и он исключается из сводки -c.
Без -t поведение не меняется.
Работа находится в HEAD начиная с af25f2476230, с планируемым MFC через две недели. Спасибо Robert Clausecker за рецензирование, а Alexander Ziaee — за вычитку страницы руководства.
Если вызов, который вас интересует, находится в неправильной группе или группы, которую вы бы использовали, не хватает, пожалуйста, напишите.
sysconf(8) завершает троицу конфигурации
Ссылки:
D58066 URL: https://reviews.freebsd.org/D58066
rG3fe5961a0b70 URL: https://cgit.freebsd.org/src/commit/?id=3fe5961a0b708da599d42cbb6b5e4f030c28ea45
Контакт: Devin Teske <dteske@FreeBSD.org> Контакт: Faraz Vahedi <kfv@FreeBSD.org>
sysctl(8) обращается к работающему ядру.
sysrc(8) обращается к rc.conf(5).
В этом квартале набор стал троицей, и новый инструмент приятен в использовании.
sysconf(8) читает и записывает остальную часть базовой конфигурации: loader.conf(5), sysctl.conf(5) и семейство make.conf(5) (make.conf, src.conf и src-env.conf).
Синтаксис — тот, который ваши пальцы уже знают.
Если просто указать имя, возвращается значение указанного имени.
name=value записывает, а ответ возвращается в привычной строке: name: old → new.
Настройка следующей загрузки умещается в одной строке:
sysconf loader zfs_load sysconf loader zfs_load="YES"
sysconf sysctl kern.maxfiles=65536
sysconf loader kernels+=kernel_test
sysconf make CFLAGS+=-DDEBUG sysconf src -s WITHOUT_LLDB
rc.conf(5) сохраняет инструмент, который уже делает это лучше всего.
sysconf rc sshd_enable=YES передаёт каждый аргумент после rc напрямую в sysrc(8).
Одна входная дверь, и за ней нужный специалист.
В основе утилиты лежит bsdconf(3) — движок figpar, представленный как один читатель и один писатель, в соавторстве с Faraz Vahedi.
Каждое семейство файлов — это небольшой дескриптор: ключевое слово, файлы и правила кавычек программы, которая фактически будет их читать.
Значения loader записываются в кавычках, потому что именно это принимает загрузчик.
Значения sysctl заключаются в кавычки только тогда, когда это необходимо для корректного обратного преобразования.
Семейство make сохраняет свои настоящие операторы (+=, ?=, :=, !=) и пустое присваивание WITH_ / WITHOUT_, потому что для этих переключателей наличие и есть настройка.
Вы задаёте формат с помощью цели.
-f задаёт путь, поэтому файл в формате loader, размещённый где угодно, всё равно остаётся файлом loader, а цель generic охватывает файл, не соответствующий ни одному встроенному.
Там, где загрузчик читает несколько файлов, sysconf читает те же самые файлы в том же самом порядке.
Цель loader начинает там, где начинает загрузчик, — с /boot/defaults/loader.conf, — и следует за loader_conf_files, loader_conf_dirs и local_loader_conf_files, включая раскладку, которая указывает эти списки в другое место.
Значение, которое вы читаете, — это значение, которое вступает в силу.
Значение, которое вы записываете, сохраняется там, где оно всё ещё будет действовать при следующей загрузке.
Удаление очищает каждый файл, в котором указана директива, чтобы более ранняя настройка просто не оказалась снова незамаскированной.
Та же команда перечисляет файлы и выводит действующий набор:
sysconf loader -l sysconf loader -a
-d сообщает описания, содержащиеся в файле значений по умолчанию.
-A расширяет дамп так, чтобы директивы, всё ещё находящиеся на значении по умолчанию, были частью картины.
Запись заменяет файл целиком.
Новый текст записывается во временный файл в том же каталоге, синхронизируется на диск (fsync) и переименовывается поверх оригинала с сохранением режима и владельца.
Если машина остановится на полпути, на диске останется предыдущий файл.
Использование только для чтения, включая проверку -c, выполняется внутри песочницы capsicum(4): файлы открываются, все остальные возможности отбрасываются, и только затем разбирается строка.
Цель sysctl спрашивает работающее ядро, прежде чем что-либо сохранить.
Неизвестный OID, OID только для чтения, тюнинг только для загрузчика или значение вне диапазона типа сообщается и пропускается, а тюнинг только для загрузчика направляется к цели loader, где и должно находиться параметр загрузки.
Каждое другое присваивание в той же команде всё равно применяется.
Для make и src записывается WITH_foo=no, и вам сразу сообщают использовать вместо этого WITHOUT_foo=1.
Это совет из share/mk/bsd.mkopt.mk, доставленный прямо на клавиатуру и повторяемый при последующем чтении с указанием файла и строки, чтобы старый WITH_*=no оставался на виду.
-j и -R направляют те же самые предложения в jail или другой корень.
Введение находится в HEAD начиная с 3fe5961a0b70 (D58066), и sysconf(8) впервые выходит в релиз во FreeBSD 16.0.
Он уже вырос с того коммита.
Достаточно уникального префикса цели (lo — это loader, sy — sysctl, sr — src), а цель poudriere несёт те же глаголы в poudriere.conf и в overlays make в poudriere.d.
Спасибо Robert Clausecker и Faraz Vahedi за рецензирование, а Alexander Ziaee — за примечания к выпуску.
Попробуйте его в HEAD на файле, который вы обычно открываете вручную. Если формат, в котором вы живёте, отсутствует, пожалуйста, напишите. Слой дескрипторов — это то, как присоединится следующий, и было бы хорошо услышать, какой файл вы хотите следующим.
Улучшения CUSE
Контакт: Christos Margiolis <christos@FreeBSD.org>
В конце этого квартала я начал работу над улучшением cuse(3). Помимо мелких исправлений и рефакторинга, я исправил известные зависания в модуле ядра во время ввода-вывода (872c36cb6f2d) и горячей выгрузки модуля (d38ef1aca969).
Вы также можете следить за процессом разработки в репозитории status-updates Фонда FreeBSD, где я публикую еженедельные отчёты.
Спонсор: Фонд FreeBSD
Пользовательские утилиты ext2fs
Контакт: Benjamin Stürz <benni@FreeBSD.org>
Цель этого проекта — реализовать утилиты для управления файловыми системами ext2fs в базовой системе FreeBSD.
Проект включает следующее: - dumpfs_ext2fs(8) - newfs_ext2fs(8) - fsck_ext2fs(8) - tunefs_ext2fs(8) - libext2fs (та же идея, что и libufs) - интеграция в makefs - тесты для упомянутых компонентов
Спонсор: Фонд FreeBSD
Ядро
Обновления подсистем/функций ядра, поддержки драйверов, файловых систем и другое.
Улучшения загрузчика
Ссылки:
Тестовый фреймворк загрузчика URL: https://reviews.freebsd.org/D58008
Распаковка XZ для EFI-дисков памяти URL: https://reviews.freebsd.org/D58073
Диски памяти динамического загрузчика URL: https://reviews.freebsd.org/D59418
Независимые EFI HTTP-устройства URL: https://reviews.freebsd.org/D59423
Опция начального диска памяти по DHCP URL: https://reviews.freebsd.org/D59428
Исправление раздела цепной загрузки EFI URL: https://cgit.freebsd.org/src/commit/?id=9ecc2493ca5fbba852e175674b5cb8975b99af84
Контакт: Warner Losh <imp@FreeBSD.org>
Работа в этом квартале расширила поддержку загрузчиком сжатых образов, дисков памяти и сетевой загрузки по HTTP, с вниманием как к интеграции с iPXE, так и к полноте loader.efi(8). Она также представила тестовый фреймворк на основе QEMU, охватывающий многие варианты загрузки FreeBSD.
Загрузчик теперь может читать файлы, сжатые с помощью XZ или Zstandard, так же, как он уже обрабатывал файлы gzip и bzip2. Поддержка XZ включена по умолчанию в загрузчиках BIOS и EFI, включая поддержку сжатых образов дисков памяти, таких как установочные образы FreeBSD. Поддержка Zstandard доступна как опция сборки.
Обработка дисков памяти была обобщена, чтобы загрузчик мог динамически создавать устройство md.
Это обеспечивает запасной вариант на системах, чья прошивка UEFI не реализует протокол RamDisk, — ситуация, встречающаяся на некоторых малых и встраиваемых системах.
Полученный диск памяти экспортируется в ядро и может содержать как ядро, так и корневую файловую систему.
Загруженные образы дисков памяти теперь используют правильный тип памяти UEFI, а загрузку можно прервать клавишей Escape.
Это заменяет необходимость использования сторонней надстройки memdisk_uefi.efi, которая требовалась людям ранее для интеграции с iPXE.
Теперь loader.efi также может загружать образы через службы загрузки iPXE, требуя только базовые сетевые модули DXE в образе прошивки UEFI.
Поддержка EFI HTTP ранее зависела от того, что прошивка загрузила loader.efi через UEFI HTTP Boot, и была ограничена сервером, выбранным прошивкой.
Теперь загрузчик принимает произвольные спецификации устройств http[N]://host[:port]/path.
Их можно использовать как rootdev, в loader.conf или интерактивно, независимо от того, как был запущен сам загрузчик.
Реализация может либо повторно использовать существующую сетевую конфигурацию загрузчика, либо попросить сетевой стек прошивки выполнить DHCP.
Клиент DHCP теперь запрашивает опцию производителя FreeBSD, содержащую URL начального образа диска памяти. С этой опцией машина может запустить loader.efi напрямую по сети, обнаружить отсоединённый корневой образ через DHCP, получить этот образ по HTTP и загрузиться с него. Была проявлена осторожность при передаче владения сетевым интерфейсом между собственным сетевым стеком загрузчика и стеком UEFI HTTP. Это необходимо, поскольку каждому стеку требуется различный доступ к сетевым протоколам прошивки.
Новый фреймворк tools/boot/boot-test.sh использует QEMU для тестирования загрузки на aarch64, amd64, armv7, powerpc64, powerpc64le и riscv64. Он задействует применимые окружения BIOS, UEFI, OpenFirmware и PReP с конфигурациями CD, MBR, GPT, сети и дисков памяти, а также загрузчики Lua, Forth и simple. Тесты сетевой загрузки по HTTP и цепной загрузки gptboot.efi были добавлены позже в квартале. Фреймворк пока не является установленным тестом, поскольку он собирает и тестирует несколько целевых архитектур с одного хоста.
Тесты цепной загрузки сопровождали исправление для систем, использующих gptboot.efi для выбора между системными разделами A/B. После цепной загрузки loader.efi мог пропустить выбранный раздел и вместо этого загрузить другой системный раздел. Теперь выбранный раздел пробуется первым, а обычный поиск родственных разделов остаётся как запасной вариант. Отдельное изменение загрузчика, которое мешало некоторым конфигурациям цепной загрузки ZFS, было отменено.
Другая работа добавила страницу руководства loader.kboot(8), параметры сборки для исключения загрузчиков x86 BIOS и userboot из систем только с UEFI, а также защитные проверки для прошивок, которые объявляют непригодные протоколы графического вывода.
Спонсор: Netflix
Улучшения приостановки/возобновления
Ссылки:
Блог URL: https://obiw.ac/s0ix/
Доклад на BSDCan о s2idle/S0ix URL: https://youtu.be/RCjPc4X2Edc
Рабочая ветка URL: https://github.com/obiwac/freebsd-s0ix/pull/15
Контакт: Aymeric Wibo <obiwac@FreeBSD.org>
Контакт: Olivier Certner <olce@FreeBSD.org>
В FreeBSD в настоящее время добавляется приостановка в простой (suspend-to-idle) и поддержка сна S0ix.
Это позволит современным ноутбукам на Intel и AMD, некоторые из которых не поддерживают сон ACPI S3, переходить в состояния низкого энергопотребления для увеличения времени автономной работы.
amdsmu(4) теперь проактивно диагностирует вход в S0i3 после возобновления из приостановки в простой с помощью нового обработчика событий. Если вход в S0i3 не произошёл, он выведет в dmesg IP-блоки, которые блокировали вход, вместе с подсказками о том, как их устранить.
Драйвер acpi_spmc(4) теперь проверяет пакеты ограничений Intel и AMD. Некорректные ограничения пропускаются вместо аварийного завершения.
В драйвер thunderbolt(4) был внесён ряд улучшений: поддержка записи в конфигурационное пространство маршрутизатора, сбросы контроллера и исправление учёта CRC для сообщений записи конфигурации. Контроллеры Thunderbolt теперь можно возобновлять (на рецензировании), что позволяет выполнять несколько циклов приостановки-возобновления без необходимости перезагружать модуль ядра.
На данный момент современный ждущий режим (modern standby) надёжно работает на целевых ноутбуках, и большинство паник устранено. Основная проблема, над которой ведётся работа, — события GPE, генерируемые, пока машина находится в приостановленном состоянии, например, подключение или отключение питания от сети, вызывающие паники.
Спонсор: Фонд FreeBSD
Улучшения звуковой подсистемы
Контакт: Christos Margiolis <christos@FreeBSD.org>
Я работаю над звуковой подсистемой с 2024Q1. Ниже приведён список предыдущих отчётов о состоянии работ:
2024Q1 URL: https://www.freebsd.org/status/report-2024-01-2024-03/#_audio_stack_improvements
2024Q2 URL: https://www.freebsd.org/status/report-2024-04-2024-06/#_audio_stack_improvements
2024Q3 URL: https://www.freebsd.org/status/report-2024-07-2024-09/#_audio_stack_improvements
2024Q4 URL: https://www.freebsd.org/status/report-2024-10-2024-12/#_audio_stack_improvements
2025Q1 URL: https://www.freebsd.org/status/report-2025-01-2025-03/#_audio_stack_improvements
2025Q2 URL: https://www.freebsd.org/status/report-2025-04-2025-06/#_audio_stack_improvements
2025Q3 URL: https://www.freebsd.org/status/report-2025-07-2025-09/#_audio_stack_improvements
2025Q4 URL: https://www.freebsd.org/status/report-2025-10-2025-12/#_audio_stack_improvements
2026Q1 URL: https://www.freebsd.org/status/report-2026-01-2026-03/#_audio_stack_improvements
2026Q2 URL: https://www.freebsd.org/status/report-2026-04-2026-06/#_audio_stack_improvements
Важная работа с момента последнего отчёта:
-
Продолжающийся рефакторинг блокировок в sound(4).
-
Первичный рефакторинг кода микшера sound(4).
-
Исправления ошибок snd_uaudio(4) и улучшенная поддержка устройств.
-
Как всегда, больше постепенных чисток, исправлений и улучшений sound(4), драйверов устройств и virtual_oss(8).
Вы также можете следить за процессом разработки в репозитории status-updates Фонда FreeBSD, где я публикую еженедельные отчёты.
Спонсор: Фонд FreeBSD
Внедрение -fbounds-safety в стек TCP/IP ядра FreeBSD
Ссылки:
Страница вики URL: https://wiki.freebsd.org/BoundsSafety
Страница проекта URL: https://freebsdfoundation.org/project/adopt-fbounds-safety-in-the-freebsd-kernel-tcp-ip-stack/
Контакт: Abhijeet Sharma <abhijeetsharma2002@gmail.com>
Флаг -fbounds-safety в Clang позволяет коду на C указывать длину буфера, как в __counted_by(len).
Затем компилятор проверяет обращения через этот указатель.
Обращение за границы диапазона вызывает срабатывание вместо повреждения памяти.
Стек TCP/IP разбирает недоверенный сетевой ввод, поэтому это хорошее место для начала.
Этот проект добавляет макросы и поддержку сборки, затем преобразует файлы TCP по одному.
Без этого флага аннотации разворачиваются в пустоту.
Дерево по-прежнему собирается с компилятором базовой системы и с GCC.
Этот квартал
-
Внешний инструментарий собирает GENERIC на amd64, рецепт на вики.
-
Макросы, параметр сборки и программные ловушки опубликованы, четыре рецензии приняты.
-
tcp_ecn.cработает с проверками, ядро загружается и проходит тесты netinet. -
RFC по аксессору mbuf на arch@ и net@, обсуждение продолжается.
Спонсор: Фонд FreeBSD
Поддержка Netlink для туннельных интерфейсов
Контакт: Pouria Mousavizadeh Tehrani <pouria@FreeBSD.org>
Вслед за работой над geneve(4) я занимался переносом наших других туннельных драйверов на новый KPI if_clone и добавлением для них поддержки netlink как в ядре, так и в ifconfig(8). Теперь они доступны в CURRENT.
На данный момент я добавил поддержку:
-
Поддержка Netlink для gre(4) с регрессионным тестом. (D55366)
-
IFLAF_GROUP — специфичный для FreeBSD атрибут netlink для передачи групп интерфейсов, поскольку IFLA_GROUP работает только с одним числовым идентификатором группы. ifconfig(8) теперь считывает группы интерфейсов из него. (D58643)
Попутно я исправил следующие ошибки:
-
Гонки при инициализации модуля gre(4) и уничтожении клонированных интерфейсов в джейлах. (D57669)
-
Паника в vxlan(4) при передаче неиспользуемых значений drvspec. (D58552)
-
Неверный перевод имён интерфейсов в дампах Linux netlink под linux(4) и сопоставление большего числа типов интерфейсов с ARPHRD. (D59595)
Ведущаяся работа:
-
Полная поддержка ключа GRE. (D59849)
Инфраструктура декодирования полезной нагрузки Netlink для инструментов трассировки FreeBSD
Ссылки:
Страница проекта
Контакт: Ishan Agrawal <ishan@freebsd.org>
Наставник: Kristof Provost <kp@freebsd.org>
PF использует Netlink для связи между инструментами пользовательского пространства и ядром, но до этой работы truss(1) не мог осмысленно декодировать полезную нагрузку сообщений PF Netlink и вместо этого отображал большую часть сообщения как необработанные данные.
Этот проект добавляет многоразовую инфраструктуру декодирования полезной нагрузки Netlink в libsysdecode и интегрирует её с truss(1), позволяя структурированно декодировать сообщения Netlink, а не раскрывать только их необработанное содержимое.
Ядром инфраструктуры является универсальный декодер атрибутов на основе таблиц декодеров. Инфраструктура поддерживает декодирование различных типов атрибутов, включая целочисленные значения, строки, логические значения и вложенные атрибуты. Затем команды Netlink могут предоставлять собственные таблицы декодеров, описывающие содержащиеся в них атрибуты, без необходимости отдельного механизма декодирования для каждой команды.
Инфраструктура была использована для добавления декодирования нескольких команд PF Netlink, включая PFNL_CMD_KILLSTATES, PFNL_CMD_GETRULES и PFNL_CMD_GET_LIMIT.
Например, сообщение PF Netlink, которое ранее отображалось в основном как непрозрачный буфер:
recvmsg(3,{0x90d83dda940,12,[{"@\^A\0\0\^P\0\^C\^C\^A\0\0\0\0\0"...,65536}],1,{},0,0},0) = 1060 (0x424)
С новой инфраструктурой декодирования truss(1) может декодировать сообщение Netlink и полезную нагрузку PF в осмысленные поля, например:
sendto(5,netlink{flags=NLM_F_REQUEST|NLM_F_ACK|NLM_F_ROOT|NLM_F_MATCH,seq=8,pid=0,len=92,type=18,pfctl={cmd=PFNL_CMD_GETSTATES{ifname=,proto=0,af=0,filter_addr=::,filter_mask=::,include_rule=FALSE}}},92,0,NULL,0) = 92 (0x5c)
truss(1) также был расширен для отслеживания протокола, связанного с сокетами AF_NETLINK, чтобы сообщения можно было передавать соответствующему декодеру.
Флаги сообщений Netlink декодируются как комбинации флагов NLM_F_*, при этом неизвестные биты сохраняются.
Работа в этом квартале заложила инфраструктуру, необходимую для продолжения добавления декодеров полезной нагрузки PF Netlink без дублирования логики разбора для каждой команды.
Спонсор: Google LLC (GSoC 2026)
Обновление LinuxKPI 802.11 и встроенной поддержки беспроводных сетей
Ссылки:
Поддержка беспроводных карт MediaTek URL: https://github.com/FreeBSDFoundation/proj-laptop/issues/66
Страница MediaTek mt76 в Wiki URL: https://wiki.freebsd.org/WiFi/Mt76
Отчёты о проблемах с беспроводными сетями URL: https://bugs.freebsd.org/bugzilla/showdependencytree.cgi?id=277512&hide_resolved=1
Espressif Systems ESP32-E22 URL: https://www.espressif.com/en/products/socs/esp32-e22
Драйвер WiFi Espressif на github URL: https://github.com/espressif/esp32e22-linux-driver
Контакт: Bjoern A. Zeeb <bz@FreeBSD.org>
Контакт: Рассылка FreeBSD по беспроводным сетям <wireless@FreeBSD.org>
Этот отчёт посвящён усилиям по использованию лицензионно-разрешительных драйверов беспроводных сетей Linux, в основном неизменённых, во FreeBSD, а также подготовке собственного стека net80211 к поддержке новых стандартов.
Поддержка Mediatek mt76
Был объявлен призыв к тестированию для PCIe-чипсетов на базе mt7921 (MT7920E; MT7921E, также известный как AMD RZ608; MT7922E, также известный как AMD RZ616). Это основано на текущих проверках, в основном для замены старого обходного решения в LinuxKPI для struct page. Несмотря на большой интерес к драйверу в предыдущие годы, мы не получили много отзывов.
Работа по поддержке других чипсетов mt76 будет продолжена.
Поддержка Realtek rtw8x
Благодаря отладке пользователями ситуация немного улучшилась. Ожидается, что Linux v7.3 содержит много исправлений ошибок в драйверах, но из-за несовпадения графиков релизов Linux и FreeBSD они, возможно, снова попадут только в main. Предстоит ещё работать и устранять появляющиеся проблемы.
Поддержка USB в LinuxKPI
В предыдущих отчётах мы сообщали, что это было заблокировано опцией компилятора. В течение Q3 мы нашли способ ограничить область действия только драйверами USB LinuxKPI. Ведутся работы по упрощению системы сборки для этого. Хотя ещё есть шероховатости, особенно в части завершения работы и отключения, мы надеемся в течение октября выложить стек изменений на проверку или дерево для тестирования.
Обновления нативного net80211 (технический долг)
Ведутся начальные работы по удалению обходных решений из LinuxKPI и исправлению net80211.
Поддержка Espressif Systems ESP32-E22
Текущий upstream-драйвер от Espressif Systems на Github v0.6 был портирован на FreeBSD. Начальные изменения для исправления предупреждений компилятора были отправлены обратно в виде pull request’ов. Драйвер в настоящее время ожидает импорта от вендора, после чего в дереве FreeBSD будет выполнен unifdef, поскольку upstream поддерживает широкий диапазон версий Linux. Особая благодарность Espressif Systems за предоставление мне двух образцов карт E22 для тестирования порта.
Спонсор: Фонд FreeBSD Спонсор: Espressif Systems (аппаратное обеспечение)
Серия улучшений IPv6
Контакт: Pouria Mousavizadeh Tehrani <pouria@FreeBSD.org>
С момента последнего отчёта я продолжал обновлять наш стек IPv6 и реализовывать ожидающие RFC, и результаты теперь доступны в CURRENT.
На данный момент я добавил поддержку:
-
RFC 8925: Опция предпочтения IPv6-only в dhclient(8). Когда опция получена и доступно подключение по IPv6, dhclient останавливает конфигурацию DHCPv4, освобождает предыдущую аренду и ждёт в течение срока, указанного сервером, прежде чем возобновить обнаружение. Для проверки подключения по IPv6 используется Netlink. (D56637)
-
RFC 6275 (раздел 8.3) и RFC 9762 (раздел 7.1): Биты R и P опции информации о префиксе теперь предоставляются пользовательскому пространству для будущих реализаций. (D56207)
Я также исправил несколько ошибок в стеке:
Ведущаяся работа:
-
RFC 4429: Добавление поддержки Optimistic DAD. (D55229)
Я хочу особенно поблагодарить Marek Zarychta за его тесты и рецензии.
Серия улучшений стека маршрутизации
Контакт: Pouria Mousavizadeh Tehrani <pouria@FreeBSD.org>
Последние 3 месяца я работал над повышением устойчивости нашего стека маршрутизации, и результаты теперь доступны в CURRENT.
Ранее доступность каждого nexthop проверялась по статусу канала интерфейса для каждого пакета. Теперь nexthop подписываются на события канала интерфейса, и в пути пересылки проверяется только флаг доступности конечного nexthop. Когда nexthop становится недоступным, группы nexthop, содержащие его, немедленно перекомпилируются путём замены недоступных nexthop на доступные. Как только канал возвращается, nexthop возвращаются в свои обычные слоты в группе nexthop. Это означает, что многопутевой маршрут продолжает пересылать трафик, когда один из его каналов выходит из строя, без удаления маршрута. Я действительно горжусь этим.
На данный момент я добавил поддержку:
-
Подписки nexthop на события канала интерфейса. (D57375)
-
Замены недоступных nexthop в группах nexthop. (D57389)
-
RTA_PREFSRC в netlink и опции prefsrc в route(8) для выбора адреса источника исходящих пакетов, даже когда он настроен на другом интерфейсе. Это часто используется на неименованных интерфейсах и многоадресных хостах L3. (D58294)
-
Поиска ifa с учётом FIB через ifa_ifwithaddr_fib(), использованного при установке маршрутов, выборе адреса источника и проверке ICMP-редиректов. (D58305)
-
Статистики nexthop в netstat(1) с флагом -os. (D58538)
-
Нового руководства nhop(9) для замены устаревшей информации о nexthop в rtentry(9). (D58564)
Я также исправил пару ошибок в fib_algo:
Я хочу особенно поблагодарить Gleb Smirnoff, Alexander Chernikov и Mark Johnston за их рецензии и руководство по этим работам.
Ужесточение контракта BPF/ifnet: D59140
Ссылки:
Ревизия в Phabricator URL: https://reviews.freebsd.org/D59140
Репродьюсер и эпистемическая запись URL: Репродьюсер и эпистемическая запись
Контакт: Luis Castellanos <ing.castellanosdz@gmail.com>
Описание
В третьем квартале 2026 года был проведён обзор пути bpf_movein() в sys/net/bpf.c после наблюдавшегося сбоя при записи в дескриптор BPF на lo0 (FreeBSD 14.4-RELEASE-p8).
Первоначальным наблюдением был write(2), возвращающий EAFNOSUPPORT при отправке пакета через дескриптор BPF, привязанный к lo0 (DLT_NULL).
Исходная атрибуция — отсутствие инициализации sa_len в драйверах if_output — не подтвердилась после независимого обзора, проведённого Gleb Smirnoff.
Обзор установил, что репродьюсер нарушал контракт DLT_NULL: write(2) в дескриптор BPF должен добавлять в начало 32-битное слово в порядке байтов хоста, содержащее семейство адресов.
Проверка sa_len, предложенная в отдельных драйверах (if_disc.c, if_gif.c, if_loop.c, if_me.c, if_tuntap.c), не требуется, поскольку существующий контракт интерфейса BPF/ifnet уже определён на границе BPF в bpf_movein().
После этого обзора D59140 был обновлён — добавлено защитное утверждение в bpf_movein() по предложению Gleb:
MPASS(hlen <= sizeof(sockp->sa_data));
Это делает существующий контракт BPF/ifnet явным посредством защитного утверждения в точке, где контракт потребляется.
Утверждение защищает инвариант границ sa_data в точке, где потребляется вычисленная длина заголовка.
Выполненная работа
-
Выявлен и воспроизведён
EAFNOSUPPORTнаlo0с помощью BPF write(2) на FreeBSD 14.4-RELEASE-p8. -
Отправлен D59140 в Phabricator с первоначальным исправлением, нацеленным на пять драйверов
if_output. -
Получен обзор от Gleb Smirnoff, выявивший дефект репродьюсера: отсутствие 32-битного заголовка семейства адресов DLT_NULL в пакете.
-
Репродьюсер исправлен и проверен локально на FreeBSD 14.5-RELEASE.
-
D59140 обновлён: проверки на уровне драйверов заменены одним утверждением
MPASSвbpf_movein()(Diff 186596). -
Обновлены Summary и Test Plan в D59140 для документирования полной истории исследования: наблюдённый сбой → исходная атрибуция → независимое опровержение → исправленный репродьюсер → локальная проверка → предложение по ужесточению в upstream.
Работа в процессе
-
D59140 (Diff 186596) находится на обзоре в upstream.
Открытые задачи
-
Ожидать обзор в upstream и решение по Diff 186596.
Улучшения обнаружения и диагностики систем хранения
Ссылки:
DTrace-пробы жизненного цикла CAM URL: https://reviews.freebsd.org/D58523
События аннулирования периферийных устройств CAM URL: https://reviews.freebsd.org/D58527
Информация об обнаружении mpsutil URL: https://reviews.freebsd.org/D58528
Контакт: Warner Losh <imp@FreeBSD.org>
Несколько изменений в этом квартале сделали обнаружение устройств хранения более удобным для наблюдения и диагностики, особенно во время загрузки.
Провайдер DTrace CAM получил пробы для ошибок ввода-вывода периферийных устройств, восстановления после ошибок и аннулирования периферийных устройств. Дополнительные пробы сообщают, когда CAM удерживает или освобождает процесс загрузки и когда регистрируется новая шина. Вместе эти пробы охватывают гораздо большую часть пути от начального обнаружения шины до создания дисковых периферийных устройств. Их также можно использовать с анонимной трассировкой DTrace для исследования проблем, возникающих до того, как система достигнет многопользовательского режима. Новые пробы документированы в dtrace_cam(4).
CAM теперь отправляет уведомление devctl(4), когда периферийное устройство аннулируется. Уведомление включает серийный номер устройства, когда он доступен, или в противном случае его путь CAM, чтобы программное обеспечение управления системой могло идентифицировать исчезнувшее устройство. Общий код, используемый для построения уведомлений CAM, был выделен для поддержки этого и будущих типов событий.
Два исправления улучшили обработку дисков, которые отказывают во время проверки.
CAM теперь прекращает проверку после аннулирования периферийного устройства вместо отправки дополнительных команд заброшенному устройству, где они могли вызвать длительные тайм-ауты и запутанные ошибки.
Было исправлено связанное условие для определения того, когда аннулировать диск.
Ошибки, сообщаемые для дисков NVMe через периферийное устройство CAM nda, теперь идентифицируют набор команд, что упрощает интерпретацию кодов операций команд.
mpsutil(8) получил команду show discovery, которая выводит таблицы обнаружения контроллера.
Это раскрывает представление контроллера о подключённых устройствах SAS и экспандерах и полезно при диагностике устройств, которые отсутствуют или подключены через неожиданный путь.
Наконец, nvmecontrol(8) получил исправления корректности для данных Autonomous Power State Transition. Значения переходов теперь кодируются без промежуточного целочисленного переполнения, а данные идентификации, сообщающие чрезмерное число состояний питания, обрабатываются с помощью проверки границ вместо утверждения.
Спонсор: Netflix
Поддержка обнаружения splitlocks на x86
Контакт: Konstantin Belousov <kib@FreeBSD.org>
Большинство не-x86 платформ относительно строги в отношении правильного выравнивания типов данных. С другой стороны, ISA x86 допускает любое выравнивание для операндов целочисленных скалярных операций.
Тем не менее, в регистре флагов процессора есть управляющий бит AC, который вызывает исключение выравнивания (fault) при невыровненных операциях. Практически этот бит не слишком полезен, потому что большинство компиляторов генерируют код, который полагается на свободу невыровненного доступа на x86.
Особенно интересный случай невыровненного доступа — когда расположение операнда приводит к тому, что он охватывает две строки кэша (что невозможно для естественно выровненных данных). Обычные (незаблокированные) операции вызывают так называемые torn reads и writes (рваные чтения и записи). Этот эффект становится наблюдаемым начиная с микроархитектуры Intel Core2.
Ещё более интересный случай предоставляют заблокированные операции с использованием префикса LOCK в инструкции read-modify-write с невыровненными данными. Чтобы удовлетворить гарантии ISA в этом случае, CPU должен либо захватить более одной строки кэша для эксклюзивного владения в протоколе когерентности кэша, подобном MESI, либо задействовать так называемую блокировку шины (bus lock), обеспечивающую глобальное владение кэшем. Любой из вариантов имеет очень высокую стоимость и вызывает наблюдаемые вредные эффекты для других процессов и виртуальных машин, выполняющихся на том же физическом хосте.
Некоторое время назад Intel предоставил управление для операций блокировки, которым требуется охватывать более одной строки кэша (split locks). Включение этого управления приводит к тому, что split locks генерируют то же исключение #AC, что и флаг AC, но только для split locks, а не для всех невыровненных доступов.
Эта функция управляется MSR платформы и является глобальной для каждого CPU, что исключает возможность сделать MSR напрямую доступным для пользовательского пространства. Была разработана новая операция sysarch(2) I386_SET_SPLITLOCK, которая включает это управление для вызывающего потока. Управление является частью машинного состояния, поддерживаемого при переключении контекста.
Цель — в основном помочь в отлове ошибок, когда создаются неправильно выровненные структуры блокировки, в отличие от Linux, который использует эту функцию для искусственного наказания таких процессов путём их замедления. Если модификация кода программы невозможна, пользователи и администраторы могут через LD_PRELOAD загрузить тривиальный разделяемый объект, который включает это управление.
Спонсор: Фонд FreeBSD
Драйвер устройств Aquantia / Marvell aq(4)
Ссылки:
Коммит, добавляющий снимок драйвера aq(4) URL: https://cgit.freebsd.org/src/commit/?id=493d26c58e732dcfcdd87993ef71880adfe9d0cb
Коммит, добавляющий инфраструктуру сборки aq(4) URL: https://cgit.freebsd.org/src/commit/?id=75177aebf0397af36b1f28f6b6e64207ec3d8188
Коммит, добавляющий поддержку Atlantic 2 (AQC113) URL: https://cgit.freebsd.org/src/commit/?id=dc5c0fc51cf47d6dfc737343e06805db294258e9
Контакт: Ed Maste <emaste@freebsd.org>
Контакт: Nick Price <nprice@freebsd.org>
Устройства Aquantia (ныне Marvell) AQtion — это мультигигабитные Ethernet-контроллеры PCIe, поддерживающие скорости до 10 Гбит/с. Они встречаются на материнских платах рабочих станций и настольных компьютеров, а также на дополнительных сетевых картах.
Aquantia опубликовала драйвер FreeBSD для своих контроллеров первого поколения "Atlantic", но он некоторое время не поддерживался. Разработчики FreeBSD внесли некоторые исправления в репозиторий производителя, но несколько pull-запросов так и остались без ответа. Драйвер был доступен в коллекции портов как пакет net/aquantia-atlantic-kmod с некоторыми дополнительными патчами, но он не входил в базовую систему и не поддерживал новые устройства.
Ed Maste импортировал снимок драйвера производителя, применил патчи из неслитых pull-запросов и порта, написал страницу руководства aq(4) и подключил драйвер к сборке.
С тех пор Nick Price добавил поддержку контроллеров второго поколения Atlantic 2 (AQC113) и внёс обширные исправления и улучшения по всему драйверу. Среди них — включение jumbo-фреймов, программного LRO и приостановки/возобновления; исправление распределения очередей RSS и соблюдение политики RSS ядра; расширение и исправление разгрузки контрольных сумм и VLAN, а также фильтрации VLAN/многоадресных рассылок; повышение надёжности путей attach, detach, reset, interrupt и RX/TX; обработка теплового отключения PHY; улучшение диагностики и отчётности о состоянии канала.
Драйвер доступен в снимках -CURRENT и был перенесён (MFC) в stable/15 для включения в FreeBSD 15.2.
Спонсор: The FreeBSD Foundation (работа Ed)
Архитектуры
Обновление специфичных платформенных функций и добавление поддержки новых аппаратных платформ.
Разработка драйверов FreeBSD для BananaPi R2 / R64 / R2 Pro
Контакт: Martin Filla <freebsd@sysctl.cz>
Этот проект добавляет поддержку FreeBSD для трёх роутерных плат Banana Pi: BPI-R2 (MediaTek MT7623, armv7), BPI-R64 (MediaTek MT7622, arm64) и BPI-R2 Pro (Rockchip RK3568, arm64).
Введение в BPI-R2 (MT7623)
Banana Pi BPI-R2 — это роутерная плата на базе MediaTek MT7623N (четырёхъядерный
ARM Cortex-A7, до 1,3 ГГц) с 2 ГБ DDR3, 8 ГБ eMMC, 4x Gigabit LAN и
1x Gigabit WAN, управляемыми встроенным коммутатором MT7530, двумя портами SATA, двумя
портами USB 3.0, слотом mini PCIe, выходом HDMI, разъёмами MIPI DSI/CSI и
обычными разъёмами UART, I2C, SPI, PWM и GPIO. Поскольку MT7623 — это
armv7-компонент, это единственная из трёх плат, которая собирается из
32-битной конфигурации ядра GENERIC.
Текущее состояние поддержки FreeBSD BPI-R2
На данный момент реализовано:
-
Поддержка платформы / machdep — карта устройств, ранняя консоль, поздняя инициализация и сброс SoC, а также опция ядра
SOC_MEDIATEKи сборка DTB дляmt7623n-bananapi-bpi-r2.dts -
Запуск SMP для четырёх ядер Cortex-A7
-
Драйвер UART
-
Управление тактированием — общая инфраструктура тактирования MediaTek (гейты, мультиплексоры, фиксированные делители), используемая контроллерами тактирования topckgen, infracfg, pericfg, hifsys, bdpsys, imgsys, vdecsys и audsys
-
Тактовые генераторы PLL (apmixedsys)
-
Регистры конфигурации системы (syscfg/syscon)
-
Pinctrl
-
GPIO
План разработки BPI-R2
Реализовать недостающие драйверы:
-
Контроллер хранилища (eMMC/SD/MMC)
-
Ethernet (GMAC) и коммутатор MT7530
-
USB 3.0 (xHCI) и T-PHY
-
SATA / AHCI
-
PCIe
-
Сторожевой таймер
-
I2C
-
SPI
-
PWM
Введение в BPI-R64
Banana Pi BPI-R64 — это отладочная плата на базе MediaTek MT7622 (двухъядерный ARM Cortex-A53, ~1,35 ГГц) с 4x Gigabit LAN, 1x Gigabit WAN, 802.11n 4x4 Wi-Fi, Bluetooth 5.0 и рядом периферийных интерфейсов (UART, SPI, I2C, GPIO, SATA, mini PCIe, eMMC и другие).
Текущее состояние поддержки FreeBSD BPI-R64
На данный момент реализовано:
-
Драйвер UART
-
Управление тактированием (clocks)
-
Pinctrl
-
Контроллер хранилища (eMMC/SD/MMC)
-
Драйвер Ethernet для GMAC MT7622
-
Драйвер USB 3.0 (xHCI)
-
T-PHY (PHY для USB и PCIe)
-
Драйвер сторожевого таймера
-
Драйвер RTC
-
Драйвер генератора случайных чисел
-
Драйвер конфигурационного пространства PCIe (pciecfg)
-
sysirq — контроллер полярности прерываний
-
PCIe — экспериментально
-
Wi-Fi — экспериментально
План разработки BPI-R64
Реализовать недостающие драйверы:
-
SATA / AHCI, включая режим SATA для T-PHY
-
GPIO
-
I2C
-
SPI
-
PWM
Ведутся работы:
-
Рецензирование и переработка драйверов тактирования
-
Коммутатор Ethernet MT7531
Введение в BPI-R2 Pro
Banana Pi BPI-R2 Pro — это следующее поколение отладочной платы умного роутера, построенной на процессоре Rockchip RK3568. Она несёт 2 ГБ памяти LPDDR4 и 16 ГБ хранилища eMMC, а также предлагает два порта USB 3.0, пять портов Gigabit Ethernet, слот M.2 Key-E и слот mini PCIe, два интерфейса MIPI DSI (один из которых можно программно переключить на LVDS), один интерфейс камеры MIPI CSI и один выход HDMI.
Текущее состояние поддержки FreeBSD BPI-R2 Pro
На данный момент реализовано:
-
Драйвер UART
-
Управление тактированием (clocks)
-
Pinctrl
-
GPIO
-
Контроллер хранилища (eMMC/SD/MMC)
-
Драйвер USB 3.0 (xHCI)
-
Драйвер сторожевого таймера
-
Драйвер PCIe
План разработки BPI-R2 Pro
Реализовать недостающие драйверы:
-
HDMI
-
MIPI DSI/CSI
Ведутся работы:
-
AHCI / SATA
-
PCIe
Поддержка ROCm во FreeBSD
Ссылки:
Форк rocm-systems с поддержкой FreeBSD URL: https://github.com/Yohello1/rocm-systems/tree/rebase-systems
Форк drm-kmod с частичной поддержкой amdkfd URL: https://github.com/Yohello1/drm-kmod-rocm/tree/super-special
Контакт: Sourojeet Adhikari <siri@racha.ca>
ROCm — это вычислительная платформа AMD, представляющая собой набор библиотек, драйверов и инструментов, используемых для программирования их ИИ-ускорителей и/или графических процессоров. Во FreeBSD есть лишь несколько способов выполнять вычислительные задачи (ИИ/машинное обучение, графика и т. д.) на GPU, и, насколько мне известно, это Vulkan и OpenGL. Оба хороши для графики, а иногда и для машинного обучения, но многие задачи просто плохо подходят для них и в итоге выполняются в ROCm или CUDA, поскольку те дают разработчику гораздо больше контроля над тем, как фактически выполняется задача.
Поэтому я постепенно переношу инструментарий ROCm во FreeBSD, что позволило бы экосистеме ИИ-ускорителей работать здесь нативно.
Большая часть моего времени в последнее время ушла на то, чтобы заставить rocr-runtime работать из моего форка rocm-systems, при этом передавая в вышестоящий проект необходимые изменения в ядре FreeBSD. Как только работа над ядром будет завершена, я смогу влить код amdkfd в drm-kmod (после большой чистки), и оттуда это в основном вопрос времени — запустить оставшиеся части rocr-runtime.
Выполненная работа
-
Драйвер amdkfd
-
Драйвер amdkfd теперь компилируется, компонуется и загружается.
-
Перенесены файлы платформы v11 для определённых поколений AMDGPU.
-
/dev/kfdтеперь доступен и с ним можно взаимодействовать. -
Очищены неопределённые символы, которые на данный момент не используются.
-
-
Системы ROCm
-
Исправлены проблемы инициализации.
-
Рефакторинг всех изменений перед крупной передачей в вышестоящий проект кода, который может быть передан.
-
-
Ядро FreeBSD
-
linux/util_macros.h` (D57465) зафиксирован в ядре.
-
Добавлен
jiffies64_to_msecs(D58075), зафиксирован в ядре. -
Добавлен
compat_ptr_ioctl(D58076), зафиксирован в ядре. -
Добавлен
tgidвtask_structпод LinuxKPI (D58228), зафиксирован в ядре. -
Различные другие изменения, связанные с LinuxKPI, всё ещё находятся на рецензировании (D58207, D58222, D58845, D60275).
-
В rocm-systems было принято около двух pull-запросов, в остальном я всё ещё работаю над большим, который вливает поддержку FreeBSD. Тот код ещё не завершён, поэтому я его не открывал.
Ведущаяся работа
-
Исправление проблем инициализации в rocr-runtime и решение всего остального, что проявится, когда он заработает дальше.
-
Завершение большого pull-запроса rocm-systems и его открытие в вышестоящем проекте.
-
Исправление проблем с Sysfs в amdkfd. Всё ещё диагностирую проблемы и выясняю, в чём именно дело.
Требуется помощь
-
Поддержка RDNA 1 и RDNA 2: я закомментировал/заглушил все структуры и функции, связанные с RDNA 1 и 2, потому что у меня нет этих карт и сейчас нет времени их должным образом протестировать. Если у вас есть эти карты и время их протестировать, пожалуйста, свяжитесь со мной, и я расскажу вам точно, как это сделать.
Эта работа была спонсирована Фондом FreeBSD! Спасибо Фонду FreeBSD!!
Спонсор: Фонд FreeBSD
Облачная архитектура
Обновление специфичных облачных функций и добавление поддержки новых облачных платформ.
FreeBSD на EC2
Ссылки:
Запуск настольных AMI FreeBSD/EC2 URL: https://www.daemonology.net/blog/2026-09-24-Launching-FreeBSD-EC2-desktop-AMIs.html
Контакт: Colin Percival <cperciva@FreeBSD.org>
FreeBSD доступен на экземплярах EC2 как amd64 (Intel и AMD), так и arm64 (Graviton).
Применено исправление привязки taskqueue к NUMA в ena(4), что начиная с 14.5-RELEASE дало значительное улучшение пропускной способности сети на системах c8gn.48xlarge.
EC2 теперь поддерживает автоматическое увеличение файловых систем при расширении томов EBS; это включено по умолчанию в 16.0-CURRENT и будет доступно как необязательная опция в 15.2-RELEASE.
Инструмент ebsnvme, поставляемый в образах EC2, теперь поддерживает команду "ebsnvme stats", совместимую с Amazon Linux.
Теперь для FreeBSD 15 доступен новый «настольный» вариант AMI, который использует xrdp для предоставления среды KDE.
Спонсор: Amazon
Спонсор: https://www.patreon.com/cperciva
Документация
Значительные изменения в дереве документации, страницах Справочника или новые внешние книги/документы.
Команда документационной инженерии
Ссылки:
Портал проекта документации URL: https://docs.freebsd.org/
Руководство по проекту документации для новых участников URL: https://docs.freebsd.org/en/books/fdp-primer/
Команда документационной инженерии URL: https://www.freebsd.org/administration/#t-doceng
Контакт: Documentation Engineering Team <doceng@FreeBSD.org>
Команда документационной инженерии отвечает за определение целей документации для коммиттеров проекта документации и контроль за их выполнением. Устав команды doceng подробно описывает обязанности и сферу ответственности команды документационной инженерии.
В этом квартале в проекте документации, помимо текущего сопровождения, несколько проектов были завершены или находились в работе:
-
Dave Cottlehuber <dch@FreeBSD.org> добавил главу об OCI-контейнерах в Handbook.
-
Benedict Reuschling <bcr@FreeBSD.org> и Sergio Carlavilla Delgado <carlavilla@FreeBSD.org> обновили главу о ZFS в Handbook.
-
Danilo G. Baio <dbaio@FreeBSD.org> улучшил примеры в handbook, добавив кнопку копирования, которая опускает приглашение оболочки.
-
Danilo G. Baio <dbaio@FreeBSD.org> обновил textproc/po4a, инструментарий перевода, до версии 0.74.
-
Älven <alven@FreeBSD.org> обновил textproc/groff, инструментарий GNU для страниц руководства, до версии 1.24.2.
-
Fernando Apesteguia <fernape@FreeBSD.org> обновил www/gohugo, генератор сайта, до версии 1.76.0.
-
Wolfram Schneider <wosch@FreeBSD.org> обновил man.FreeBSD.org, старейший и крупнейший архив страниц руководства в интернете.
-
Alexander Ziaee <ziaee@FreeBSD.org> обновил руководящие указания для руководств по драйверам устройств; приведение всех руководств к этому формату продолжается.
-
Alexander Ziaee <ziaee@FreeBSD.org> улучшает совместимость страниц руководства с предстоящей версией textproc/mandoc 1.15.
-
Vladlen Popolitov <vladlen@FreeBSD.org> и Sergio Carlavilla Delgado <carlavilla@FreeBSD.org> вложили значительную работу в корректность кода веб-сайта проекта.
-
Vladlen Popolitov <vladlen@FreeBSD.org> и Andrey Zakhvatov <andy@FreeBSD.org> усердно работали над поддержанием актуальности русского перевода.
В этом квартале Vladlen Popolitov <vladlen@FreeBSD.org> был повышен до doc commit bit. Другие commit bit в этом квартале не выдавались и не изымались на хранение.
Проект русскоязычной документации FreeBSD (The FreeBSD Russian Documentation Project)
Ссылки:
Официальный веб-сайт FreeBSD на русском языке URL: https://www.freebsd.org/ru/
FAQ URL: https://docs.freebsd.org/ru/books/faq/
Сайт проекта русской документации FreeBSD URL: https://github.com/freebsd-doc-ru/freebsd-doc/discussions
Контакт: Андрей Захватов (Andrey Zakhvatov) <andy@FreeBSD.org>
Контакт: Владлен Пополитов (Vladlen Popolitov) <vladlen@FreeBSD.org>
Текущая цель Проекта русскоязычной документации FreeBSD — предоставлять актуальные русские переводы наиболее важных частей документации FreeBSD (FAQ, Руководство, содержимое веб-сайта). Это необходимо для поддержки русскоязычных пользователей качественными официальными техническими материалами и для расширения распространённости операционной системы по всему миру. Мы надеемся, что эта инициатива получит поддержку в русскоязычном сообществе FreeBSD и приведёт к увеличению объёма переведённых материалов.
В течение последнего квартала:
-
Проект перевода страниц Справочника FreeBSD перешел с этапа подготовки на этап реализации: около 300 документов из Раздела 1 (Общие Команды) опубликованы в порту russian/freebsd-man (со страницами Справочника для версий 15.0 и выше). Большая благодарность Глебу Попову за подготовку и публикацию порта.
-
Для релиза FreeBSD 14.5 полный комплект релизной документации (release notes, errata и т. д.) был своевременно переведён на русский язык вместе с английскими оригиналами.
-
100% текста в Weblate переведено и синхронизировано с английской версией (в августе).
-
Русскоязычный раздел www.FreeBSD.org/ru поддерживался полностью переведённым и синхронизированным с английской версией.
-
Русскоязычные страницы на веб-сайте и в документации были проверены HTML-валидатором vnu, и все ошибки были исправлены.
План на следующий квартал:
-
Продолжить текущий проект по переводу страниц Справочника FreeBSD.
Ознакомьтесь с официальным руководством по переводу, если вы хотите помочь.
Мы будем признательны за вашу помощь:
-
Установите порт russian/freebsd-man и используйте русскоязычные страницы руководства. Он доступен во всех версиях FreeBSD.
-
Отправляйте исправления и новые переводы в виде pull request’ов в репозиторий переводов на GitHub.
-
Подробности о том, как внести вклад, смотрите в CONTRIBUTING.md.
Порты
Изменения, затрагивающие Коллекцию портов, будь то массовые изменения, затрагивающие большую часть дерева, или отдельные порты.
FreshPorts: Переводы
Ссылки:
FreshPorts URL: https://www.freshports.org/
Тестовый сайт FreshPorts с переводами URL: https://test.freshports.org/
Как переводить FreshPorts URL: https://github.com/FreshPorts/freshports/tree/main/locale
Задача поддержки переводов URL: https://github.com/FreshPorts/freshports/issues/678
Контакт: Dan Langille <dvl@FreeBSD.org>
FreshPorts и его родственный сайт FreshSource сообщают о коммитах FreeBSD уже более 25 лет. Они охватывают все коммиты, но их основное внимание уделяется портам.
FreshPorts отслеживает коммиты и извлекает данные из Makefile портов, чтобы создать базу данных информации, полезной как разработчикам портов, так и пользователям портов. Например, https://www.freshports.org/security/acme.sh/ показывает историю этого порта, вплоть до его создания в мае 2017 года.
До сих пор веб-сайт был доступен только на английском языке.
FreshPorts теперь можно переводить
Почти весь собственный текст веб-сайта подготовлен для перевода с помощью gettext, включая:
-
заголовок страницы, боковую панель и нижний колонтитул
-
страницы учётной записи, а также письма о регистрации и пароле
-
страницы коммитов, портов и категорий
-
поиск и списки портов
-
страницы списка отслеживания
-
FAQ и другие информационные страницы
Язык выбирается из настроек браузера и может быть изменён с помощью средства выбора языка внизу каждой страницы.
Названия дней и месяцев также следуют выбранному языку, так что «Saturday, 3 Oct 2026» становится «2026年10月3日星期六» на китайском.
Описания портов, сообщения коммитов и термины фреймворка портов, такие как BROKEN и USES, берутся из дерева портов и остаются на английском.
Юридические страницы и страницы конфиденциальности также остаются на английском, поэтому английский текст остаётся авторитетным.
Уже предоставлены два перевода: упрощённый китайский от ykla и турецкий от Yusuf Yaman. Спасибо обоим.
Эта работа ещё не в производственной среде
www.freshports.org пока остаётся только на английском. Переводы можно предварительно просмотреть на test.freshports.org: выберите 简体中文 или Türkçe внизу любой страницы.
Требуется помощь
Предстоит перевести около 1 180 строк.
Каждый перевод — это отдельный файл .po, поэтому знания PHP не требуется, а такие редакторы, как Poedit, делают работу простой.
Чтобы внести свой вклад, см. инструкции по ссылке выше и отправьте pull-запрос:
-
Переведите FreshPorts на новый язык.
-
Помогите завершить переводы на упрощённый китайский и турецкий, которым нужны новейшие строки.
-
Проверьте существующие переводы и сообщите об ошибках перевода как о задачах GitHub.
Спасибо всем, кто помогал до сих пор.
Браузер Brave на FreeBSD: отчёт о состоянии
Контакт: Martin Filla <freebsd@sysctl.cz>
Краткое описание
Нативный порт FreeBSD, www/brave, доступен в {repo}[оверлее FreeBSD-Ports]. Он собирает Brave 1.94.120, основанный на Chromium 152.0.7977.76, для amd64 и aarch64. Сборка использует только релизные архивы и инструментарий портов (LLVM 22, Rust, Node 24). Она не использует depot_tools, gclient, CIPD или siso и не требует Linuxulator.
Состояние
-
Нативная сборка на amd64 и aarch64.
-
Списки фильтрации Shields.
-
Опции порта для Widevine (через www/foreign-cdm), PipeWire, Qt6, CUPS, Kerberos, а также ALSA, PulseAudio и sndio.
Открытые вопросы
-
Ключ служб. Без него обновления компонентов возвращают 403, поэтому нет каталога блокировки рекламы и нет CRLSet. В настоящее время порт использует тот же ключ, который поставляет Arch.
-
Leo, Brave Search и распознавание речи не имеют ключей, поэтому они не работают.
-
Средство обновления и удалённое управление отключены. Обновления поступают через pkg.
-
Версия Brave привязана к версии Chromium в www/chromium.
Dockerbox
Ссылки:
freebsd-dockerbox Github URL: https://github.com/leafoliage/freebsd-dockerbox
dockerbox-broker Github URL: https://github.com/leafoliage/dockerbox-broker
freebsd-dockerbox-debian Github URL: https://github.com/leafoliage/freebsd-dockerbox-debian
Контакт: Chun-Cheng Yeh <leafoliage@FreeBSD.org>
Dockerbox — это виртуализированный демон Docker. Хотя демон Docker изначально недоступен во FreeBSD, Dockerbox запускает его внутри виртуальной машины Debian Bhyve, чтобы обеспечить к нему доступ.
Обновления состояния
-
Dockerbox теперь поддерживает 2 вида нижележащего совместного использования файлов для bind-монтирований: virtio-9p, NFS
Оба способа предоставляют пути хоста внутрь гостя dockerbox.
Для путей на хосте bind-монтировать можно только пути, предоставленные в dockerbox. -
Dockerbox теперь поддерживает публикацию порта на настраиваемый IP-адрес привязки хоста
Раньше поддерживалась только привязка к0.0.0.0.
Это связано с тем, что dockerbox, как гость виртуальной машины, не разделяет IP-адреса хоста.
Теперь поддерживается привязка только к выбранному IP на хосте с помощью dockerbox-broker.
Пример использования:docker run --label dockerbox.bind=192.168.88.100:8080 -p 8080:80 nginx -
Dockerbox теперь поддерживает настраиваемые IP-адрес и шлюз
-
sysutils/dockerbox-broker теперь присутствует в дереве портов
-
Dockerbox-broker теперь поддерживает перенаправление UDP-портов
Спонсор: Фонд FreeBSD
KDE во FreeBSD
Ссылки:
Инициатива KDE/FreeBSD URL: https://freebsd.kde.org/
FreeBSD — KDE Community Wiki URL: https://community.kde.org/FreeBSD
Контакт: KDE on FreeBSD Mailing List <kde@FreeBSD.org>
Проект KDE во FreeBSD делает порты CMake, Qt и программного обеспечения сообщества KDE для дерева портов FreeBSD. Программное обеспечение включает полноценную среду рабочего стола KDE Plasma (как для X11, так и для Wayland) и сотни приложений, которые можно использовать на любой машине FreeBSD. Команда KDE входит в desktop@ и создаёт программный стек, чтобы сделать FreeBSD красивой и пригодной для повседневного использования в качестве графической рабочей станции.
Инфраструктура
Ведутся работы по включению CMake 4.5 в дерево портов (https://bugs.freebsd.org/295319). Qt6 и PySide6 были обновлены до 6.11.2.
Стек KDE
Релизы KDE Frameworks, Plasma и Gear выходят очень регулярно. Команда KDE обычно вносит эти обновления вскоре после их выхода в upstream.
-
Порты KDE Frameworks были обновлены до 6.31.0.
-
KDE Plasma Desktop был обновлён до 6.7.5.
-
KDE Gear был обновлён до 26.08.2.
Plasma 6.7 — последний релиз с поддержкой сессии X11. Будущий релиз KDE Plasma 6.8 будет исключительно для Wayland, поддержка приложений X11 будет полностью возложена на Xwayland. Подробности смотрите в записи блога KDE.
Связанные порты
Прекращение поддержки портов Qt5
Устаревший Qt5 всё ещё используется примерно 340 портами. В течение этого квартала порт www/qt5-webengine для Qt5WebEngine был удалён, а большинство его потребителей были переведены на Qt6. Команда KDE призывает сопровождающих мигрировать свои порты Qt5 на Qt6 и KDE Frameworks 6 и объявлять устаревшим программное обеспечение, заброшенное его разработчиками.
Улучшение OpenJDK во FreeBSD
Ссылки:
Описание проекта URL: https://freebsdfoundation.org/project/improving-openjdk-on-freebsd/
Репозиторий проекта URL: https://github.com/freebsd/openjdk
Вышестоящий репозиторий BSD-порта URL: https://github.com/openjdk/bsd-port
Контакт:
Harald Eilertsen <haraldei@FreeBSD.org>
Список рассылки FreeBSD Java <freebsd-java@lists.freebsd.org>
Цель этого проекта — улучшить поддержку OpenJDK для FreeBSD/amd64 и FreeBSD/arm64.
Java — важная среда выполнения для многих высокопроизводительных, критически важных корпоративных систем. Обеспечение корректной и эффективной работы приложений на основе Java во FreeBSD важно для того, чтобы FreeBSD продолжала оставаться жизнеспособной и привлекательной платформой для предприятий, а также компаний и организаций любого размера.
В этом квартале в вышестоящий проект были влиты несколько довольно крупных, инвазивных функций (JEP 401: Value Objects и JEP 539: Strict Field Initialization), из-за чего в этот период было трудно получать рецензии и принятие наших изменений. Мы потратили время на исправление проблем с BSD-портом, а также на поддержание его в актуальном состоянии по мере появления вышестоящих изменений.
В этом квартале были выполнены следующие исправления/улучшения:
-
Различные исправления и улучшения
-
Bug 296945: На бинарных файлах JDK теперь устанавливается ELF-флаг
wxneeded, что позволяет java работать в системах с включённой защитой W^X. -
Bug 294358: действительно собирать headless без установки библиотек Xorg
-
Удалён
USE_LDCONFIGиз портов OpenJDK 8 и 11. Исправляет Bug 297282: java/openjdk25 — libjava.so не находит libjvm.so -
Возвращать только символы, соответствующие запрошенному адресу, для dladdr(3) в BSD. Это также возвращает видимость символов libjvm по умолчанию обратно к скрытой, чтобы избежать раскрытия внутренних символов. Это также должно ускорить загрузку библиотеки и снизить потребление ресурсов.
-
-
Вышестоящий BSD-порт:
-
Отправлен черновик JEP для усилий по переводу BSD-порта в вышестоящий проект.
-
-
Порты:
-
OpenJDK 26: Обновлён до версии 26.0.2
-
OpenJDK 25: Обновлён до версии 25.0.4
-
OpenJDK 21: Обновлён до версии 21.0.12
-
OpenJDK 17: Обновлён до версии 17.0.20
-
OpenJDK 11: Обновлён до версии 11.0.32
Спонсор: Фонд FreeBSD
Модернизация HPC-портов FreeBSD
Ссылки:
sysutils/slurm-wlm URL: https://cgit.freebsd.org/ports/tree/sysutils/slurm-wlm/
net/ucx URL: https://cgit.freebsd.org/ports/tree/net/ucx/
net/openmpi URL: https://cgit.freebsd.org/ports/tree/net/openmpi/
benchmarks/py-reframe-hpc URL: https://cgit.freebsd.org/ports/tree/benchmarks/py-reframe-hpc/
sysutils/py-clustershell URL: https://cgit.freebsd.org/ports/tree/sysutils/py-clustershell/
SchedMD bug 25911: proctrack/freebsd-reaper URL: https://bugs.schedmd.com/show_bug.cgi?id=25911
SchedMD bug 25912: configless OS-specific Include files URL: https://bugs.schedmd.com/show_bug.cgi?id=25912
openucx/ucx#11549: UCS/SYS portability fixes for non-Linux platforms URL: https://github.com/openucx/ucx/pull/11549
hpc/mpifileutils#664: Portability fixes for FreeBSD/non-Linux builds URL: https://github.com/hpc/mpifileutils/pull/664
Контакт: Generic Rikka <rikka.goering@outlook.de>
Этот отчёт продолжает инициативу по модернизации HPC-портов FreeBSD, цель которой — сделать FreeBSD практичной и поддерживаемой платформой для современных стеков программного обеспечения высокопроизводительных вычислений (HPC). В предыдущих кварталах основное внимание уделялось приведению стека Slurm, PMIx, PRRTE и UCX в актуальное состояние и заполнению пробелов в окружающей экосистеме. Работа этого квартала была сосредоточена на трёх вещах: поддержании актуальности планировщика и библиотек связи (включая исправления безопасности), углублении специфичной для FreeBSD поддержки среды выполнения в UCX и обеспечении комбинации Open MPI/UCX, а также передаче первых нативных для FreeBSD функций Slurm в вышестоящий проект SchedMD.
Выполненная работа
-
sysutils/slurm-wlm обновлён трижды: с 26.05.1 до 26.05.2, а затем до 26.05.4, в соответствии с вышестоящими выпусками. Обновление до 26.05.4 также устраняет семь CVE. Благодаря проверке HDF5 на этапе конфигурации, принятой в вышестоящий проект в прошлом квартале, устаревшие нижестоящие патчи HDF5 можно было удалить, а нижестоящий
patch-configureбыл существенно сокращён. Оставшийся нижестоящий патч conmgr для FreeBSD был перебазирован, и был добавлен недостающий include<signal.h>, чтобы набор тестов собирался во FreeBSD. -
В sysutils/slurm-wlm включён
slurmrestd. Он был отключён, поскольку считалось, что он не собирается во FreeBSD, но с текущим Slurm он собирается без каких-либо дополнительных патчей переносимости. Теперь порт поставляетslurmrestdвместе с плагинами REST/OpenAPI. -
net/ucx обновлён с 1.20.1 до 1.22.0. Ранее в этом квартале порт получил защиту вокруг специфичной для Linux реализации netlink, а поддержка
ucx_vfsбыла улучшена для FreeBSD путём заменыfusermount3наmount_fusefs/umount, использования совместимого с FreeBSD определения возможностей FUSE и исправления обработки вспомогательных данных UNIX-сокетов (SCM_RIGHTSи учётных данных узла). Последующее исправление для inotify-наблюдения VFS было предоставлено Laurent Chardon. -
В net/openmpi введена опция UCX, позволяющая собирать Open MPI с net/ucx во FreeBSD (работа Laurent Chardon, основанная на тестировании и отчётах в рамках этой инициативы). Это также исправило падение OMPIO
sharedfp/sm. -
benchmarks/py-reframe-hpc обновлён дважды: с 4.10.0 до 4.10.2, а затем до 4.10.3.
-
sysutils/py-clustershell обновлён с 1.9.3 до 1.10.1, включая исправления непереносимых тестов.
-
В SchedMD передан
proctrack/freebsd-reaper— новый плагин отслеживания процессов Slurm, построенный на API процесса-сборщикаprocctl()FreeBSD. Демон шага получает статус сборщика, отслеживает потомков через смены групп процессов и вложенных сборщиков и сигнализирует отслеживаемому дереву процессов во время очистки. На тестовом узле FreeBSD он очищал осиротевшие, устойчивые к SIGTERM и вложенные дочерние процессы так же, какproctrack/pgid, и дополнительно обрабатывал экранирования черезsetsid,setpgid, двойной fork и вложенные демоны, которыеproctrack/pgidне обрабатывает. Регрессия с зомби-процессами была повторно протестирована, и узел вернулся в состояние IDLE без тайм-аута и без draining. -
В SchedMD передана поддержка
%oдля имён файловIncludeв конфигурации Slurm.Include slurm-%o.confвыбираетslurm-FreeBSD.confво FreeBSD иslurm-Linux.confв Linux, так что гетерогенный configless-кластер может хранить одну авторитетную конфигурацию наslurmctld. Это уже работает на смешанном кластере FreeBSD/Fedora с использованием соответствующих патчей порта.
Ведущаяся работа
-
Обработка отзывов рецензирования по открытым вышестоящим pull-запросам UCX (переносимость UCS/SYS для не-Linux платформ) и mpifileutils (защита API только для Linux), чтобы ещё больше сократить локальные наборы патчей портов.
-
Взаимодействие с SchedMD по поводу переданных
proctrack/freebsd-reaperи configless%oInclude.
Планы на будущее
-
Зафиксировать оставшиеся вышестоящие pull-запросы и продолжать выявлять проблемы переносимости FreeBSD, чтобы исправлять их в вышестоящем проекте, а не патчить локально.
-
Перенести патчи Slurm, принятые SchedMD, в порт и удалить соответствующие нижестоящие изменения.
-
Продолжать внимательно отслеживать вышестоящие выпуски Slurm, UCX, Open MPI, PMIx и PRRTE.
-
Задокументировать эталонное развёртывание Slurm + Open MPI + PMIx + PRRTE + UCX во FreeBSD, включая смешанную configless-конфигурацию FreeBSD/Linux, чтобы снизить барьер для новых площадок.
Улучшение поддержки libvirt для гипервизора bhyve
Ссылки:
libvirt: драйвер Bhyve URL: https://libvirt.org/drvbhyve.html
Контакт: Roman Bogorodskiy <novel@FreeBSD.org>
Выполненная работа
-
Драйвер libvirt/bhyve:
-
Добавлена поддержка конфигурации VLAN, фильтрации VLAN и изолированных портов моста во FreeBSD.
-
Добавлена конфигурация порядка загрузки для дисковых устройств.
-
Реализовано несколько новых API: переименование домена, управление жизненным циклом, получение информации о госте с помощью QEMU Guest Agent и настройка тайм-аута ответа QEMU Guest Agent.
-
Добавлена конфигурация серийного номера для дисков SATA и контроллеров NVMe, а также конфигурация EUI-64 для дисков NVMe.
-
Исправлено несколько проблем, связанных с обработкой временных и постоянных доменов, событиями монитора, сообщениями об ошибках при запуске и очисткой устройств TAP.
-
-
В QEMU Guest Agent добавлена поддержка
guest-get-fsinfoдля FreeBSD. -
Расширено покрытие libvirt-tck для libvirt/bhyve.
-
Ведётся работа над поддержкой непривилегированного
bhyve:///session.
Планы на следующий квартал
-
Завершить поддержку непривилегированного
bhyve:///session. -
Добавить поддержку устройств TPM.
-
Завершить поддержку приостановки/возобновления.
-
Продолжить реализацию функций на основе QEMU Guest Agent.
-
Продолжить расширение CI и покрыть новые функции на основе guest-agent новыми тестами.
Спонсор: Фонд FreeBSD
Последнее изменение: 10 ноября 2026 г. от Vladlen Popolitov