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

Ключевые новшества:

  • Реализована архитектура armv7 (ранее были только armv6 и aarch64). В сборках armv6 теперь поставляется только образ для устройств Raspberry Pi модели «B». Для устройств BANANAPI, BEAGLEBONE, CUBIEBOARD, CUBIEBOARD2, CUBOX-HUMMINGBOARD, Raspberry Pi 2, PANDABOARD, WANDBOARD, GENERICSD задействован порт armv7. Добавлена поддержка CPU Allwinner A13. Образы для систем armv6 и armv7 по умолчанию адаптированы для загрузки с использованием EFI. Включена по умолчанию поддержка терминала для последовательных портов на базе USB OTG;
  • В пакетный фильтр ipfw добавлена поддержка именованных динамических состояний (keep-state, limit и check-state снабжены дополнительным аргументом flowname, который назначается для динамического правила опкодом keep-state или limit). Добавлен модуль ipfw_nptv6 с транслятором адресов для IPv6;
  • В конфигурации ядра по умолчанию включена опция VIMAGE, активирующая одноимённый фреймворк виртуализации, который базируется на Jail и виртуальном сетевом стеке VNET). При помощи VNET обеспечена возможность использования пакетного фильтра pf внутри jail-окружений. Добавлена возможность использования mount_fusefs в jail;
  • Добавлен драйвер netdump, позволяющий отправлять дампы состояния ядра после краха по сети, вместо их сохранения на локальном диске. Для отправки данных используется UDP-протокол, обслуживаемый минимальным обособленным TCP/IPv4 стеком. Приём дампа осуществляется netdump-сервером, запущенным на внешнем хосте. Создание Netdump целесообразно для отслеживания крахов бездисковых узлов кластеров, загружающихся по PXE машин или в случае отладки проблем в дисковой подсистеме. В утилиту dumpon добавлена поддержка сохранения дампов в сжатом виде, в том числе с использованием алгоритма zstd;
  • Проведена реструктуризация поддержки графических драйверов. Свежие драйверы для GPU AMD и Intel теперь можно загрузить из портов. Драйверы для GPU AMD и Intel также сохранены в базовой системе и по-прежнему предлагаются по умолчанию, но они отстают в плане поддержки новых графических карт. Для получения более актуальных драйверов в большинстве случаев достаточно установить порт «graphics/drm-kmod» и активировать необходимый драйвер в rc.conf при помощи опции kld_list (например, «kld_list=/boot/modules/i915kms.ko», «kld_list=/boot/modules/amdgpu.ko» или «kld_list=/boot/modules/radeonkms.ko»);
  • В файловой системе UFS2 обеспечена поддержка проверочных хэшей в таблицах групп цилиндров (cylinder-group map). В UFS/FFS также добавлена и включена по умолчанию возможность консолидации команд TRIM/BIO_DELETE для сокращения операций чтения и записи за счёт пакетной отправки сразу нескольких TRIM-сообщений. Для отключения консолидации TRIM можно использовать sysctl vfs.ffs.dotrimcons=0. В драйвере ext2fs обеспечена полная поддержка ФС ext4;
  • В сервере NFSv4.1 реализовано расширение Parallel NFS (pNFS), которое позволяет организовать высокоскоростной обмен данными между машинами сети за счет возможности распараллеливания обращения к данным на нескольких хранилищах, а также разделения передачи потоков данных и мета-данных. Реализация pNFS позволяет запустить один сервер метаданных и несколько серверов хранения, с которыми могут работать любые клиенты NFSv4.1 с поддержкой pNFS File Layout;
  • Реализован системный вызов getrandom, который позволяет получить значения от системного генератора псевдослучайных чисел через обращение к системному вызову, что обеспечивает надёжную защиту от атак, основанных на исчерпании доступных файловых дескрипторов (при отсутствии свободных дескрипторов невозможно задействовать /dev/urandom). Также добавлена библиотека getentropy, совместимая с реализациями из Linux и OpenBSD. Существенно увеличено качество случайных чисел — алгоритм генерации псевдослучайных чисел Yarrow заменён на более надёжный алгоритм Fortuna, разработанный при участии Брюса Шнайера;
  • Компоненты графического окружения KDE в портах обновлены до выпуска 5.12.5 (ранее в портах предлагался KDE 4);

  • В инсталлятор bsdinstall и загрузчик zfsboot добавлена поддержка установки и загрузки с использованием связки UEFI+GELI (шифрованные разделы на системах с UEFI);
  • В ядрах GENERIC и MINIMAL для архитектуры amd64 включена по умолчанию поддержка систем NUMA (Non-Uniform Memory Access). Для отключения поддержки NUMA можно использовать sysctl-переменную vm.numa.disabled=1 в loader.conf.
  • В систему виртуализации добавлена поддержка эмуляции устройств NVMe и запуска в jail виртуальных окружений на базе гипервизора bhyve (активируется при помощи sysctl security.jail.vmm_allowed=1). Появилась возможность приёма соединений к VNC-серверу через IPv6. Добавлена поддержка управления топологией CPU для bhyve из пространства пользователя. Добавлена поддержка virtio_scsi;
  • В syslog и syslogd добавлена поддержка протокола RFC 5424 для отправки по сети syslog-сообщений о наступлении событий;
  • Обновлён драйвер виртуальной консоли. Новый вариант обеспечивает отрисовку текста в 2-6 раз быстрее;
  • Фреймворк capsicum, позволяющий организовать изолированное выполнение приложений с ограничением использования определённых функций, включён по умолчанию для архитектур armv6 и armv7;
  • Внесены улучшения в загрузчик, написанный на языке Lua: добавлено определение списка доступных ядер во время загрузки и реализована поддержка чёрного списка модулей ядра;
  • Обновлены компоненты прослойки для обеспечения совместимости с Linux. Добавлены новые версии модулей linux.ko и linux64.ko. Обеспечена возможность использования порта x11/nvidia-driver* с модулем linux64.ko;
  • Для группы operator открыт доступ к устройству /dev/acpi, что позволяет пользователям из этой группы запускать acpiconf для перехода в спящий режим;
  • При сборке активирован по умолчанию режим повторяемой пересборки, обеспечивающий тождественность исполняемых файлов исходным текстам
    (в src.conf добавлена опция WITH_REPRODUCIBLE_BUILD). В src.conf также добавлена опция WITH_RETPOLINE для сборки компонентов пользовательского окружения с защитой от уязвимостей Spectre;

  • Для динамического связывания на системах amd64, i386 и armv7. по умолчанию задействован компоновщик ld_lld, развиваемый проектом LLVM;
  • Библиотека pthread приведена в соответствие со стандартом POSIX/SUSv4-2018;
  • В rc-скрипты добавлены новые ключевые слова «enable», «disable» и «delete» (помимо «yes» и «true»);
  • Обновлена поддержка оборудования, в том числе добавлены драйверы для AMD Ryzen 2 и Microchip LAN78xx USB3-GigE. В usb_template добавлен новый тип устройств multifunction, позволяющий работать с комбинированными USB-устройствами, которые можно использовать как накопитель, CDC ACM (serial) и CDC ECM (ethernet);
  • Для сетевых сокетов реализована опция SO_REUSEPORT_LB, которая уже поддерживается в nginx. SO_REUSEPORT_LB позволяет нескольким программам или потокам подключать свои обработчики к одному сетевому порту (поступающие запросы балансируются между подключенными обработчиками при помощи хэш-функции);

  • Процесс init адаптирован для запуска исполняемых файлов на языках, отличных от shell, например, теперь можно создавать скрипты инициализации на Python;
  • В утилиту dtrac добавлена поддержка выражений «if» и «else»;
  • В утилите geli добавлена возможность инициализации сразу нескольких шифрованных разделов, когда в них используется один и тот же пароль или ключ;
  • Переработана утилита top;
  • В качестве утилиты для многостраничного вывода по умолчанию для большинства команд задействована программа less (переменная окружения PAGER ссылается на less вместо утилиты more);
  • В утилиту localedef добавлены опции ‘-b’ и ‘-l’ для определения порядка следования байт в выводе. Утилита localedef теперь используется при сборке share/ctypedef и share/colldef;
  • Пакетный менеджер pkg в dvd1.iso и файл конфигурации pkg обновлены для использования ежеквартально обновляемого набора пакетов (2018Q4);
  • Добавлен дополнительный уровень изоляции выполнения процесса sshd, реализованный при помощи системы capsicum;
  • Переработан код управления блокировками в пакетном фильтре pf (блокировки rwlock заменены на rmlock), что позволило существенно поднять его производительность. Убраны ограничения на установку только 32-разрядных значений при лимитировании пропускной способности через ALTQ (например метод HFSC теперь может манипулировать пропускной способностью до 100 Gbps);
  • В базовую систему и набор rescue добавлена утилита bectl для управления загрузочными окружениями ZFS. Для ZFS добавлены новые
    sysctl vfs.zfs.arc_min_prefetch_ms и vfs.zfs.arc_min_prescient_prefetch_ms, позволяющие ускорить выполнение команды «zpool scrub»;

  • Программа ntpd модифицирована для запуска без привилегий root (теперь работает под UID/GID ntpd);
  • Обновлены версии поставляемых в базовой системе сторонних проектов:
    OpenSSL 1.1.1a (с поддержкой TLS 1.3), Unbound 1.8.1 с включением по умолчанию DANE-TA, OpenSSH 7.8p1, Lua 5.3.5, ntpd 4.2.8p12, bsnmp 1.13. В портах Perl обновлён до 5.26.2, а Python до 2.7. До версии 4.46 обновлён шрифт Terminus BSD Console, используемый драйвером виртуального терминала. Компоненты Clang, libc++, compiler-rt, LLDB, LLD и LLVM обновлены до версии 6.0.1 (во FreeBSD 11.2 используется версия 6.0.0, поэтому изменения только корректирующие);

  • Помечена устаревшей утилита ctm (зеркалирование исходных текстов FreeBSD), которая будет удалена во FreeBSD 13;
  • Прекращена поддержка протоколов token-ring и Arcnet;
  • Объявлены устаревшими драйверы: ae(4), bm(4), cs(4), de(4), dme(4), ed(4), ep(4), ex(4), fe(4), pcn(4), sf(4), sn(4), tl(4), tx(4), txp(4), vx(4), wb(4) и xe(4).