Опубликован отчёт о развитии проекта FreeBSD с апреля по июнь 2016 года.
Основные достижения во втором квартале:
- Система
- Стартовал проект по проведению рефакторинга загрузчика для систем с UEFI, проведённого с целью более плотного использования EFI API. Вместо отдельного кода работы с ФС в загрузчике boot1 теперь задействована общая реализация, единая с loader, которая основана на модели драйверов EFI и позволяет легко экспортировать поддержку любых ФС FreeBSD в форме отдельных драйверов EFI. Загрузчики boot1 и loader также переработаны для применения интерфейса EFI_SIMPLE_FILE_SYSTEM. Отдельного упоминания заслуживает добавление модуля geli_efi с возможностью работы с шифрованными дисковыми разделами, зашифрованными при помощи GELI;
- В libthr реализована поддержка надёжных мьютексов, дающих приложению возможность выявления и теоретически восстановления от краха в процессе изменения состояния совместного мьютекса. Новая модель мьютексов основана на использовании вызова pthread_mutex, обеспечивает надёжное определение факта краха потока, занимающего мьютекс, и позволяет корректно продолжить работу оставшимся потокам. Из приложений в которых применяются надёжные мьютексы отмечается Samba. В сочетании с ранее добавленными разделяемыми между процессами блокировками (PTHREAD_PROCESS_SHARED) надёжные мьютексы позволили привести libthr к совместимости со всеми значительными возможностями POSIX. Наработки включены в состав ветки FreeBSD 11.
- Продолжается работа по обеспечению использования компоновщика lld, развиваемого проектом LLVM, для динамического связывания объектных файлов FreeBSD. Уже налажен процесс сборки базовой системы FreeBSD/amd64 с применением lld вместо GNU BFD ld, т.е. lld уже может использоваться при сборке пользовательского окружения FreeBSD. Lld пока не может использоваться для ядра FreeBSD из-за ограничений в вычислении выражений в скриптах компоновки и отсутствия поддержки некоторых опций;
- Изолированные окружения, эмуляторы, безопасность и ограничения ресурсов
- Продолжена разработка реализации механизма защиты ASLR (Address Space Layout Randomization) для FreeBSD, который производит рандомизацию отображения в память (memory mapping) любых нефиксированных структур. В последнее время в рамках проекта подготовлена утилита proccontrol, предназначенная для управления, оценки состояния и отслеживания применения ASLR в привязке к отдельным процессам. В частности, утилита может использоваться для анализа проблем, возникающих в приложениях после включения ASLR. Применение proccontrol позволило выявить ряд портов, неработоспособных при включении ASLR (например, Lisp и Emacs), для подобных портов предложено добавить директиву ASLR_UNSAFE=yes, при установке которой ASLR при сборке порта отключается через вызов «proccontrol -m aslr -s disable». В заголовок ELF-файла также предложено включить флаг, сигнализирующий о несовместимости исполняемого файла с ALSR;
- Развивается проект по обеспечению повторяемых сборок FreeBSD, при которых сборка одних и тех же исходных текстов приводит к генерации тождественных бинарных файлов, совпадающих побитово, что позволяет любому желающему убедиться в том, что сборка ISO-образа произведена из заявленных исходных текстов. Координация работы по обеспечению повторяемых сборок ведётся на сайте reproducible-builds.org. За отчётный период в базовую систему и порты внесена большая порция исправлений. Число портов, для которых поддерживаются повторяемые сборки доведено до 80%. Для анализа различий бинарных файлов предложен инструментарий Diffoscope. Из задач на будущее отмечается привязка сборки портов FreeBSD к инфраструктуре непрерывной интеграции reproducible-builds.org, включение в дерево портов подготовленных патчей и продолжение работы по приведению портов в вид, пригодный для повторяемых сборок;
- Продолжается развитие набора FreeBSD Integration Services (BIS), предоставляющего средства для работы в гостевых системах под управлением гипервизора Hyper-V и облачной платформы Azure. Компания Microsoft опубликовала в официальном хранилище образов виртуальных машин Azure Marketplace собственную сборку FreeBSD 10.3. Выполнена работа по увеличению производительности, стабильности и функциональности драйверов для синтетических сетевых адаптеров и устройств хранения HyperV.
- Системы хранения и файловые системы
- Продолжается разработка порта распределённого хранилища Ceph для FreeBSD. Порт пока охватывает только объектное хранилище RADOS (Object Storage) и инструментарий. Блочное устройство RBD (Ceph Block Device) и файловая система CephFS пока не портированы. Итоговой целью проекта является предоставление возможности развёртывания кластера Ceph с узлами хранения на базе FreeBSD и ZFS, а также поддержка запуска виртуальных машин bhyve на виртуальных дисках, развёрнутых поверх блочного устройства Ceph RBD. За отчётный период порт переведён с Automake на систему сборки CMake, переработан код, связанный с блокировками, обеспечено полное прохождение тестового набора (за исключением тестов, связанных с ещё не реализованными RBD, BlueStore и CephFS);
- Сетевая подсистема
- Обновлён фреймворк виртуализации VIMAGE, базирующийся на технологиях FreeBSD Jail и подсистеме виртуализации сетевого стека VNET. Проведена работа по устранению проблем, крахов и утечек памяти в процессе применения VIMAGE в рабочих конфигурациях с большой нагрузкой. Кроме того, поддержка VNET добавлена и для невиртуализированных компонентов, таких как pf и ipfilter, а также для виртуальных сетевых интерфейсов;
- Поддержка оборудования
- Расширена поддержка одноплатных компьютеров на базе ARM-процессоров Allwinner. Добавлена поддержка OHCI., Для SoC H3, A83T и A64 реализована поддержка контроллера Gigabit Ethernet. Представлена отдельная конфигурация сборки ядра ALLWINNER. Добавлена поддержка SoC A83T, H3 и A13.
- Отмечается прогресс в реализации поддержки 64-разрядной архитектуры ARM64 (AARCH64). Добавлена начальная поддержка платформы ARM Juno и продемонстрирована успешная загрузка на 4-ядерных CPU Cortex-A53. Ведётся портирование для плат Pine64 и Raspberry Pi 3. Обеспечена поддержка 4 уровней pagetable в коде pmap, что позволило увеличить виртуальное адресное пространство до 256TB и реализовать возможность работы на системах с 2 Тб физической памяти. Фреймворк управления прерываниями заменён на intrng, что позволяет использовать общие драйверы для контроллеров прерываний для систем arm и arm64;
- Приложения и система портов
- Дерево портов FreeBSD выросло до 26100 портов (в прошлом отчёте отмечалось 25 тысяч), число незакрытых PR держится на отметке в 2000. За отчётный период закрыто около 1760 PR и внесено приблизительно 7 тысяч изменений. Проведена работа по модернизации инфраструктуры портов, большие целевые файлы bsd.port.mk разбиты на отдельные скрипты, в фазу оценки качества сборки в утилите Poudriere добавлена проверка отсутствующих зависимостей, внесены улучшения для реализации повторяемых сборок, продолжена работа над инфраструктурой для автоматизации сборки пакетов и сборки с дополнительными компонентами для повышения защищённости. Из наиболее значительных обновлений портов отмечаются Firefox 47.0.1, Firefox ESR 45.2.0, Thunderbird 45.1.1, Chromium 51.0.2704.106, Ruby 2.2.5, Ruby Gems 2.6.2, pkg 1.8.6, gmake 4.2.1, KDE 4.14.10, Python 2.7.12, libc++ 3.8.0 и binutils 2.26.
- Обновлён графический стек. Задействован новый выпуск Mesa 11.2.2 (ведётся тестирование порта с 12.0). Обновлён драйвер i915, которые теперь поддерживает все GPU Intel, даже ещё не выпущенные чипы Kaby Lake. В драйвере i915 также устранены проблемы со стабильностью на системах с Sandy Bridge, исправлены сбои при отрисовке WebGL и проблемы с появлением артефактов при перерисовке окон Qt5. Драйвер xf86-video-intel будет обновлён вместе с сервером Xorg, обновлению которого мешают некоторые несовместимости с драйверами NVIDIA.
Обновлён драйвер Radeon, в который добавлена поддержка GPU AMD на базе архитектуры GCN 1.0, которые пока могут использоваться только в 2D, так как с поддержкой 3D имеются проблемы (проходят не все тесты OpenGL). Через драйвер Amdgpu обеспечена поддержка GPU GCN 1.1 и новее, но дравер пока непригоден для запуска X-сервера из-за отсутствия в libdrm некоторых функций (проблему обещают оперативно устранить). Изменения не приняты в FreeBSD 11. План организовать доставку новых драйверов через порты linuxkpi, drm, i915, radeon и amdgpu также находится под большим вопросом и скорее всего не будет реализован.
- Порт devel/gdb обновлён до GDB 7.11.1. В кодовую базу GDB, на основе которой будет подготовлен релиз GDB 7.12, переданы исправления для поддержи точек останова (catchpoints) для системных вызовов. В auxv переданы исправления для анализа расширенных данных заголовков ELF;
- В порте с платформой GitLab, предоставляющей средства для организации совместной работы с Git-репозиториями, решены все существенные проблемы и налажен процесс синхронизации с кодовой базой основных выпусков. При переводе порта на новый значительный релиз пока наблюдаются определённые трудности, но разработчики GitLab намерены обеспечить нативную поддержку FreeBSD, что решит данные проблемы.
- В порты добавлен выпуск рабочего стола GNOME 3.20. В процессе завершения портирование GDM 3.20 и решение проблемы с прокруткой в Firefox.
- Проведена адаптация новых версий десктоп-оболочки KDE и фреймворка Qt для FreeBSD. В порты помещены релизы CMake 3.5.2, DigiKam 4.14.0, KDevelop 4.7.3, Qt Creator 4.0.2, KDE4 4.14.10. Добавлены порты: devel/qbs со сборочной системой QBS, misc/qt5-examples и misc/qt5-doc с примерами и документацией для Qt 5. В экспериментальном репозитории доступны сборки Qt 5.7.0, KDE Frameworks 5.24.0, Plasma Desktop 5.7. и Applications 16.04.2 (branches/plasma5);
- Ведётся работа по удалению из портов устаревшей ветки Ruby on Rails 3.2, которая сосуществует с Rails 4.2. Из портов, пока не избавленных от привязки к Rails 3.2, отмечается www/redmine;
- В порты добавлены инструменты для управления Ethernet-контроллерами Intel. Порт sysutils/intel-nvmupdate включает утилиты для обновления постоянной памяти сетевых устройств на базе чипов XL710 и X710. Порт sysutils/intel-qcu включает утилиты для переключения Ethernet-портов QSFP+ между режимами 1×40Gbps и 4×10Gbps на устройствах XL710. Порт net/intel-ixl-kmod предоставляет новый драйвер, с которым можно использовать вышеупомянутые утилиты во FreeBSD-10.x.
- Разное
- Выбран новый состав FreeBSD Core Team, совета принимающего административные решения, намечающего линию развитию проекта, одобряющего кандидатуры новых коммиттеров и регулирующего спорные вопросы. Выборы проводятся раз в два года. FreeBSD Core Team покинули Глеб Смирнов (glebius@), Robert Watson, Gavin Atkinson, David Chisnall и Peter Wemm. Им на смену пришли John Baldwin, Allan Jude, Kris Moore, Benedict Reuschling и Benno Rice. Из прошлого состава FreeBSD Core Team остались Hiroki Sato, George Neville-Neil, Baptiste Daroussin и Ed Maste.
- Введён в строй сайт для агрегирования блогов, связанных с FreeBSD — planet.FreeBSD.org;
- Проведена работа по рецензированию используемых лицензий и проверке отсутствия лицензионных условий, ограничивающих кодовую базу FreeBSD. Одобрен план по импорту кода под лицензией GPLv2, который допускает сборку GPL-драйверов в форме загружаемых модулей ядра, что позволяет собрать драйвер bwn с поддержкой WiFi 802.11n.
- Проведена работа по увеличению доступности сервисов проекта из сетей IPv6. Тестирование показало, что 10308 из 25522 портов не могут быть извлечены из сетей, имеющих доступ только по IPv6. Добавление поддержки IPv6 на серверы mirror.amdmi3.ru, vault.centos.org, mirror.centos.org, gstreamer.freedesktop.org, people.FreeBSD.org позволило обеспечить возможность извлечения через IPv6 для ещё 711 портов.
Дополнительно можно отметить выпуск третьей бета-версии FreeBSD 11, в котором проведена работа по улучшению libunwind, обновлены локали, увеличен максимальный размер фреймбуфера в драйвере vt, в установщике bsdinstall добавлена форма ввода времени и даты, а также возможность включения опций для усиления безопасности во время установки. Релиз FreeBSD 11.0 запланирован на 2 сентября.