Опубликован отчёт о развитии проекта FreeBSD с июля по сентябрь 2016 года.

Основные достижения:

  • Система
    • Продолжается работа по переходу на использование компоновщика lld, развиваемого проектом LLVM, для динамического связывания объектных файлов FreeBSD. В дополнение к ранее реализованной возможности сборки базовой системы FreeBSD/amd64 с применением lld вместо GNU BFD ld, добавлена поддержка сборки ядра FreeBSD. Из пока нерешённых задач упоминаются проблемы со сборкой загрузчика и набора rescue. Из расширенных возможностей lld, отсутствующих в GNU ld 2.17.50, отмечается поддержка архитектуры AArch64 (arm64), возможность применения оптимизаций во время компоновки (Link Time Optimization, LTO), поддержка нового ABI, дополнительные оптимизации и существенное ускорение связывания;
    • Переработана система блокировок в компонентах ядра, связанных с обработкой точного времени, в том числе внесены изменения в обработчик прерываний от таймера системные вызовы sys_ntp_adjtime(2) и settimeofday(2) и код синхронизации PPS (pulse-per-second). Улучшена реализация функции gettimeofday(2) на уровне пользователя, в которой сокращено число обращений к системным вызовам на оборудовании с таймерами HPET (High Precision Event Timer);
  • Изолированные окружения, эмуляторы, безопасность и ограничения ресурсов
    • Продолжена работа по изоляции системных приложений при помощи фреймворка Capsicum, предоставляющего механизмы ограничения использования приложениями определённых системных функций. Основной целью работы является повышения защиты утилит, вызываемых из приложений, важных для обеспечения безопасности системны, таких как freebsd-update и portsnap. За отчётный период обеспечена sandbox-изоляция для утилит bspatch, cmp, ident, primes, tee, tr и write. Ожидают принятия дополнительные ограничения для утилит b64decode, b64encode, uudecode, uuencode, brandelf, dma-mbox-create, elf2aout, file, head, hexdump, iconv, ident, jot, ktrdump, lam, last, ministat, praudit и strings. В режиме capability разрешено использование системного вызова getdtablesize, а также sysctls kern.proc.nfds, kern.hostname и т.п. Переданные права теперь распространяются и на дочерние файловые дескрипторы, полученные через вызов accept(2). Capsicum активирован в прослойке для обеспечения совместимости с 32-разрядными системными вызовами;
    • Представлен новый специализированны дистрибутив ClonOS, ориентированный на развёртывание систем виртулизации на основе FreeBSD, похожих по своей функциональности на OpenStack, OpenNebula и Amazon AWS. Окружения строятся с использованием гипервизоров Bhyve и Xen или контейнеров Jail. Управление построено на основе инструментария CBSD и системы Puppet. Из особенностей проекта отмечается организация сетевого взаимодействия через vale (Virtual Ethernet Switch), поддержка ZFS, функции клонирования, экспорта и импорта виртуальных машин, легковесные контейнеры на базе Jail, шаблоны контейнеров и виртуальных машин, VNC-терминал;
    • Ведётся работа по портированию приложений для runtime-окружения CloudABI, базирующегося на применении механизма управления доступом Capsicum и предоставляющего средства для разработки приложений, защищённых от типовых уязвимостей и переносимых между разными системами. CloudABI также может применяться для безопасного для системы запуска не заслуживающих доверия программ, без применения окружений виртуализации и jail. Для пользователей развивается отдельная коллекция портов, в которую включены варианты типовых утилит и библиотек, кросс-компилируемых для CloudABI. В последние месяцы для CloudABI портирован Python 3.6, что позволяет запускать python-скрипты в режиме изоляции. Кроме amd64 и arm64 обеспечена поддержка платформ i686 и armv6;
    • Подготовлена начальная реализация драйвера для организации совместного доступа к выборочным каталогам хост-системы из гостевых систем, работающих под управлением VirtualBox. В текущем состоянии драйвер уже позволяет монтировать каталоги хост-системы в режиме только для чтения и, с некоторыми ограничениями, в режиме чтения-записи;
    • Продолжается развитие набора драйверов для работы в гостевых системах под управлением гипервизора Hyper-V и облачной платформы Azure. За отчётный период значительно улучшен драйвер для систем хранения, производительность которого возросла в 1.2-2 раза, благодаря задействованию BUS_DMA и UNMAP_IO. В драйвере VMBus расширена поддержка горячего извлечения и добавления устройств. В сетевом драйвере появилась поддержка настройки RSS и динамического изменения MTU. Обновлены сборки FreeBSD для Azure. Подготовлены патчи для поддержки прямого проброса в гостевую систему устройств PCIe;
    • Подготовлен инструментарий для преобразования файлов аудита в форматах, используемых в Linux и Windows, в формат логов системного аудита BSM (Basic Security Module), применяемый во FreeBSD. В auditdistd добавлена возможность приёма по сети логов аудита в различных форматах с сохранением на диск в формате BSM;
  • Системы хранения и файловые системы
    • Реализация файловой системы ZFS синхронизирована с кодовой базой проектов OpenZFS и Illumos. В кэше первого уровня ARC (Adaptive Replacement Cache) обеспечено сохранение данных в сжатом виде с распаковкой на лету. В кэше второго уровня (L2ARC) обеспечено сохранение тех же сжатых данных, что и в ARC, без применения переупаковки, что заметно снижает потребление ОЗУ. С 16 до 128 Кб увеличен максимальный размер блока косвенной адресации (indirect block), добавлена поддержка упреждающей загрузки косвенных блоков. Улучшена работа операций упорядоченного распределения дискового пространства. Добавлена поддержка алгоритмов хэширования SHA-512t256 и Skein;
  • Сетевая подсистема
    • Во FreeBSD head, stable/11 и stable/10 принята улучшенная реализация подсистемы непрозрачных мостов PCIe (PCI-Express Non-Transparent Bridge), предоставляющая средства для объединения двух компьютеров по шине PCIe с организацией общих окон доступа к памяти. Новая реализация основана на применении интерфейсов NewBus и разделена на модули, что упрощает добавление поддержки дополнительных типов оборудования, требующих разных драйверов, а также позволяет запускать несколько экземпляров NTB в одной системе. Добавлена возможность разделения ресурсов NTB между двумя приложениями, которые могут получить прямой доступ к разным областям памяти внешнего хоста. Существенно расширены возможности драйвера виртуального сетевого интерфейса NTB. Увеличена производительность и масштабируемость;
    • Добавлен новый драйвер if_ptnet с реализацией паравиртуализированного сетевого адаптера, соответствующего модели устройства ptnet для гипервизора bhyve. Драйвер может работать как в нормальном режиме, так и в режиме netmap, и обеспечивает достойную производительность при обеспечении связи между виртуальными машинами. Например, если ранее предлагаемый драйвер мог передавать данные в рамках одного TCP-соединения на скорости около 2 Gbps, то новый драйвер позволяет достигнуть скоростей уровня 20 Gbps;
  • Поддержка оборудования
    • В рамках работы по улучшению поддержки сенсорных экранов во FreeBSD обеспечена поддержка API evdev, предоставляющего интерфейс /dev/input/eventX, совместимый с Linux. Evdev может применяться для обработки событий с различных устройств ввода, включая клавиатуры, мыши и сенсорные экраны с поддержкой мультитач. Обработка ввода через evdev поддерживается в Qt, libinput и tslib. Базовая реализация evdev для ukbd и ums уже принята в ветку FreeBSD HEAD и реализована в драйверах для контроллеров сенсорных экранов TI AM33xx (BeagleBone) и Raspberry Pi. Из задач на будущее отмечается реализация поддержки дополнительного оборудования, реализация возможности включения evdev в существующих портах и добавление новых портов, завязанных на evdev;
    • Добавлена поддержка построенных на чипе ARMv8 25-гигабитных сетевых адаптеров ENA (Elastic Network Adapter), используемых в Amazon AWS для увеличения сетевой производительности виртуальных машин. Представленная реализация драйвера для FreeBSD уже демонстрирует хорошую производительность и стабильность при запуске FreeBSD на физическом оборудовании. Из задач на будущее отмечается оптимизация для виртуальных окружений и прохождение рецензирования для включения в основной состав FreeBSD;
    • Реализованы патчи для поддержки устройств Alpine, представляющих собой платформу на чипе, включающую многоядерные 32-разрядные и 64-разрядные CPU на базе архитектуры ARM и предназначенные для организации работы высокопроизводительных сетевых и встраиваемых приложений (поддерживает 10-, 25- и 50-Gbit Ethernet с дополнениями для виртуализации и балансировки нагрузки);
    • Протестирована и подготовлена к промышленному применению поддержка платформы Marvell Armada38x. Добавлена поддержка многоканального PCIe 2.0, контроллера AHCI и контроллера SDHCI, улучшен драйвер коммутатора Ethernet e6000sw, добавлена поддержка плат SolidRun ClearFog и DB-88F6285-AP;
    • Продолжена работа по усовершенствованию поддержки 64-разрядной архитектуры ARM64 (AARCH64). Добавлена возможность манипуляции страницами памяти большого размера ("Transparent superpage"), обеспечена поддержка фреймворка обработки прерываний pre-INTRNG, из проекта Linaro в libc перенесены оптимизированные для ARM64 реализации функций работы со строками, ведётся работа по добавлению поддержки ACPI в ядро. Добавлена поддержка одноплатного ПК Pine64;
  • Приложения и система портов
    • Дерево портов FreeBSD выросло до 26300 портов (на 200 портов больше, чем в прошлом отчёте), число незакрытых PR держится на отметке в 2150. За отчётный период внесено 5295 изменений от 117 активных разработчиков. Права коммиттера получили два новых участника - Tobias Berner (tcberner) и Joseph Mingrone (jrm), отказались от прав три участника - Sergey Matveychuk (sem), Martin Wilke (miwi) и Erwin Lansing (erwin), один участник лишился прав из-за неактивности в течение 18 месяцев - Jase Thew (jase). Добавлены три новых USES-набора: grantlee, kde и linux, а также одно новое ключевое слово javavm. Готовится к удалению устаревший порт с компонентами Linux на основе Fedora 10, основной рабочий порт теперь базируется на CentOS 6. По умолчанию задействована версия gcc 4.8.5. Пакетный менеджер pkg обновлён до выпуска 1.8.7;
    • Участниками Core Team предложен проект по созданию дополнительного репозитория для сборочного инструментария под лицензией GPLv3. Подобный репозиторий позволит ускорить развитие портов с внешними инструментами и пакетами на архитектурах, которые LLVM пока не поддерживает на должном уровне;
    • Готов для тестирования обновлённый графический стек на основе X.org Server 1.18.4 и новых DDX-драйверов xf86-video-ati и xf86-video-intel. В libdrm реализована функциональность, необходимая для работы драйвера amdgpu. В ветку drm-next, которая будет использована для драйверов radeon и amdgpu, портированы новые DRM-драйверы из ядра Linux 4.8. Для драйвера i915 будет использована ветка drm-next-4.7 на основе DRM-компонентов ядра Linux 4.7 (в ветке на основе ядра 4.8 наблюдаются проблемы со стабильностью драйвера i915);
    • Ведётся работа по обеспечению работы окружений на базе Wayland во FreeBSD. За исключением композитного сервера Weston, порты с Wayland уже работоспособны во FreeBSD. Что касается порта Weston, который основан на наработках проекта DragonFlyBSD, то он устарел и разработчики намерены создать новый порт на основе актуальной кодовой базы Weston и использовать в нём штатные libinput, libudev-devd и epoll-shim, что значительно упростит сопровождение. Подготовлены и переданы разработчикам основного проекта патчи для обеспечения работы во FreeBSD композитного сервера wlc.
    • Проведена адаптация новых версий десктоп-оболочки KDE и фреймворка Qt для FreeBSD. В экспериментальный репозиторий branches/plasma5 помещены порты с KDE Frameworks 5.26.0, Plasma Desktop 5.8.0 и KDE Applications 16.08.1. Добавлены порты devel/grantlee5, multimedia/gstreamer1-qt5 и net-im/telepathy-qt5. Обновлены версии CMake 3.6.2, Qt 5.6.1, Phonon 4.9.0, net-im/telepathy-qt4 0.9.7.
    • Отмечен прогресс в разработке порта с пользовательским окружением LXQt, развиваемого объединённой командой разработчиков проектов LXDE, Razor-qt и Maui/Hawaii. Завершено портирование для FreeBSD ветки LXQt 0.11, добавлены новые версии портов x11-toolkits/qtermwidget 0.7.0, x11/qterminal 0.7.0 и x11/qterminal-l10n;
    • Обновлены порты, связанные с десктоп-окружением Xfce:
      
       audio/xfmpc 0.2.3,
       deskutils/xfce4-notifyd 0.3.2,
       deskutils/xfce4-volumed-pulse 0.2.2,
       devel/thunar-vcs-plugin 0.1.5,
       misc/xfce4-weather-plugin 0.8.8,
       sysutils/xfce4-settings 4.12.1,
       x11/xfce4-clipman-plugin 1.4.0,
       x11/xfce4-dashboard 0.6.0,
       x11/xfce4-goodies (мета-порт для плагинов и приложений от проекта Xfce4 Goodies),
      
      x11/xfce4-whiskermenu-plugin 1.6.0;
      
      В отдельный репозиторий помещены экспериментальные порты, переведённые на GTK3+:
      
       audio/xfce4-mpc-plugin 0.4.99,
       sysutils/garcon 0.5.0,
       sysutils/xfce4-battery-plugin 1.0.99,
       sysutils/xfce4-diskperf-plugin 2.5.99,
       sysutils/xfce4-fsguard-plugin 1.0.99,
       sysutils/xfce4-netload-plugin 1.2.99,
       sysutils/xfce4-systemload-plugin 1.1.99,
       www/xfce4-smartbookmark-plugin 0.4.99,
       x11/libexo 0.11.1,
       x11/libxfce4menu 4.13.1,
       x11/xfce4-dashboard 0.7.0,
       x11/xfce4-terminal 0.6.92,
       x11/xfce4-whiskermenu-plugin 2.0.1,
       x11-clocks/xfce4-datetime-plugin 0.6.99.
      
      


Источник: http://www.opennet.ru/opennews/art.shtml?num=45489