Спустя два года с момента выхода ветки FreeBSD 9 представлен релиз FreeBSD 10.0, ставший одним из самых значительных релизов за историю существования проекта. Новая ветка примечательна переходом на использование по умолчанию компилятора Clang, интеграцией гипервизора BHyVe, заменой DNS-сервера BIND на Unbound, новой реализацией протокола CARP, интеграцией подсистемы FUSE, переходом по умолчанию на пакетный менеджер pkg. Установочные сборки, способные работать в Live-режиме, доступны в вариантах Bootonly (200 Мб), DVD (2.4 Гб), CD (630 Мб) и Memstick (680 Мб) для платформ amd64, i386, powerpc64, sparc64 и ia64.

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

  • Система
    • Переход на использование по умолчанию компилятора Clang 3.3 и развиваемой проектом LLVM библиотеки libc++ для архитектур i386, AMD64 и ARM, для которых GCC и libstdc++ теперь по умолчанию не собираются как часть базовой системы. Исполняемые файлы cc, cpp и c++ отныне являются ссылками на clang. Тем не менее, GCC и libstdc++ можно установить из портов или собрать из исходных текстов вместе с системой, указав параметры WITH_GCC и WITH_GNUCXX в src.conf.

      Основной причиной перехода на Clang является желание задействовать распространяемый под лицензией BSD сборочный инструментарий вместо устаревшей версии набора компиляторов GCC 4.2.1. FreeBSD не может перейти на более новую версию GCC, так как начиная с выпуска 4.2.2 GCC был переведен на лицензию GPLv3. Изначально интеграции GCC 4.2.2 мешала несовместимость runtime-компонентов GCC с лицензией BSD (позднее, в версии GCC 4.4 данная несовместимость была устранена). Кроме этого, добавление в базовую систему FreeBSD компонентов под лицензией GPLv3 было признано невозможным из-за противоречий с целями проекта FreeBSD и нежеланием налагать дополнительные ограничения на пользователей, такие как запрет тивоизации. Кроме лицензии, стимулом перехода на Clang также послужило желание задействовать реализованные в Clang дополнительные техники оптимизации, диагностики проблем и кросс-компиляции.

    • Интегрирована поддержка unmapped VMIO, которая позволила поднять производительность ввода/вывода, благодаря исключению стадии маппинга буферов в TLB-кэше, что существенно снизило накладные расходы при работе на многопроцессорных системах. На некоторых крупных SMP-системах с интенсивным вводом/выводом наблюдается повышение производительности на 25-30%.
    • Обновлён инсталлятор bsdinstall, в котором добавлена поддержка полноценной установки системы на разделы ZFS. При этом все настройки производятся из меню, в том числе создание разделов, выбор уровня ZFS RAID, настройка шифрования с использованием GELI, выбор имени пула и т.п. Cтарый инсталлятор sysinstall удалён из базовой системы, вместо него следует использовать bsdinstall и bsdconfig. Утилита bsdconfig реализует интерфейс для настройки различных параметров системы, обеспечивая функциональность похожую на меню "Configure" из sysinstall;
    • Для архитектуры amd64 максимальный размер адресуемой ядром памяти увеличен с 1TB до 4TB. Добавлена поддержка маппинга страниц памяти большого размера (SuperPages).
    • Система инициирования выполнения событий в ядре (callout) теперь базируется на механизме tickless, т.е. вместо фиксированного вызова по таймеру, процессор просыпается только при наличии событий.
    • Добавлены контрольные вызовы (probes) DTrace для ip, tcp и udp;
    • Максимальный размер логина пользователя увеличен до 32 символов;
  • Дисковая подсистема, ввод/вывод, системы хранения и файловые системы
    • Интеграция подсистемы FUSE, обеспечивающей работу файловых систем, реализованных на уровне пользователя. Поддерживается использование большинства FUSE-модулей, в том числе sshfs, ntfs-3g и ext4fuse.
    • Поддержка увеличения размера разделов UFS при помощи утилиты growfs на лету, без размонтирования раздела.
    • Включение наработок по оптимизации производительности файловых систем UFS/FFS. Ускорено выполнение fsck для новых разделов UFS;
    • Обновление компонентов подсистемы ZFS до последней версии ZFS pools с поддержкой сжатия LZ4 и L2ARC, уничтожением наборов данных в асинхронном режиме, оптимизациями ZIO NOP-write, поддержкой операции TRIM для SSD-накопителей. Добавлен демон zfsd для отслеживания сбоев и управления.
  • Сетевая подсистема
    • Интеграция наработок проекта CARP2, в рамках которого полностью переписана реализация протокола CARP (Common Address Redundancy Protocol) для FreeBSD. Протокол CARP, выступая в роли открытой альтернативы протоколам HSRP (Hot Standby Router Protocol) и VRRP (Virtual Router Redundancy Protocol), позволяет организовать совместное использование IP-адреса между несколькими серверами в локальной сети, что может применяться для балансировки нагрузки или для создания отказоустойчивых систем. В новой реализации CARP задействован отдельный сетевой интерфейс, проведена нормализация адресов CARP для демонов маршрутизации (например, quagga), обеспечена поддержка одного избыточного IP на подсеть и реализовать режим carpdev для интерфейсов без IP.
    • Замена DNS-сервера BIND на связку из кеширующего DNS сервера Unbound и библиотеки LDNS. Unbound распространяется под лицензией BSD, имеет модульную структуру, поддерживает работу резолвера в рекурсивном и кэширующем режиме, обеспечивает проверку валидности DNSSEC-сигнатур. Вместо утилиты dig во FreeBSD 10 используется drill. В качестве причины ухода от BIND называется проблема с протяжённостью цикла поддержки выпуска обновлений для BIND, который не укладываются в цикл поддержки релизов FreeBSD. При необходимости использовать BIND, его следует установить из портов;
    • В пакетном фильтре PF обеспечена поддержка распараллеливания на SMP-системах. В частности, PF избавлен от зависимости от единого мьютекса, из-за которого PF являлся по сути однопоточным. Параллельно были внесены разнообразные сопутствующие улучшения, направленные на общее улучшение работы порта PF для FreeBSD;
    • В ipfw добавлена поддержка установки и проверки значений (AFXY, CSX, BE, EF) поля DSCP (differentiated services codepoints) в заголовках IP-пакетов.
    • Новый нативный стек iSCSI, реализованный на уровне ядра и содержащий реализации iSCSI Target и iSCSI Initiator. Новый стек отличается более высокой надёжностью и производительностью, а также предоставлением значительно упрощённых средств администрирования.
    • Реализация клиента NFSv4.1, в том числе поддерживающего pNFS и кэширования на стороне клиента;
    • Обеспечена поддержка до 65536 таблиц маршрутизации (ранее поддерживалось 16);
    • Добавлен фреймворк netmap для высокоскоростной обработки пакетов. Фреймворк позволяет одним ядром CPU с частотой 1050 MHz генерировать поток в 14.8 Mpps (миллионов пакетов в секунду), которого достаточно для анализа трафика на 10-гигабитном сетевом интерфейсе. В относительных показателях производительность netmap в 5-10 раз выше стандартного сетевого драйвера. Для работы существующих приложений поверх нового API подготовлена небольшая библиотека-враппер libpcap-over-netmap, позволяющая задействовать netmap в программах, уже поддерживающих libpcap;
    • Обновлена поддержка стандарта 802.11s, регламентирующего работу Mesh-сетей (каждая клиентская точка сети связана через соседние точки).
    • Улучшена поддержка беспроводных устройств с поддержкой 802.11n. Беспроводной стек переработан для оптимальной работы на многоядерных системах;
  • Изолированные окружения, безопасность и ограничения ресурсов
    • Интеграция гипервизора BHyVe, изначально разработанного компанией NetApp. Для работы требуется система с процессором Intel, поддерживающим аппаратные средства виртуализации VT-x и EPT (Extended Page Tables). Из возможностей можно отметить поддержку создания вложенных окружений, проброс PCI-устройств, доступ к содержимому виртуальной машины через специальное блочное устройство, возможность назначения нескольких CPU гостевой системе. Поддержка BHyVe пока ограничена архитектурой amd64. В качестве гостевых систем могут запускаться системы для которых имеются драйверы VirtIO для паравиртуализации ввода/вывода, в том числе различные версии FreeBSD, свежие сборки OpenBSD и системы GNU/Linux (CentOS, Debian, Ubuntu, openSUSE). Для запуска виртуального окружения можно использовать команду "/usr/sbin/bhyveload -m 256 -d ./vm0.img vm0".
    • Включение интерфейса Virtio с поддержкой паравиртуальных устройств ввода/вывода vtnet (Ethernet), virtio_blk (блочное устройство), virtio_scsi (SCSI HBA) и virtio_balloon (для возвращения памяти гипервизору). Драйверы протестированы при работе FreeBSD в качестве гостевой системы под управлением Qemu/KVM, VirtualBox и BHyVe;
    • Добавлены паравиртуальные драйверы для гипервизора Hyper-V, позволяющие запускать FreeBSD в качестве гостевой системы в окружении продуктов виртуализации Microsoft. Драйверы доступны для архитектур amd64 и i386. Для GENERIC-ядра amd64 драйверы включены по умолчанию. Доступны драйверы для организации управления с консоли Hyper-V, для синхронизации времени, для IDE и SCSI хранилищ, для сетевого адаптера и для организации live-миграции.
    • В GENERIC ядрах для архитектур amd64 и i386 включён по умолчанию драйвер Xen PVHVM, предоставляющий возможность использования специальных дисковых и сетевых драйверов (PVHVM или PV-on-HVM) в гостевой системе, работающей в режиме полной виртуализации (HVM). Ранее в HVM-режиме допускалось использование PV-драйверов, но было невозможным задействование PVHVM-вариантов данных драйверов, специально оптимизированных для работы в режиме HVM. Наиболее существенным отличием PVHVM-драйверов является обход стадии эмуляции при трансляции дискового и сетевого ввода/вывода, что позволяет значительно повысить производительность HVM-окружений, приблизив их к производительности паравиртуализированных систем.
    • Для архитектур amd64 и i386 активирован драйвер vmx для виртуального сетевого контроллера VMware VMXNET3 и драйвер для виртуального SCSI-контроллера PAPR VSCSI;
    • Для архитектур amd64 и i386 добавлена поддержка аппаратного механизма генерации псевдослучайных чисел RDRAND, присутствующего в процессорах Intel, начиная с IvyBridge. Аппаратные генераторы случайных чисел применяются не напрямую, а в качестве одного из нескольких источников энтропии, смешиваемых при помощи алгоритма Yarrow. Расширено число источников энтропии на стадии инициализации генератора случайных чисел, например, используются различные характеристики времени инициализации PCI-устройств.
  • Оборудование и аппаратные архитектуры
    • Включение KMS-модуля для видеокарт AMD. Поддержка KMS-модуля необходима для обеспечения работы во FreeBSD свежих версий драйвера xf86-video-radeon, в котором прекращена поддержка переключения видеорежимов на пользовательском уровне (UMS) и оставлена только возможность использования KMS (Kernel Mode Setting).
    • Поддержка USB Audio 2.0, позволяющего обеспечить работу с устройствами, поддерживающими более высокую пропускную способность, повышенную частоту дискретизации и более широкий динамический диапазон;
    • Адаптация для работы на Raspberry Pi (инструкция по установке);
    • Улучшение поддержки архитектуры ARM:
      • Добавлена поддержка ARMv6 и ARMv7, включая поддержку SoC Marvell MV78x60, TI OMAP4 и AM335x, реализована возможность использования SMP, TLS (thread-local storage) и инструкций VFP/Neon.
      • По умолчанию в качестве ABI для arm, armeb, armv6 и armv6eb теперь используется ARM EABI.
      • Добавлены средства для манипуляции страницами памяти большого размера (SuperPages), которые позволяют увеличить эффективность и производительность работы FreeBSD на ARM-системах, благодаря обеспечению средств трансляции TLB для динамического покрытия больших областей памяти, что особенно актуально с появлением серверных ARM-систем. При использовании SuperPages тестирование показало сокращение задержек при доступе к памяти на 34% в тесте GUPS и на 38% в тесте LMbench, время сборки buildworld сократилось на 20%.
    • Переписан драйвер bxe, в который добавлена поддержка BCM57712 и BCM578XX;
    • Добавлен драйвер cmx для устройств для чтения смарткарт Omnikey CardMan 4040 PCMCIA;
    • Добавлен драйвер uslcom для адаптеров USB-serial на базе чипов Silicon Laboratories CP2101/CP2102;
    • Добавлены новые сетевые драйверы: ale с поддержкой Gigabit/Fast Ethernet адаптеров Atheros AR8121/AR8113/AR8114 (802.11n), jme c поддержкой PCIe-контроллеров JMicron JMC250 Gigabit Ethernet и JMC260 Fast Ethernet, malo для PCI-карт на базе Marvell Libertas 88W8335, iw_cxgbe - iWARP/RDMA-драйвер для карт на базе Chelsio T4 и T5. В драйвер cxgbe добавлена поддержка 40G/10G Ethernet карт на базе Chelsio Terminator 5 (T5) ASIC. Драйвер em разделён на два отдельных драйвера: в em оставлена поддержка чипов 82575 и клиентских сетевых карт, а в драйвер igb вынесена поддержка новых серверных адаптеров;
    • До состояния ядра Linux 3.7 обновлён стек OFED (OpenFabrics Enterprise Distribution), в состав которого входит набор драйверов и сопутствующих утилиты для обеспечения работы Infiniband-контроллеров, используемых для организации высокоскоростных соединений серверов и организации поддержки технологии RDMA (Remote Direct Memory Access).
  • Приложения
    • В качестве пакетного менеджера по умолчанию задействован pkg, который предоставляет интерфейс в стиле пакетного менеджера APT и обеспечивает поддержку таких функций, как обновление пакетов, работа с репозиториями бинарных пакетов, учёт зависимостей и полноценные средства для работы с метаданными. Для установки бинарных пакетов предлагается использовать репозиторий pkg.FreeBSD.org. Обеспечена поддержка проверки валидности бинарных пакетов из pkg-репозитория по цифровой подписи.
    • Из базовой системы удалены утилиты pkg_add, pkg_create, pkg_delete, pkg_info, pkg_updating и pkg_version;
    • Вместо make осуществлён переход на сборочную утилиту bmake, разработанную в рамках проекта NetBSD. Утилиты GNU patch, GNU sort, GNU cpio, GNU bc, GNU dc, GNU ar, Bison и GNU ranlib, заменены на аналоги, распространяемые под лицензией BSD. В BSD find добавлены новые возможности, присутствующие в GNU find;
    • Проделана большая работа по обеспечению возможности кросс-компиляции FreeBSD на других системах, что например, может быть использования для создания сборок FreeBSD из программного окружения других ОС;
    • Обновлены версии сторонних приложений, поставляемых в базовой системе FreeBSD: jemalloc 3.4.0, hostapd 0.5.10, IPFilter 5.1.2, OpenSSH 6.4, sendmail 8.14.7, WPA Supplicant 2.0, xz 5.0;
    • В базовую систему интегрированы упрощённые компоненты для работы с Subversion (svnlite) и удалена поддержка CVS (CVS и полноценный пакет с Subversion можно установить из портов);
    • Добавлена новая утилита freebsd-version, позволяющая более подробно идентифицировать версию и patch level компонентов пользовательского окружения и ядра;
    • В утилите top появилась опция "-P", позволяющая отображать статистику в привязке к разным CPU;
    • В traceroute добавлена опция "-a" для показа номеров автономных систем и "-A" для выбора конкретного WHOIS-сервера.