22.06.2021

Релиз FreeBSD 13.0

Спустя два с половиной года после формирования ветки 12.x представлен релиз FreeBSD 13.0, который подготовлен для архитектур amd64, i386, powerpc, powerpc64, powerpc64le, powerpcspe, armv6, armv7, aarch64 и riscv64. Дополнительно сформированы образы для систем виртуализации (QCOW2, VHD, VMDK, raw) и облачных окружений Amazon EC2, Google Compute Engine и Vagrant.

Основные новшества:

  • Осуществлён переход на унифицированную c Linux реализацию файловой системы ZFS от проекта OpenZFS. Среди возможностей, которые стали доступны во FreeBSD после перехода на OpenZFS: расширенная система квот, шифрование наборов данных, раздельный выбор классов распределения блоков (allocation classes), использование векторных процессорных инструкций для ускорения реализация RAIDZ и вычисления контрольных сумм, поддержка алгоритма сжатия ZSTD, режим multihost (MMP, Multi Modifier Protection), улучшенный инструментарий командной строки, исправление многих ошибок, связанных с состоянием гонки и блокировками.
  • Порт для архитектуры ARM64 (AArch64) переведён на первый уровень поддержки (Tier 1), который подпадает под сопровождение командами, отвечающими за устранение уязвимостей, подготовку релизов и поддержание портов. Первый уровень поддержки подразумевает формирование установочных сборок, бинарных обновлений и готовых пакетов, а также предоставление гарантий решения специфичных проблем и сохранения неизменности ABI для пользовательского окружения и ядра (за исключением некоторых подсистем).
  • Архитектура i386 переведена на второй уровень поддержки платформ (Tier 2), при котором будет продолжено формирование установочных сборок, бинарных обновлений и готовых пакетов, но не гарантирует решение специфичных проблем. Тип CPU (CPUTYPE) для архитектуры i386 по умолчанию изменён с 486 на 686 (при желании сборки для i486 и i586 можно сформировать самостоятельно).
  • Компоненты clang, lld, lldb, compiler-rt, llvm, libunwind и libc++ обновлены до версии 11.
  • Разработка переведена из централизованной системы управления исходными текстами Subversion в децентрализованную систему Git.
  • Проведена чистка базовой системы от приложений, распространяемых под лицензией GPL. Из дерева исходных текстов удалены binutils 2.17 и gcc 4.2.1, все поддерживаемые архитектуры переведены на инструментарий LLVM/clang. Включены распространяемые под лицензией BSD варианты утилит grep и dtc (Device Tree Compiler), которые заменили собой версии под лицензией GPL. Удалён процесс автоматического монтирования amd, функциональность которого теперь реализована через autofs. Удалена утилита ctm, вместо которой рекомендуется использовать порт misc/ctm.
  • Переписан стек маршрутизации, в котором появилась поддержка объектов nexthop, хранящих данные о состоянии, используемом для передачи пакета в желаемую точку назначения. Добавлена возможность подключения собственных алгоритмов поиска маршрутов. Добавлены алгоритмы поиска маршрутов из DPDK (Data Plane Development Kit) librte, позволяющие оптимизировать работу с очень большими таблицами маршрутизации. Для запросов proxyarp задействован интерфейс fib. Добавлена возможность изменения числа fib на лету через sysctl net.fibs. Реализована поддержка временных маршрутов для IPv4 и IPv6 (с выставленным временем жизни).
  • Переписана и сделана более масштабируемой поддержка Multipath-маршрутизации, в которой время поиска не зависит от размера списка (O(1)). Новая реализация Multipath теперь связана с параметром ядра ROUTE_MPATH, который заменил собой RADIX_MPATH и включён по умолчанию. Для управления Multipath предложен sysctl net.route.multipath.
  • Переделан реализованный на уровне ядра криптографический фреймворк, в котором появилась поддержка современных криптографических алгоритмов и упрощён интерфейс для использования шифрования в драйверах и других компонентах ядра. Удалены устаревшие алгоритмы ARC4, Blowfish, CAST128, DES, DES, MD5-HMAC и Skipjack. В IPsec и Kerberos прекращена поддержка алгоритмов, объявленных устаревшими в RFC 8221 и RFC 6649/8429, в том числе 3DES. Удалены ранее объявленные устаревшие алгоритмы в подсистеме дискового шифрования geli и cryptodev.
  • В ядро GENERIC включена поддержка драйверов aesni и armv8crypto для ускорения дискового шифрования на базе geli при помощи инструкций AES-NI для архитектур amd64/i386 и AES-XTS для ARM64.
  • Добавлен драйвер qat для криптоакселераторов Intel QuickAssist (QAT) и драйвер ossl с реализацией ускоренных программных процедур шифрования из OpenSSL, оптимизированных при помощи кода на ассемблере. В драйвере armv8crypto добавлена поддержка AES-XTS и AES-GCM с использованием соответствующих инструкций процессоров ARMv8.
  • Добавлена реализация TLS (kTLS), работающая на уровне ядра FreeBSD, которая позволяет добиться существенного увеличения производительности шифрования для TCP-сокетов. Поддерживается верcий TLS с 1.0 по 1.3. Для шифрования используются криптодрайверы ядра с поддержкой AES-CBC или AES-GCM. Для использования kTLS в пространстве пользователя требуется пересборка OpenSSL с опцией WITH_OPENSSL_KTLS.
  • Добавлен новый тип сетевых буферов mbuf (network data buffer), который может представлять в одном буфере несколько не отражённых физических страниц памяти, что позволяет увеличить производительность вызова sendfile(2) за счёт сокращения размера списков mbuf в буферах сокета.
  • В TCP-стек интегрирована поддержка алгоритма пропорционального снижения интенсивности отправки пакетов (Proportional Rate Reduction, RFC 6937), позволяющего быстрее восстановить оптимальные параметры потока после временных проблем с передачей данных. Для отключения PRR предусмотрен sysctl net.inet.tcp.do_prr.
  • Расширены возможности гипервизора Bhyve: Добавлена поддержка предоставления совместного доступа к файлами при помощи VirtIO-9p (VirtFS). Реализована возможность работы со снапшотами виртуальных машин. Добавлена поддержка устройств PCI HDAudio и дополнительных последовательных портов COM3 и COM4. Удалены устаревшие модели устройств bvmconsole и bvmdebug. Повышена стабильность работы с клиентами VNC, включая macOS-приложение «Screen Sharing».
  • В драйверы VirtIO добавлена поддержка спецификации VirtIO V1, что улучшило совместимость гостевых систем с FreeBSD с различными эмуляторами и гипервизорами.
  • Для прикрепляемых к jail-окружениям процессов обеспечено преобразование привязок к CPU (изначально привязанный к процессу cpuset будет заменён с учётом cpuset jail-а и выставленных ограничений).
  • Добавлена возможность сборки базовой системы FreeBSD в окружениях на основе других операционных систем. Необходимость сборки в других операционных системах обусловлена желанием задействовать для тестирования FreeBSD инструментарии непрерывной интеграции, завязанные на Linux или macOS.
  • Предложен новый стек MMC/SD, основанный на фреймворке CAM и позволяющий подключать устройства с интерфейсом SDIO (Secure Digital I/O). Например, SDIO используется во WiFi и Bluetooth модулях для многих плат, таких как Raspberry Pi 3. Новый стек также позволяет использовать интерфейс CAM для отправки SD-команд из приложений в пространстве пользователя, что даёт возможность создавать драйверы устройств, работающие на уровне пользователя.
  • Улучшена работа прослойки для совместимости с Linux. Файлы DTS (Device Tree Sources) синхронизированы с ядром Linux 5.8.
  • Добавлена поддержка NFSv4.2 (RFC-7862) и реализована возможность работы NFS поверх шифрованного канала связи на базе TLS 1.3, вместо использования Kerberos (режим sec=krb5p), который ограничивался шифрованием только RPC-сообщений и был реализован только программно.
  • Удалена устаревшая версия отладчика GDB, который раньше был установлен в каталоге /usr/libexec и применялся в утилите crashinfo. Вместо предустановленного GDB для получения детальной информации о причинах краха теперь предлагается установить свежую версию GDB из портов или пакетов. Прекращена поддержка отладки процессов через procfs. Добавлен драйвер netgdb, позволяющий обращаться к отладчику ядра по сети.
  • Из libc удалена небезопасная функция gets (начиная со стандарта C11 данная функция исключена из спецификации) и проведена корректировка портов, ещё использующих данную функцию. Удалены функции cap_random (следует использовать getrandom).
  • Добавлен новый системный вызов copy_file_range, совместимый с реализацией из ядра Linux и позволяющий ускорить копирование данных из одного файла в другой, благодаря выполнению операции только на стороне ядра без предварительного чтения данных в память процесса. Системный вызов также используется в сервере NFSv4.2 для локального выполнения операций копирования на сервере (без передачи клиенту).
  • В механизме асинхронного ввода/вывода POSIX AIO представлена поддержка векторизированных функций. В частности, добавлены системные вызовы aio_writev и aio_readv, позволяющие реализовать векторизированные эквиваленты функций aio_read и aio_write.
  • Прекращена поддержка компонентов пространства пользователя для поддержки формата исполняемых файлов a.out на системах с архитектурой i386. Удалена утилита elf2aout.
  • Объединены утилиты ping и ping6. В ping добавлена возможность установки параметров качества сервиса (QoS) через IP DSCP и Ethernet PCP.
  • В утилите freebsd-update обеспечен показ прогресса загрузки файлов и добавлены команды updatesready и showconfig для проверки наличия обновлений и показа конфигурации.
  • Проведена большая работа по улучшению поддержки систем NUMA (Non-Uniform Memory Access).
  • Обновлены графические драйверы и компоненты графического стека. Решены проблемы с работой окружений на базе протокола Wayland.
  • Добавлена подсистема backlight для создания драйверов управления подсветкой. Добавлен драйвер pwm-backlight для управления подсветкой Pinebook и Pinebook Pro.
  • Поддержка протокола SCTP вынесена в отдельный модуль sctp.ko, который отключён по умолчанию в ядре GENERIC.
  • Для устройств ввода предложен новый драйвер usbhid, использующий фреймворк hid для работы с устройствами USB HID, вместо драйверов ukbd, ums и uhid.
  • В драйвере cpufreq реализована поддержка технологии Intel Speed Shift.
  • Добавлена поддержка новых плат на базе 64-разрядных CPU ARMv8, включая SoC Broadcom BCM5871X и NXP LS1046A.
  • Для архитектуры AMD64 реализована поддержка 57-разрядных виртуальных адресов (LA57). Добавлена поддержка китайских x86 CPU Hygon Dhyana на основе технологий AMD.
  • Порт для архитектуры powerpc64 переведён на использование LLVM и ABI ELFv2 (на системах powerpc64 бинарные файлы из прошлых версий FreeBSD не смогут использоваться во FreeBSD 13). Для powerpc64 портированы драйверы virtio, ixl, mrsas, aacraid, cpld.
  • Удалены драйверы для устаревших Ethernet-адаптеров:
    • bm(4) BMAC
    • cs(4) Crystal Semiconductor CS8900/CS8920
    • de(4) DEC DC21x4x
    • ed(4) NE-2000 and WD-80×3
    • ep(4) 3Com Etherlink III (3c5x9) ISA
    • ex(4) Intel EtherExpress Pro/10 and Pro/10+
    • fe(4) Fujitsu MB86960A/MB86965A
    • hme(4) Sun Microelectronics STP2002-STQ
    • pcn(4) AMD PCnet
    • sf(4) Starfire
    • sn(4) SMC 91Cxx
    • tl(4) Texas Instruments ThunderLAN
    • tx(4) SMC 83c17x
    • txp(4) 3Com 3XP Typhoon/Sidewinder (3CR990)
    • vx(4) 3Com EtherLink III / Fast EtherLink III (3c59x) PCI
    • wb(4) Winbond W89C840F
    • xe(4) Xircom PCMCIA
  • Удалены драйверы ubsec (криптоакселераторы Broadcom BCM58xx), ufm (FM-тюнеры с интерфейсом USB), ctau (Cronix Tau), cx (Cronix Sigma) и vpo (parallel port SCSI).

Источник.