Oпубликoвaн oтчёт o рaзвитии прoeктa FreeBSD с янвaря пo мaрт 2017 гoдa.
Oснoвныe дoстижeния:
- Oбщиe вoпрoсы
- Пo мнoгoчислeнным прoсьбaм рaссмaтривaeтся вoзмoжнoсть выпускa рeлизa FreeBSD 10.4. В сooтвeтствии с плaнoм рeлиз FreeBSD 10.3 дoлжeн был бы быть пoслeдним в свoeй сeрии, но после него в ветку FreeBSD 10 внесено достаточно много изменений, чтобы выпустить ещё один релиз. При этом версия FreeBSD 10.4 будет подготовлена в рамках обычного цикла сопровождения, т.е. не приведёт к продлению изначально намеченного срока поддержки ветки FreeBSD 10, исправления для которой будут выпускаться до 30 апреля 2018 года;
- Закрыт публичный доступ к сервису freefall.freebsd.org, который позволял использовать протокол finger для получения сведений о разработчиках FreeBSD. В системных профилях многих разработчиков добавлена приватная информация, такая как номер телефона, которую в современных реалиях не принято разглашать. Для внутреннего использования сервис freefall.freebsd.org по-прежнему доступен;
- Размер пожертвований в первом квартале 2017 года составил более 400 тысяч долларов, в основном благодаря финансовой поддержке компаний Intel и NetApp. Денежные вознаграждения выплачены за 168 коммитов в базовую систему: три разработчика получили средства будучи официально трудоустроенными во FreeBSD Foundation и ещё четыре были профинансированы через предоставление грантов.
Успешно выполнены развиваемые в рамках программы грантов проекты по интеграции cfumass, развитию порта FreeBSD/arm6 и расширения возможностей демона blacklistd. Почти доведён до конца проект по реализации 64-разрядных inode. Трудоустроенные инженеры выполнили работу по улучшению инструментария, сборочных компонентов, runtime-библиотек, утилит для формирования системных образов, устранению ошибок в системе управления памятью и расширению поддержки архитектур arm64, mips64 и x86 (32- и 64-bit);
- Определён план разработки FreeBSD 11.1, релиз запланирован на 26 июля 2017 года. Продолжено формирование еженедельных тестовых сборок для веток 12-CURRENT, 11-STABLE и 10-STABLE;
- Проект TrustedBSD, в рамках которого развиваются некоторые технологии защиты для FreeBSD (например, были созданы ACL, расширенные атрибуты файлов, UFS2, OpenPAM, подсистема аудита, OpenBSM, система мандатного доступа и GEOM), перевёл процессы разработки с поддерживаемого сообществом FreeBSD сервера Perforce на GitHub;
- Изолированные окружения, эмуляторы, безопасность и ограничения ресурсов
- Продолжается работа по портированию приложений для runtime-окружения CloudABI, базирующегося на применении механизма управления доступом Capsicum и предоставляющего средства для разработки приложений, защищённых от типовых уязвимостей и переносимых между разными системами. CloudABI также может применяться для безопасного запуска не заслуживающих доверия программ, без применения окружений виртуализации и jail. Для пользователей развивается отдельная коллекция портов, в которую включены варианты типовых утилит и библиотек, кросс-компилируемых для CloudABI. За последнее время подготовлены изолированные варианты библиотек Boost и LevelDB, что упрощает портирование на CloudABI приложений, использующих данные библиотеки. Развивается защищённый порт Bitcoin;
- В состав FreeBSD HEAD и STABLE включен новый выпуск пакета OpenBSM 1.2 alpha 5 с открытой реализации Sun Basic Security Module (BSM) Audit API, предоставляющего средства для управления аудитом системы. OpenBSM содержит компоненты пространства пользователя, базирующиеся на реализации CAPP Audit во FreeBSD и macOS. За отчётный период добавлена экспериментальная поддержка UUID, подготовлен провайдер аудита для DTrace, в систему непрерывной интеграции добавлена поддержка статического анализа в сервисе Coverity;
- Продолжается развитие набора драйверов для работы в гостевых системах под управлением гипервизора Hyper-V и облачной платформы Azure. За отчётный период для сетевых адаптеров добавлена поддержка технологии виртуализации ввода-вывода SR-IOV (Single Root Input/Output Virtualization), которая пока протестирована только на карте Mellanox ConnectX-3 VF. Обновлены образы виртуальных машин, в которые добавлен драйвер виртуальной клавиатуры;
- В инфраструктуре эмуляции окружения Linux (Linuxulator) добавлена новая заглушка «UNIMPLEMENTED» для системных вызовов, нереализованных в эмуляторе, но присутствующих в ядре Linux. Ранее для подобных целей использовалась заглушка «DUMMY», но она также применяется для системных вызовов, нереализованных в самом Linux. В Linuxulator реализовано два новых системных вызова: preadv и pwritev, в ближайшее время планируется также добавить системный вызов execveat;
- Системы хранения и файловые системы
- Наблюдается значительный прогресс в разработке порта распределённого хранилища Ceph для FreeBSD. Целью проекта является предоставление возможности развёртывания кластера Ceph с узлами хранения на базе FreeBSD и ZFS, а также поддержка запуска виртуальных машин bhyve на виртуальных дисках, развёрнутых поверх блочного устройства Ceph RBD. За отчётный период подготовлено блочное устройство RBD (Ceph Block Device) и реализация CephFS в пространстве пользователя (ceph-fuse), которые дополнили ранее реализованные объектное хранилище RADOS (Object Storage) и инструментарий. Для создания FileStore поверх ZFS подготовлены команды «ceph-disk prepare» и «ceph-disk activate». Для установки Ceph добавлен порт net/ceph-devel. Реализация RDB (KRBD) и файловой системы CephFS на уровне ядра, а также OSD-бэкенд BlueStore (Object Storage Device), пока не готовы;
- В драйверы mmc и mmcsd добавлена поддержка разделов eMMC (embedded MMC), используемых на впаянной в платы flash-памяти с MMC-контроллером. В mmcsd также добавлен ioctl-интерфейс, совместимый с Linux, что позволят использовать во FreeBSD уже существующие утилиты, такие как GNU mmc-utilssys (в портах utils/mmc-utils), для разбивки разделов eMMC, запроса прогноза времени жизни накопителя, получения информации о скором истечении ресурса Flash-памяти и вывода базовой информации из SD-карт. Кроме eMMC в драйверы mmc и sdhci добавлена поддержка режима передачи DDR52 (Dual Data Rate 52 MHz), который по сравнению с обычным высокоскоростным режимом позволяет поднять скорость передачи с примерно 45 MB/s до 80 MB/s. Режим DDR52 присутствует в контроллерах, поставляемых в чипсетах Intel Apollo Lake, Bay Trail и Braswell. Поддержка eMMC и DDR52 уже добавлена в ветку FreeBSD 12 и в дальнейшем будет портирована в ветки FreeBSD 10 и 11;
- Продолжается развитие нового стека MMC/SD, основанного на фреймворке CAM. Использование CAM позволяет задействовать уже хорошо проверенную модель организации блокировок и средства для отладки, а также делает возможным обработку прерываний при подключении карты, необходимую для реализации поддержки интерфейса SDIO. Например, SDIO исплльзуется во WiFi и Bluetooth модулях для многих плат, таких как Raspberry Pi 3. Новый стек также позволяет использовать интерфейс CAM для отправки SD-команд из приложений в пространстве пользователя, что даёт возможность создавать драйверы устройств, работающие на уровне пользователя. Стек полностью протестирован на платах Beaglebone Black и Wandboard Quad, и готовится для включения в основной состав FreeBSD. Ведётся работа по добавлению в подсистему CAM функций, специфичных для SDIO (чтение регистров, маппинг прерываний и т.п.). Из нерешённых задач отмечается создание драйверов для беспроводных чипов Broadcom и Marvell, используемых в таких популярных платах, как Raspberry Pi 3, Wandboard и GlobalScale Dreamplug, а также в некоторых Chromebook;
- Инициирована вторая попытка реализации расширения Parallel NFS (pNFS), которое позволяет организовать высокоскоростной обмен данными между машинами сети за счет возможности распараллеливания обращения к данным на нескольких хранилищах, а также разделения передачи потоков данных и мета-данных. Первая попытка создать реализацию сервера pNFS для FreeBSD на основе GlusterFS признана неудачной, так как производительность созданного прототипа оказалась неприемлемой. Второй вариант использует только наработки FreeBSD и уже доступен для тестирования. В текущем виде новая реализация pNFS позволяет запустить один сервер метаданных и несколько серверов хранения, с которыми могут работать любые клиенты NFSv4.1 с поддержкой pNFS File Layout. Поддержка зералирования (Flex Files Layout) пока отсутствует, но запланирована на будущее;
- Поддержка оборудования
- Обновлены драйверы ix/ixv и ixl/ixlv для 10- и 40-гигабитных сетевых адаптеров Intel. Добавлена поддержка устройств на базе SoC X553 (Denverton), X722 (Lewisburg) и XXV710, реализован интерфейс для находящегося в разработке драйвера iWarp;
- Добавлена поддержка 64-разрядной платформы Book-E на базе процессоров PowerPC («powerpc64»);
- Реализация порта для платформы Marvell Armada38x доведена до полноценного состояния, находится на стадии финального тестировани и готова для переноса во FreeBSD HEAD;
- Возобновлена работа по созданию порта FreeBSD для архитектуры s390x (IBM System z), заброшенного во времена FreeBSD 5. Порт доведён до возможности сборки базовой системы и урезанного ядра с использованием clang/llvm 3.9;
- Приложения и система портов
- Дерево портов FreeBSD преодолело рубеж в 29500 портов (на 2500 портов больше, чем в прошлом отчёте), число незакрытых PR держится на отметке в 2400. За отчётный период внесено 6656 изменений от 167 разработчиков. Права коммиттера получили семь новых участников: Eugene Grosbein (eugen), Vladimir Kondratyev (wulf), Johannes Dieterich (jmd), Larry Rosenman (ler), Mahdi Mokhtari (mmohki), Matthew Rezny (rezny) и Tobias Kortkamp (tobik). Шесть участников лишились права коммита в порты, большинство из-за длительной неактивности, но один из-за конфликта, который не удалось уладить мирным путём.
Осуществлено обновление предлагаемых по умолчанию версий портов: FreePascal 3.0.2, Ruby 2.3 и Samba 4.4. Ведётся работа по замене устаревшего порта Samba 3.6 на Samba 4.4 для зависимых портов с «USES=samba». Подготовлен новый вариант опции USE_LOCALE, устанавливающей переменные окружения LANG и LC_ALL при всех сборках. Все внешние патчи вынесены в новую переменную EXTRA_PATCH_TREE. Из значительных обновлений версий отмечается: pkg 1.10.1, linux c6_64, Firefox 52.0.2, Chromium 57.0.2987.110, GCC 4.9.4, GNOME 3.18.0, X.org 1.18.4, Qt 4.8.7/5.7.1 и PHP 7.1;
- Добавлен порт с экспериментальной версией MySQL 8.0. Обновлён порт с MySQL 5.6 и закрыты многие связанные с ним сообщения о проблемах, в том числе проблема, связанная с необходимостью использования ${mysql_optfile};
- Порт с языком Rust обновлён до версии 1.16, а пакетный менеджер Cargo до версии 0.17.0. Началась работа по обеспечению поддержки Rust во FreeBSD на архитектурах, отличных от x86, в том числе уже подготовлены патчи для FreeBSD/aarch64 и ведётся работа над поддержкой FreeBSD/sparc64.
- Дерево портов FreeBSD преодолело рубеж в 29500 портов (на 2500 портов больше, чем в прошлом отчёте), число незакрытых PR держится на отметке в 2400. За отчётный период внесено 6656 изменений от 167 разработчиков. Права коммиттера получили семь новых участников: Eugene Grosbein (eugen), Vladimir Kondratyev (wulf), Johannes Dieterich (jmd), Larry Rosenman (ler), Mahdi Mokhtari (mmohki), Matthew Rezny (rezny) и Tobias Kortkamp (tobik). Шесть участников лишились права коммита в порты, большинство из-за длительной неактивности, но один из-за конфликта, который не удалось уладить мирным путём.