Отчёт о состоянии работ FreeBSD за третий квартал 2026

Это третий отчёт о состоянии за 2026 год, содержащий 51 запись.

Этот отчёт публикуется немного позже, чем последние несколько, но мы наконец здесь! Основная причина задержки — недавняя проблема с уязвимостями PHP: https://reviews.freebsd.org пришлось на некоторое время отключить, и, к сожалению, некоторые отчёты всё ещё рассматривались там. Но проблема теперь исправлена, и мы вернулись в график. Поскольку это произошло в октябре, не ожидайте прочитать об этом в данном отчёте о состоянии. Это будет материалом для последнего отчёта о состоянии за 2026 год: не пропустите!

Приятного чтения!

Lorenzo Salvadore, от имени команды Status


Table of Contents

Отчёты команд 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
Переписка

Мы обработали переписку по ряду тем, включая текущую и будущую работу над политикой ИИ и влияние возросшего сбора данных с помощью ИИ/ботов на инфраструктуру 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

Контакт: Deb Goodkin <deb@FreeBSDFoundation.org>

FreeBSD Foundation — это некоммерческая организация в соответствии с 501(c)(3), посвящённая продвижению FreeBSD посредством как технической, так и нетехнической поддержки. Полностью финансируемый за счёт пожертвований, Фонд поддерживает разработку программного обеспечения, инфраструктуру, безопасность и усилия по сотрудничеству; организует мероприятия и саммиты разработчиков; предоставляет образовательные ресурсы; и представляет Проект FreeBSD в юридических вопросах.

Улучшения ОС

В третьем квартале 2026 года при спонсорской поддержке FreeBSD Foundation было сделано 530 коммитов в src, 82 в ports и 19 в doc.

Обратитесь к этим записям отчёта, описывающим большую часть этой спонсируемой работы по разработке:

Другие важные моменты:

Популяризация

В третьем квартале 2026 года наши усилия по популяризации были сосредоточены на расширении образовательного видеоконтента, взаимодействии с сообществом FreeBSD и подготовке к предстоящему FreeBSD Vendor Summit. Мы также продолжали освещать людей, проекты и инициативы, которые поддерживают рост и долгосрочный успех FreeBSD. Вот некоторые из способов, которыми Фонд популяризировал FreeBSD в третьем квартале 2026 года:

Непрерывная интеграция и улучшение рабочих процессов

Фонд поддерживает штатного сотрудника, посвящённого улучшению системы непрерывной интеграции и тестовой инфраструктуры Проекта.

Юридические вопросы/ИС FreeBSD

Фонд владеет товарными знаками FreeBSD, и наша обязанность — защищать их. Мы также предоставляем юридическую поддержку основной команде для расследования возникающих вопросов.

Перейдите на https://freebsdfoundation.org, чтобы узнать больше о том, как мы поддерживаем FreeBSD и как мы можем помочь вам!


Команда подготовки релизов FreeBSD

Контактное лицо: Команда управления релизами FreeBSD <re@FreeBSD.org>

Команда управления релизами FreeBSD отвечает за установление и публикацию графиков выпуска официальных релизов FreeBSD, объявление заморозок кода и поддержку соответствующих веток, среди прочего.

Команда управляла процессом выпуска 14.5-RELEASE, что привело к официальной сборке RELEASE и объявлению в сентябре. Началось планирование предстоящего 15.2-RELEASE, который должен выйти в декабре.

Команда управления релизами продолжила предоставление еженедельных промежуточных сборок для разработчиков для веток main, stable/15 и stable/14.


Команда администрирования кластера

Контакт: 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.

Аппаратное обеспечение и сетевое подключение были любезно предоставлены:

Новые официальные зеркала всегда приветствуются. Мы отметили преимущества размещения одиночных зеркал на точках обмена интернет-трафиком по всему миру, что подтверждается нашими существующими зеркалами в Австралии, Бразилии и Южной Африке. Если вы связаны с какой-либо организацией или знаете организации, готовые спонсировать одиночный зеркальный сервер, пожалуйста, свяжитесь с нами. Мы особенно заинтересованы в локациях в Европе.

Смотрите 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

Контакт: 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

Контакт: 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)

Фонд в течение 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)

Контакт: 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:

Кроме того, многие сторонние репозитории получили SPDX License Identifiers, например libxo (спасибо Juniper за это), и другие. Некоторые проекты не хотят добавлять заголовки, а некоторые всё ещё находятся в активной разработке.

Если вы хотите помочь в этой работе:

  • Проверяйте изменения в Phabricator. Исправления SPDX License Identifier находятся на очень низком уровне и легко поддаются проверке.

  • Когда станет доступен pkgconf CycloneDX, помогите с его проверкой и тестированием.

Спонсор: Фонд FreeBSD

Перечень программных компонентов FreeBSD (SBOM)

Контакт: 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:

Кроме того, многие сторонние репозитории получили 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

Контакт: 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


Скрипт рабочего стола для bsdinstall

Контакт: 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

Контакт: 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 (инфраструктура и тестирование)


Доступность для слабовидящих

Контакт: 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


Портирование проекта rdma-core во FreeBSD

Контакт: 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)

Контакт: 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

Контакт: 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

Контакт: 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


Пользовательские программы

Изменения, затрагивающие базовую систему и программы в ней.


Планировщик

Контакт: 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)

Контакт: 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) завершает троицу конфигурации

Контакт: 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


Ядро

Обновления подсистем/функций ядра, поддержки драйверов, файловых систем и другое.


Улучшения загрузчика

Контакт: 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


Улучшения приостановки/возобновления

Контакт: 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. Ниже приведён список предыдущих отчётов о состоянии работ:

Важная работа с момента последнего отчёта:

  • Продолжающийся рефакторинг блокировок в sound(4).

  • Первичный рефакторинг кода микшера sound(4).

  • Исправления ошибок snd_uaudio(4) и улучшенная поддержка устройств.

  • Как всегда, больше постепенных чисток, исправлений и улучшений sound(4), драйверов устройств и virtual_oss(8).

Вы также можете следить за процессом разработки в репозитории status-updates Фонда FreeBSD, где я публикую еженедельные отчёты.

Спонсор: Фонд FreeBSD


Внедрение -fbounds-safety в стек TCP/IP ядра FreeBSD

Контакт: 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


Контакт: Pouria Mousavizadeh Tehrani <pouria@FreeBSD.org>

Вслед за работой над geneve(4) я занимался переносом наших других туннельных драйверов на новый KPI if_clone и добавлением для них поддержки netlink как в ядре, так и в ifconfig(8). Теперь они доступны в CURRENT.

На данный момент я добавил поддержку:

  • Поддержка Netlink для gif(4) с тестами. (D57666)

  • Поддержка 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)


Контакт: 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 и встроенной поддержки беспроводных сетей

Контакт: 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 8981 регенерировались для отсоединённых префиксов. (D60051)

  • Индекс исходящего интерфейса pktinfo проверялся по неверному интерфейсу в кэше маршрутов, согласно RFC 3542, раздел 6. (D58544)

  • Неверные сообщения о несовместимости флагов RA в rtadvd(8). (D58672)

Ведущаяся работа:

  • 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:

  • Коллизию индексов nexthop между семействами, которая затрагивала маршруты IPv4 с nexthop IPv6. (D59552)

  • Утечку radix_masks в алгоритме radix_lockless. (D59112)

Я хочу особенно поблагодарить Gleb Smirnoff, Alexander Chernikov и Mark Johnston за их рецензии и руководство по этим работам.


Ужесточение контракта BPF/ifnet: D59140

Контакт: 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.


Улучшения обнаружения и диагностики систем хранения

Контакт: 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)

Контакт: 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

Контакт: 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

Контакт: 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


Документация

Значительные изменения в дереве документации, страницах Справочника или новые внешние книги/документы.


Команда документационной инженерии

Контакт: Documentation Engineering Team <doceng@FreeBSD.org>

Команда документационной инженерии отвечает за определение целей документации для коммиттеров проекта документации и контроль за их выполнением. Устав команды doceng подробно описывает обязанности и сферу ответственности команды документационной инженерии.

В этом квартале в проекте документации, помимо текущего сопровождения, несколько проектов были завершены или находились в работе:

В этом квартале Vladlen Popolitov <vladlen@FreeBSD.org> был повышен до doc commit bit. Другие commit bit в этом квартале не выдавались и не изымались на хранение.


Проект русскоязычной документации FreeBSD (The FreeBSD Russian Documentation Project)

Контакт: Андрей Захватов (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: Переводы

Контакт: 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

Контакт: 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 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.

Связанные порты

Порт x11/sddm получил несколько исправлений, улучшающих поддержку Wayland. SDDM теперь может запускать свой greeter под KWin Wayland (коммит)

Прекращение поддержки портов Qt5

Устаревший Qt5 всё ещё используется примерно 340 портами. В течение этого квартала порт www/qt5-webengine для Qt5WebEngine был удалён, а большинство его потребителей были переведены на Qt6. Команда KDE призывает сопровождающих мигрировать свои порты Qt5 на Qt6 и KDE Frameworks 6 и объявлять устаревшим программное обеспечение, заброшенное его разработчиками.


Улучшение OpenJDK во FreeBSD

Контакт:
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-портом, а также на поддержание его в актуальном состоянии по мере появления вышестоящих изменений.

В этом квартале были выполнены следующие исправления/улучшения:

Спонсор: Фонд FreeBSD


Модернизация HPC-портов FreeBSD

Контакт: 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 %o Include.

Планы на будущее

  • Зафиксировать оставшиеся вышестоящие pull-запросы и продолжать выявлять проблемы переносимости FreeBSD, чтобы исправлять их в вышестоящем проекте, а не патчить локально.

  • Перенести патчи Slurm, принятые SchedMD, в порт и удалить соответствующие нижестоящие изменения.

  • Продолжать внимательно отслеживать вышестоящие выпуски Slurm, UCX, Open MPI, PMIx и PRRTE.

  • Задокументировать эталонное развёртывание Slurm + Open MPI + PMIx + PRRTE + UCX во FreeBSD, включая смешанную configless-конфигурацию FreeBSD/Linux, чтобы снизить барьер для новых площадок.


Улучшение поддержки libvirt для гипервизора bhyve

Контакт: 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