Спустя два года с момента выхода ветки 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++ для архитектур arm, i386 и AMD64, для которых 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 были введены дополнительные условия лицензирования, убирающие некоторые ограничения лицензии GPLv3 для Runtime-компонентов GCC. Тем не менее добавление в базовую систему FreeBSD компонентов под лицензией GPLv3 признано невозможным из-за противоречий с целями проекта FreeBSD и нежеланием налагать дополнительные ограничения на пользователей, такие как запрет тивоизации. Кроме лицензии, стимулом перехода на Clang также послужило желание задействовать реализованные в Clang дополнительные техники оптимизации, диагностики проблем и кросс-компиляции.
- Интегрирована поддержка unmapped VMIO, которая позволила поднять производительность ввода/вывода, благодаря исключению стадии маппинга буферов в TLB-кэше, что существенно снизило накладные расходы при работе на многопроцессорных системах. На некоторых крупных SMP-системах с интенсивным вводом/выводом наблюдается повышение производительности на 25-30%.
- Обновлён инсталлятор bsdinstall, в котором добавлена поддержка полноценной установки системы на разделы ZFS. При этом все настройки производятся из меню, в том числе создание разделов, выбор уровня ZFS RAID, настройка шифрования с использованием GELI, выбор имени пула и т.п. Из базовой системы удалён старый инсталлятор sysinstall, вместо него следует использовать bsdinstall и bsdconfig. Утилита bsdconfig реализует интерфейс для настройки различных параметров системы, обеспечивая функциональность похожуюна меню "Configure" из sysinstall;
- Для архитектуры amd64 максимальный размер адресуемой ядром памяти увеличен с 1TB до 4TB. Добавлена поддержка маппинга страниц памяти большого размера (SuperPages).\
- Для архитектур amd64,i386,ia64,powerpc по умолчанию GENERIC ядрах задействован планировщик задач ULE;
- В стандартную библиотеку добавлен вызов cpuset с связанная с ним утилита cpuset, позволяющая осуществлять привязку процессов к CPU, запускать команды в привязке к определённым процессорам и управлять группировкой и назначением ресурсов CPU.
- Поддержка генерации дампов ядра в структурированном формате textdump, включающем отладочную информацию. В отличие от ранее применяемых полных дампов памяти, использование формата textdump позволяет существенно упростить отладку проблем в ядре. Кроме того, внесены многочисленные улучшения в отладчик ядра ddb, в том числе поддержка выполнения скриптов.
- Для оценки поддерживаемых текущим ядром возможностей добавлен sysctl kern.features;
- Для архитектур добавлен новый загрузчик gptboot, поддерживающий загрузку с дисков, размеченных с использованием GPT. Внесены улучшения, связанные с обеспечением загрузки с USB-устройств. Поддержка UEFI Secure Boot ожидается в выпуске FreeBSD 10.1;
- Система инициирования выполнения событий в ядре (callout) теперь базируется на механизме tickless, т.е. вместо фиксированного вызова по таймеру, процессор просыпается только при наличии событий.
- Дисковая подсистема, ввод/вывод, системы хранения и файловые системы
- Интеграция подсистемы FUSE, обеспечивающей работу файловых систем, реализованных на уровне пользователя. Поддерживается использование большинства FUSE-модулей, в том числе sshfs, ntfs-3g и ext4fuse.
- Поддержка увеличения размера разделов UFS при помощи утилиты growfs на лету, без размонтирования раздела.
- Включение наработок по оптимизации производительности файловых систем UFS/FFS.
- Обновление компонентов подсистемы ZFS до последней версии ZFS pools с поддержкой сжатия LZ4 и L2ARC, уничтожением наборов данных в асинхронном режиме, оптимизациями ZIO NOP-write, поддержкой операции TRIM для SSD-накопителей;
- Сетевая подсистема
- Изолированные окружения, безопасность и ограничения ресурсов
- Интеграция гипервизора 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, 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;
- Проделана большая работа по обеспечению возможности кросс-компиляции 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;
- В качестве поддерживаемой версии рабочего стола GNOME заявлен выпуск 2.22;
- В базовую систему интегрированы упрощённые компоненты для работы с Subversion (svnlite) и удалена поддержка CVS (CVS и полноценный пакет с Subversion можно установить из портов);