Отчёт о развитии FreeBSD за четвёртый квартал 2020 года

Опубликован отчёт о развитии проекта FreeBSD с октября по декабрь 2020 года. Из изменений можно отметить:

  • Общие и системные вопросы
    • Основой репозиторий с исходными текстами, а также репозиторий с документацией, переведены из централизованной системы управления исходными текстами Subversion в децентрализованную систему Git (git.freebsd.org). Разработка ветки 13.0-CURRENT переведена на использование Git. Сборка веток stable/11 и stable/12 продолжается из Subversion. Репозиторий с портами планируется перевести на Git в марте 2021 года.
    • Продолжена работа по избавлению базовой системы FreeBSD от компонентов с лицензией GPL. За отчётный период из базовой системы в порты перемещён отладчик gdb (devel/gdb), вместо которого предложен отладчик lldb от проекта LLVM. Утилита gnugrep заменена на bsdgrep. Удалена библиотека libgnuregex. Рассматриваются варианты для замены dialog и gcov. Оценивается возможность замены diff3 на аналог от проекта OpenBSD.
    • Компания NetApp инициировала процесс переноса улучшений и исправлений из операционной системы ONTAP во FreeBSD. В ходе данной работы сообщество получит возможность использования наработок, реализованных в ONTAP за последние годы, а компания NetApp сократит трудозатраты по переносу новых возможностей FreeBSD в дерево исходных текстов ONTAP. За отчётный период в ядро FreeBSD передано около 40 исправлений, затрагивающих такие подсистемы, как geom, dev, amd64, net, kern и netinet.
    • На основе грантов от организации FreeBSD Foundation проведена работа по улучшению поддержки WiFi, добавлению сжатия Zstd в OpenZFS, улучшению поддержки отладчика LLDB, расширению совместимости Linuxulator с приложениями, использованию Syzkaller для fuzzing-тестирования ядра, расширению инструментария для формата ELF, применению фреймворка Capsicum для защиты различных утилит (например, got и sort), улучшению применения для рабочего стола (например, решены проблемы в приложениях OBS и Firefox, улучшена поддержка программ для работы со звуком), переводу FreeBSD/arm64 в число первичных архитектур, улучшению работы на системах RISC-V, повышению стабильности сетевого стека и расширению возможностей утилиты freebsd-update.
    • В инфраструктуре эмуляции окружения Linux (Linuxulator) продолжается работа по решению проблем с функционированием конкретных Linux-приложений. Последнее время работа в Linuxulator переключилась c консольных программ на улучшения поддержки графических приложений. Для обеспечения возможности запуска Linux-приложений в пакетах AppImages подсистема FUSE FreeBSD адаптирована для использования с FUSE-серверами Linux. Добавлена поддержка SO_PASSCRED в setsockopt(2), обработка флагов CLONE_FS и CLONE_FILES, а также поддержка опций PR_SETDUMPABLE и PR_GETDUMPABLE в prctl(2), что наряду с другими улучшениями позволило добиться работы Linux-сборок программ на базе движка Chromium.
    • В рамках инициативы по замене GDB на LLDB ведётся работа по достижению паритета в функциональности с GDB отладочного окружения на основе LLDB. Для 32- и 64-разрядных систем x86 выполнен переход на новую модель отладки, при которой отладчик работает не в одном пространстве с отлаживаемым процессом, а запускается в форме отдельного процесса lldb-server, что повышает надёжность, унифицирует удалённую и локальную отладку и упрощает модель работы с потоками/процессами в LLDB. Реализованные изменения планируется включить в состав LLDB 12.0 и предложить пользователям в выпуске FreeBSD 13.0.
    • Используемый в базовой системе инструментарий Clang/LLVM обновлён до выпуска 11.
      При сборке включён флаг “-fstack-clash-protection” для применения защиты от пересечения стека и кучи.
  • Безопасность
    • В ядро и пользовательское окружение FreeBSD принят код драйвера и инструментария VPN WireGuard. Для организации работы VPN предложен работающий на уровне ядра драйвер “if_wg” с реализацией протокола WireGuard и специфичного сетевого интерфейса, а также модифицированный вариант утилиты ifconfig для настройки туннеля. Реализация совместима со всеми официальными клиентами WireGuard для Linux, Windows, macOS, *BSD, iOS и Android.
    • Проведена работа по актуализации пакета OpenBSM с открытой реализации Sun Basic Security Module (BSM) Audit API, предоставляющего средства для управления аудитом системы. OpenBSM содержит компоненты пространства пользователя, базирующиеся на реализации CAPP Audit в macOS. В настоящее время изменения для OpenBSM переносятся из кода macOS Catalina, но к выпуску
      FreeBSD 13 планируется осуществить синхронизацию с macOS Big Sur (несмотря на публикацию исходных текстов, компания Apple не предоставляет списки изменений, поэтому приходится вручную сравнивать различия в коде).
    • Предложена новая реализации генератора псевдослучайных чисел Fenestras X, основанная на архитектуре генератора из Windows 10. Отличия от старого генератора сводятся в разделеннии наборов для разных ядер CPU (не требуется блокировка общего набора), древовидная структура генераторов и возможность буферизации для повышения производительности. Новый генератор добавлен во FreeBSD-CURRENT, но отключён по умолчанию и требует пересборки ядра с опцией RANDOM_FENESTRASX (по умолчанию предлагается старый генератор Fortuna).
    • Для архитектуры AMR64 предложен новый криптографический драйвер ossl, использующий специализированные инструкции CPU для аппаратного ускорения операций с хэшами SHA-1 и SHA-2.
  • Сетевая подсистема
    • Повышена эффективность проверки записей в таблицах маршрутизации и реализован модульный фреймворк “fib IP lookup”, позволяющий динамически подключать алгоритмы для поиска маршрутов и менять алгоритмы в зависимости от размера таблицы маршрутизации. Например, для очень крупных таблиц предложен модуль pdk_lpm4/6 с реализацией алгоритма DIR-24-8 для IPv4/IPv6. Для подключения также подготовлены модули radix4/6 (старый базовый алгоритм), bsearch4 (эффективен для очень маленьких таблиц, до 16 записей) и radix4/6_lockless (для таблиц с менее чем 1000 записями). Прирост производительности перенаправления трафика для маленьких таблиц при использовании модуля bsearch4 составляет примерно 10-15%, для крупных таблиц при использовании модуля dpdk_lpm4 – 25%.
    • Добавлена и включена по умолчанию масштабируемая реализация multipath-маршрутизации (позволяет организовать доставку пакетов одновременно по нескольким маршрутам через разные сетевые интерфейсы, привязанные к разным IP-адресам и разным шлюзам). Новая реализация базируется на концепции Nexthop и отличается решением проблем со стабильностью, более высокой производительностью, эффективным использованием кэширования и низким потреблением памяти.
    • В пакетном фильтре pf повышена эффективность кэширования]] и принято около десятка патчей, существенно повышающие производительность в некоторых ситуациях.
    • Проект K8S-bhyve, нацеленный на предоставление инструментов для развёртывания инфраструктуры оркестровки контейнеров Kubernetes в окружении FreeBSD/bhyve, опубликовал установочный образ на базе ISO/memstick.
  • Системы хранения и файловые системы
    • Продолжается работа по реализации возможности работы NFS поверх шифрованного канала связи на базе TLS 1.3, вместо использования Kerberos (режим sec=krb5p), который ограничивается шифрованием только RPC-сообщений и реализуется только программно. Новая реализация использует предоставляемый ядром стек TLS, позволяющий задействовать средства аппаратного ускорения. Код уже готов для тестирования, но требует сборки ядра с опцией “options KERN_TLS”, доступной только в ветке head/FreeBSD13. Основным ограничением остаётся применение TLS 1.2, а не TLS 1.3, как того требует спецификация. Данное ограничение будет снято после принятия в состав FreeBSD патча KERN_TLS rx с поддержкой TLS 1.3.
    • В механизме асинхронного ввода/вывола POSIX AIO представлена поддержка векторизированных функций. В частности, добавлены системные вызовы aio_writev и aio_readv, позволяющие реализовать
      асинхронные эквиваленты функций pwritev и preadv, принимающие массив элементов iovec.
    • В ZFS реализована поддержка алгоритма сжатия Zstandard (ZSTD). Изменения вошли в состав выпуска OpenZFS 2.0, а также интегрированы в ветку FreeBSD-CURRENT и добавлены в загрузчик FreeBSD.
  • Поддержка оборудования
    • Подготовлен стек драйверов для USB 4.0 и протокола Thunderbolt 3. Интерфейс USB 4.0 позволяет туннелировать различные протоколы поверх одного кабеля с разъёмом Type-C, включая PCIe, Display Port и USB 3.x, а также допускает программные реализации протоколов, например, для организации сетевых линков между хостами. В текущем виде обеспечена поддержка контроллеров Alpine Ridge и Ice Lake TBT3, а также базовой проверки ограничений безопасности и учёта топологии. Ещё не завершена работа над управлением питанием и менеджером соединений (Connection Manager), который отвечает за создание туннелей для подключения нескольких устройств через один разъём.
    • Запущен проект по обновлению драйвера для беспроводных карт Intel, нацеленный на добавлении поддержки новых чипов и стандарта 802.11ac. Реализация базируется на Linux-драйвере и коде из Linux-подсистемы net80211, работа которого во FreeBSD обеспечивается при помощи прослойки linuxkpi.
    • До версии 2.3 обновлён драйвер ena с поддержкой второго поколения сетевых адаптеров ENAv2 (Elastic Network Adapter), используемых в инфраструктуре Elastic Compute Cloud (EC2) для организации связи между узлами EC2 на скоростях до 100 Gb/s.
    • Продолжается усовершенствование портов FreeBSD для платформ ARM64, powerpc64 и RISC-V.
    • Продолжается работа над CheriBSD, ответвлением от FreeBSD для исследовательской процессорной архитектуры CHERI (Capability Hardware Enhanced RISC Instructions). Уже почти готова адаптация для процессора ARM Morello, который будет поддерживать систему управления доступом к памяти CHERI, основанную на модели защиты проекта Capsicum. Чип Morello планируют выпустить в 2021 году. Продолжается развитие CheriBSD для эталонного прототипа CHERI на базе архитектуры MIPS64 и порта для архитектуры RISC-V.
  • Приложения и система портов
    • Коллекция портов FreeBSD преодолела рубеж в 41500 портов, число незакрытых PR составляет 2516, из которых 625 PR ещё не разобраны. За отчётный период в ветку HEAD внесено 8715 изменений от 164 разработчиков. Права коммиттера портов получил Juray Lutter (otis). Лишились прав коммитеров cpm, jadawin, knu, araujo, mmokhi и scottl.

      Среди заметных обновлений портов: XFce 4.16, Mono 5.10, FPC 3.2.0,
      Lazarus 2.0.10, Ruby 2.7.2, Samba 4.12, Firefox 84.0.1,
      Chromium 87.0.4280.88, Qt5 5.15.2. Добавлена новая категория портов “education” с образовательными программами. На языке Lua переписаны обработчики ключевых слов @shell и @sample. При сборке для платформы powerpc64le задействован GCC 10. Ведётся работа по задействованию по умолчанию локали на C.UTF-8

    • Python 2.7 намечен для удаления из коллекции портов. Время жизни порта lang/python27 истекло 31 декабря 2020 года, но порт ещё не удалён, так как с ним напрямую связано около 40 других портов, среди которых www/chromium, devel/electron7 и www/qt5-webengine (ранее было удалено около 740 устаревших портов, несовместимых с Python 3).
    • В состав принята универсальная утилита ping, которая может работать с IPv6 и IPv4 (ранее для IPv6 поставлялась отдельная утилита ping6).
    • Добавлен порт с рабочим столом Xfce 4.16.
    • Рабочий стол KDE Plasma, KDE Frameworks, KDE Applications и Qt поддерживаются в актуальном состоянии и обновлены до самых свежих выпусков. Библиотека Qt обновлена до версии 5.12.2.
    • Офисный пакет LibreOffice обновлён до версии 7.0.4, реализована поддержка LibreOffice 7.1.0.0.beta1.
    • Доступен новый выпуск Bastille, системы управления контейнерами на основе FreeBSD Jail.
Release. Ссылка here.