Отчёт о развитии FreeBSD за четвёртый квартал 2016 года


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

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

-Система
-Отмечается значительный прогресс в организации динамического связывания объектных файлов FreeBSD с использованием компоновщика LLD, развиваемого проектом LLVM. Изменения, принятые в основные кодовые базы LLD и FreeBSD позволили осуществить связывание всей базовой системы FreeBSD/amd64 с использованием LLD. В настоящее время ведётся работа по обеспечению сборки дерева портов с использованием LLD, постепенно устраняются проблемы, всплывающие в портах и LLD. На момент написания отчёта LLD уже мог применяться для связывания около 95% портов для архитектуры amd64;
-Во FreeBSD HEAD добавлена начальная реализация фильтра /usr/sbin/prometheus_sysctl_exporter для формирования метрик о состоянии системы для платформы мониторинга Prometheus. Целью проекта является возможность экспорта всего дерева sysctl в виде метрик к Prometheus. Развиваемая возможность в том числе может быть использована для упрощения отладки разработчиками ядра, например, добавив новый счётчик можно построить график с отражением динамики наступления определённых событий в ядре;
-Налажено автоматизированное тестирование в системах непрерывной интеграции (Travis CI и Jenkins) библиотеки Libarchive, предоставляющей средства для работы с различными форматами архивов и сжатых файлов, которая используется в таких BSD-утилитах, как tar, cpio, ar, unzip и pkg. Проведена чистка кода и Fuzzing-тестирование, что позволило выявить порцию ошибок и уязвимостей. Из функциональных улучшений отмечается поддержка NFSv4 ACL для архивов pax, которая уже перенесена во FreeBSD-CURRENT, что даёт возможность сохранять и восстанавливать NFSv4 ACL из tar-архивов;
-Началось воплощение проекта по созданию дополнительного репозитория для сборочного инструментария под лицензией GPLv3, который позволит ускорить развитие портов с внешними инструментами и пакетами на архитектурах, не поддерживаемых в LLVM на должном уровне;
-Обсуждается вопрос перехода на реализацию Unicode _STDC_ISO_10646_, уже используемую в Linux glibc;
-В рамках кампании по сбору пожертвований в 2016 году собрано более полутора миллионов долларов. Кроме оплаты работы нескольких инженеров в режиме полного рабочего дня, в 2016 году профинансированы проекты по разработке порта для архитектуры arm64, интеграции фреймворка виртуализации VIMAGE (базируется на Jail и виртуальном сетевом стеке VNET), усовершенствованию инструментария и интеграции динамического межсетевого экрана blacklistd. Введены в строй два новых сервера для сборки релизов, четыре сервера для сборки пакетов, сервер непрерывной интеграции (ci.FreeBSD.org), два сервера ThunderX для сборки пакетов для архитектуры arm64, четыре вспомогательных сборочных сервера.
-Изолированные окружения, эмуляторы, безопасность и ограничения ресурсов
-Развивается проект по обеспечению повторяемых сборок FreeBSD, при которых сборка одних и тех же исходных текстов приводит к генерации тождественных бинарных файлов, совпадающих побитово, что позволяет любому желающему убедиться в том, что сборка ISO-образа произведена из заявленных исходных текстов. За отчётный период проведена работа по интеграции подготовленных изменений в базовую систему FreeBSD. Обеспечена возможность повторяемой сборки базовой системы (ядро и окружение пользователя). После базовой системы усилия разработчиков смещаются на дерево портов. В настоящее время число портов, для которых поддерживаются повторяемые сборки находится на уровне 80%;
-К включению в состав FreeBSD HEAD и STABLE готовится обновление пакета OpenBSM 1.2 alpha 5 с открытой реализации Sun Basic Security Module (BSM) Audit API, предоставляющего средства для управления аудитом системы;
-Продолжается развитие набора драйверов для работы в гостевых системах под управлением гипервизора Hyper-V и облачной платформы Azure. За отчётный период проведена оптимизация производительности сетевого драйвера, реализована поддержка live-бэкапов виртуальных машин и возможность проброса устройств PCIe, добавлена поддержка vDSO для ускорения выполнения вызова gettimeofday(2). Подготовлен образ FreeBSD 11.0 для Azure;
-Обеспечены регулярные сборки для облачных окружений Amazon EC2 с автоматической загрузкой снапшотов и релизов для всех ргионов. По данным каталога AWS Marketplace более 800 пользователей уже применяют FreeBSD/EC, а число активных экземпляров FreeBSD в облаке Amazon достигло 2000 (статистика не учитывает установки из консоли или через EC2 API).
-Добавлена поддержка сервиса Amazon Simple Systems Manager ("run command"). Релиз FreeBSD 11.0 вышел с поддержкой расширенных сетевых возможностей окружений EC2 C3, C4, R3, I2, D2 и M4 (кроме m4.16xlarge) и оптимизацией дисковой подсистемы (примерно на 20% возросла пропускная способность);
-Системы хранения и файловые системы
-Продолжается разработка порта распределённого хранилища Ceph для FreeBSD. Порт пока охватывает только объектное хранилище RADOS (Object Storage) и инструментарий. -Блочное устройство RBD (Ceph Block Device) и файловая система CephFS пока не готовы. Итоговой целью проекта является предоставление возможности развёртывания кластера Ceph с узлами хранения на базе FreeBSD и ZFS, а также поддержка запуска виртуальных машин bhyve на виртуальных дисках, развёрнутых поверх блочного устройства Ceph RBD. За отчётный период реализация RBD доведена до возможности сборки и использования для управления блочными устройствами RADOS, переработан код для работы с потоками и поллингом, налажен процесс сборки компонентов ceph в системе непрерывной интеграции;
Поддержка оборудования
Реализована поддержка I2C, GPIO и SPI для материнской платы MinnowBoard на базе Intel Atom E38xx SoC, относящейся к категории Open Hardware;
-В основной состав FreeBSD приняты изменения, необходимые для работы потребительскогих инфракрасных портов (CIR, Consumer IR) на системах с ARM-процессорами Allwinner. Драйвер основан на фреймворке evdev, пока может работать только на приём и протестирован на платах Cubieboard2 (A20 SoC), используя пакет lirc и инфракрасный пульт управления от проекта dfrobot;
-Продолжена работа по усовершенствованию поддержки 64-разрядной архитектуры ARM64 (AARCH64). Добавлена поддержка Raspberry Pi 3, но WiFi и Bluetooth пока не работают из-за неготовности кода для шины SDIO. Добавлена поддержка доступа ядра к регистрам операций с плавающей запятой (FPR, Floating-point register), использующая аналогичный с архитектурами i386 и amd64 программный интерфейс ядра (KPI). На системах ARMv8 также удалось реализовать поддержку инструкций AES, позволивших заметно поднять производительность операций AES на платах ThunderX. При манипуляции блоками памяти задействованы оптимизированные для процессоров Cortex варианты функций memcpy и memmove. Реализована возможность загрузки на системе SoftIron Overdrive 3000, используя ACPI;
-Приложения и система портов
В дереве портов по умолчанию задействован набор компиляторов GCC 4.9, который теперь представлен как lang/gcc и используется при указании флага "USE_GCC=yes" (ранее применялся GCC 4.8). Порт lang/gcc49 обновлён до версии GCC 4.9.4, а порт lang/gcc6 до версии GCC 6.3. В качестве планов на будущее отмечен перевод lang/gcc и USE_GCC=yes на ветку GCC 5 и обеспечение поддержки архитектуры AArch64;
-Дерево портов FreeBSD преодолело рубеж в 27000 портов (на 700 портов больше, чем в прошлом отчёте), число незакрытых PR держится на отметке в 2250. За отчётный период внесено 6871 изменений от 176 разработчиков. Права коммиттера получили три новых участника - Nikolai Lifanov (lifanov), Jason Bacon и Mikhail Pchelin (misha), отказался от прав Edwin Groothuis (edwin), лишился прав из-за неактивности в течение 19 месяцев - John-Mark Gurney (jmg).
-Добавлены два новых USES-набора: lxqt и varnish. Обновлены версии портов, предлагаемые по умолчанию: varnish 4, GCC 4.9, Perl 5.24 и Python 3.5. Прекращена поддержка портов с версиями Perl 5.18 и Linux Fedora 10 (по умолчанию сейчас Linux CentOS 6). Обновлены версии pkg 1.9.4, Firefox 50.1.0, Firefox-esr 45.6.0, Chromium 54.0.2840.100, Ruby 2.1.10 / 2.2.6 / 2.3.3, node.js 7 (ветка node.js 6 отделена как LTS). Для FreeBSD 11 налажена сборка пакетов для архитектур mips, mips64 и armv6;

-Продолжается развитие компонентов графического стека. Из ядра Linux 4.9 в веку drm-next портированы свежие DRM-драйверы i915 и amdgpu. -Доведён до частично работоспособного вида KMS-драйвер amdgpu, в котором ещё остаётся несколько известных существенных проблем. Добавлена поддержка GPU AMD, начиная Southern Islands и заканчивая Polaris. В драйвере Intel обеспечена поддержка чипов Kaby Lake. Создана ветка xserver-mesa-next-udev, в которой развивается порт с Mesa 13.0, также включающий исправления для новых GPU AMD. Ветка примечательна использованием прослойки libudev-devd для формирования для Mesa окружения, близкого к Linux;
-Отмечен прогресс в разработке порта с пользовательским окружением LXQt, развиваемым объединённой командой разработчиков проектов LXDE, Razor-qt и Maui/Hawaii. В порты импортированы средства разработки devel/lxqt-build-tools, devel/liblxqt, devel/qtxdg и x11/libfm-qt, а также развиваемые проектом LXQt просмотрщик фотографий (graphics/lximage-qt) и файловый менеджер (x11-fm/pcmanfm-qt). Обновлены порты x11/qterminal 0.7.1 и x11-toolkits/qtermwidget 0.7.1;
-Обновлены порты, связанные с проектом Mono: Mono 4.6.2.7, MonoDevelop 6.1.1.15, 6.1.2.44 и FSharp 4.0.1.20. Флаг "USES=mono" расширен для упрощения использования пакетов Nuget, применяемых в FSharp, MonoDevelop и OpenRA. Началось портирование кодовой базы .NET Core;
-Порт emulators/wine адаптирован для использования Xinerama и GNUTLS (требуется для таких приложений, как Evernote и World of Warcraft). В рамках порта emulators/wine-devel доступна ветка Wine 2.0. Из открытых задач называется портирование WoW64;
Обновлены порты, связанные с десктоп-окружением Xfce:

audio/xfce4-mpc-plugin 0.5.0
deskutils/xfce4-notifyd 0.3.4
graphics/ristretto 0.8.1
sysutils/xfce4-diskperf-plugin 2.6.0
sysutils/xfce4-battery-plugin 1.1.0
sysutils/xfce4-fsguard-plugin 1.1.0
sysutils/xfce4-netload-plugin 1.3.0
sysutils/xfce4-systemload-plugin 1.2.0
sysutils/xfce4-wavelan-plugin 0.6.0
x11/xfce4-clipman-plugin 1.4.1
x11/xfce4-conf 4.12.1
x11/xfce4-dashboard 0.6.1
x11/xfce4-terminal 0.8.2
x11/xfce4-whiskermenu-plugin 1.6.2
x11-clocks/xfce4-datetime-plugin 0.7.0
x11-wm/xfce4-panel 4.12.1
www/xfce4-smartbookmark-plugin 0.5.0
sysutils/xfce4-settings 4.13.0
x11/libexo 0.11.2
x11/xfce4-whiskermenu-plugin 2.0.3
-Из соображений политкорректности удалён порт misc/jive с реализацией фильтра для преобразования текста на английском языке в пародию на афроамериканский сленг;
-Порт devel/gdb обновлён до GDB 7.12. В основную кодовую базу GDB, на основе которой подготовлен релиз GDB 7.12, включены подготовленные разработчиками FreeBSD исправления для поддержи точек останова (catchpoints) для системных вызовов. В GDB 7.12 также включены дополнительные улучшения для трассировки vfork(). -Для включения в будущие выпуски GDB переданы патчи с реализацией поддержки ядра FreeBSD/mips и возможностью отладки исполняемых файлов для архитектутры mips.