Из дoпoлнитeльныx функций oтмeчaeтся упрaвлeниe зaпускoм прoгрaмм в jail-oкружeнияx, пeрeдaчa дeскриптoрoв сoкeтoв из oкружeния xoстa в jail, зaпуск прoгрaмм в прeдoпрeдeлённoм sandbox нa бaзe тexнoлoгии capsicum. В eдиный дeмoн relaunchd свeдeны функции прoцeссa init, систeмы стaртoвыx скриптoв rc.d и init.d, дeмoнoв inetd, atd, crond, и watchdogd. Утилитa pytoport пoзвoляeт сгeнeрирoвaть кaркaс пoртa из пaкeтa PyPI, учтя всe зaвисимoсти, oпрeдeлив лицeнзию и дoбaвив в pkg-descr. Рaзрaбoтчики FreeBSD рaссмaтривaют вoзмoжнoсть зaмeны пoдсистeм init и rc нa бoлee сoврeмeнную систeму инициaлизaции и упрaвлeния сeрвисaми, кoтoрaя пoзвoлит сoкрaтить врeмя зaгрузки блaгoдaря рaспaрaллeливaнию зaпускa сeрвисoв, пoвысить нaдёжнoсть рaбoты зa счёт aвтoмaтичeскoгo пeрeзaпускa в случae сбoя, упрoстить упрaвлeниe зaвисимoстями чeрeз тaкиe тexники кaк aктивaция пo oбрaщeнию к сoкeту, oбeспeчить вoзмoжнoсть зaпускa сeрвисoв пo мeрe нeoбxoдимoсти и зaвeршaть иx при длитeльнoй нeaктивнoсти, увeличить бeзoпaснoсть сoкрaтив числo кoмпoнeнтoв, рaбoтaющиx пoд пoльзoвaтeлeм root. Для пoлнoй зaмeны rc.d из 157 oтмeчeнныx в плaнe задач остаётся выполнить 27. В настоящее время решение по замене пока не принято. Из планов по дальнейшему развитию отмечается поддержка перезапуска заданий в случае их краха, эмуляция cron, поддержка отслеживания изменений файлов и директорий, доведение до финального вида механизмов работы с jail; Продолжена разработка системного менеджера nosh, включающего набор средств для инициализации, загрузки, ведения логов, управления фоновыми процессами и терминалами. К сожалению у проекта HardenedBSD пока нет ресурсов для переноса наработок ASLR в основную кодовую базу FreeBSD; Сетевая подсистема Стартовал проект по переработке стека маршрутизации, в результате которого планируется поднять производительность и масштабируемость, а также подготовить задел для добавления расширенных возможностей. FreeBSD/RISC-V уже успешно загружается в многопользовательском режиме в симуляторе Spike; Для FreeBSD портированы библиотеки для работы с VideoCore, графическим процессором одноплатного ПК Raspberry Pi. Процесс смены корневого раздела реализован в форме частичного завершения работы с удалением всех процессов, отмонтированием rootfs, монтированием нового rootfs, запуском процесса init и переходом к выполнению скриптов инициализации; При поддержке Netflix для подсистемы CAM разработан планировщик ввода/вывода CAM I/O scheduler, который будет включён в состав FreeBSD 11. Основной проблемой текущего стека маршрутизации является чрезмерно большое число блокировок при обработке вывода пакетов, которые приводят к блокировке контекста при выполнении преобразования пакета в сетевой кадр, пригодный для отдачи оборудованию. В качестве компромисса предлагается выделить инструменты под GPLv3 в специальные пакеты для базовой системы, которые будет поставляться в отдельном репозитории, не пересекаясь с кодом базовой системы. Добавлена полная поддержка систем, на которых имеются только разделы ZFS. После завершения перевода экспериментальный тип архитектуры armv6hf будет удалён и для ядра будет использован только «hardware float». Например, флаг SF_NOCACHE запрещает кэширование передаваемых данных, а при помощи макроса SF_READAHEAD () можно установить размер буфера упреждающего чтения; В рамках проекта relaunchd ведётся работа по созданию аналога системного менеджера Launchd (OS X), пригодного для использования во FreeBSD. В UEFI-загрузчик добавлена поддержка корневых разделов с ZFS; Добавлена поддержка сборки релизов для дополнительных ARM-систем: BANANAPI, CUBIEBOARD и CUBIEBOARD2. Целью проекта является подготовка MPTCP-патчей для ядра FreeBSD, совместимых с эталонной реализацией MPTCP и дополнительными улучшениями; Системы хранения и файловые системы В механизм управления ресурсами RCTL добавлена возможность ограничения пропускной способности диска через задание лимитов на полосу пропускания чтения/записи (байт в секунду) и интенсивность операций ввода/вывода (число операций чтения/записи в секунду). Например, пакет с Python-модулем может зависеть от нескольких версий интерпретатора Python (работать как с Python 2.x, так и с 3.x) или для одного приложения требуется сформировать несколько пакетов без разделения на отдельные порты (editors/vim и editors/vim-lite); Разное Во время сборки релизов прекращена генерация контрольных сумм MD5, в пользу SHA512; Реорганизация команды, отвечающей за устранение уязвимостей (Security Team). Полностью переписана утилита secadm, предназначенная для применения к приложениям дополнительных техник защиты. Из основных задач отмечается включение в дерево портов KDE Frameworks 5 и Plasma 5, а также обеспечение работы QtWebEngine во FreeBSD; Подготовлен начальный порт с пользовательским окружением LXQt, развиваемого объединённой командой разработчиков проектов LXDE, Razor-qt и Maui/Hawaii. Сервер X.Org обновлён до выпуска 1.17.4 (1.18 доступен для тестирования, но пока не добавлен в основные порты). Новая реализация разработана компаниями Netflix и NGING и отличается значительным увеличением производительности — файл теперь можно направлять в сокет в асинхронном режиме без ожидания завершения чтения с диска. Связанный с драйвером модуль ядра mlx5en включён по умолчанию в конфигурации GENERIC; Проведена работа по синхронизации состояния драйверов ntb_hw/if_ntb с кодом NTB-драйвера из ядра Linux 4.4; Добавлены драйверы для поддержки контроллеров сенсорных экранов, используемых в платах Raspberry Pi и Beaglebone Black (SoC AM335x); Ведётся работа по переводу порта ARMv6 с использования «soft float» ABI на «hardware float» ABI. Реализация полностью обратно совместима с ранее доступными приложениями и может использоваться в качестве прозрачной замены, не требуя пересборки. В отличие от старого обработчика OOM, оперирующего текущим состоянием виртуальной памяти (снижение свободного места в разделе подкачки и небольшой остаток свободных страниц памяти), новый механизм пытается анализировать динамику изменения потребления памяти, принимая решение о принудительном завершении процессов только в случае реальной угрозы возникновения блокировки. В рамках инициативы подобные блокировки планируется свести к двум вызовам rmlock, что позволит добиться масштабируемости близкой к линейной; Доступен новый выпуск патчей с реализацией расширения Multipath TCP (MPTCP), позволяющего организовать доставку пакетов одновременно по нескольким маршрутам через разные сетевые интерфейсы, привязанные к разным IP-адресам. Предоставляется набор прослоек для использования команд, ставших привычных в других системах, импорта существующих конфигурационных файлов /etc/fstab, /etc/rc.conf, /etc/rc.local и /etc/ttys, а также настроек изолированных окружений Jail и PC-BSD Warden. Формат файлов конфигурации основан на UCL, что позволяет определять параметры заданий в JSON и других форматах, поддерживаемых UCL. Код с реализацией нового RCTL уже в основном протестирован, обеспечена интеграция с ZFS и ожидается включение во FreeBSD 11.0; Подготовлен порт sysutils/fusefs-lkl с FUSE-модулем, который можно использовать для полноценного доступа к любым файловым системам, поддерживаемым ядром Linux, в том числе к ext4/3/2, XFS и BTRFS. Добавлен драйвер для PCIe и SATA-контроллера, обеспечена возможность загрузки FreeBSD. Готовится к включению код для поддержки виртуальных машин с интерфейсом UEFI (Hyper-V Generation-2 VM); Проект HardenedBSD провёл большую работу по улучшению производительности и стабильности развиваемых для FreeBSD дополнительных механизмов защиты. В настоящее время поддерживается только драйвер ti_sdhci, используемый для плат BeagleBone Black; Поддержка оборудования Подготовлен начальный порт FreeBSD для процессоров на базе архитектуры RISC-V. Библиотеки обеспечивают доступ к такими возможностям VideoCore, как OpenGL, механизмы ускорения воспроизведения видео и управление HDMI. Разработана новая утилита бинарного обновления системы hbsd-update, которая может использоваться для обновления окружений jail и ZFS Boot Environments (ZFS BEs). Так как дамп содержит срез памяти процессов, он может включать конфиденциальные данные, такие как оставшиеся в буфере пароли. Кроме того, изменён алгоритм выбора процесса для принудительного закрытия, который теперь не ограничивается учётом числа элементов в таблицах распределённых станиц памяти, но и пытается оценивать реальное число страниц, которое высвободится в результате принудительного завершения процесса, что позволяет более точно выбирать потенциально проблемные процессы; Во FreeBSD 11 принята новая реализация системного вызова sendfile, предназначенного для организации прямой передачи данных между файловым дескриптором и сокетом. В порты помещены релизы CMake 3.4.1, Calligra 2.9.1, PyQt5 5.5.1, PyQt4 4.11.4, QScintilla2 2.9.1, SIP 4.17, QtCreator 3.6.0. Образ корневой ФС может загружаться как с накопителей USB 3.0/2.0, так и через NFS при помощи сетевого адаптера с интерфейсом PCIe. Доступен отчёт о развитии проекта FreeBSD с октября по декабрь 2015 года. Доступны возможности для определения порядка запуска сервисов, организации зависимостей между сервисами, обеспечения параллельного выполнения сервисов, автоматической ротации логов, отслеживания работы сервисов и применения kevent для обеспечения событийно-ориентированного параллелизма. К интеграции в FreeBSD 11-CURRENT готовится ICL-модуль с реализацией iSER Initiator с поддержкой iSCSI-расширений для RDMA (Remote Direct Memory Access), используемых в продуктах компании Mellanox. Для предотвращение утечки этих данных при попадании crash-дампа не в те руки, предлагается шифровать содержимое перед записью. Уже доступна начальная реализация режима HVMlite, который после готовности работы в качестве Dom0 заменит собой старую реализацию PVH. Обеспечено преобразование настроек приоритетов из unit-файлов systemd для использования с rtprio/idprio. В портах libglapi, libGL, libEGL, libglesv2, gbm и dri задействован новый выпуск Mesa 11.0.8. Для включения в ядро почти готово очередное обновление драйвера i915; Внесены улучшения в инструментарий сборки базовой системы (buildworld): добавлен режим WITH_FAST_DEPEND, позволяющий ускорить сборку на 16–35% за счёт выноса фазы построения зависимостей на этап компиляции, реализована поддержка сборки с использованием ccache (WITH_CCACHE_BUILD) без необходимости замены CC в make.conf, внесены многочисленные улучшения в параллелизации процесса сборки и т.д. описание. Данные расширения предоставляют доступ к средствам аппаратного ускорения перемещения данных, присутствующих в 10, 40, 56 и 100 Gigabit IB/Ethernet адаптерах Mellanox; В состав FreeBSD-HEAD принят новый драйвер cxgbei, позволяющий использовать средства аппаратного ускорения для iSCSI Initiator и Target при использовании карт Chelsio T5- и T4. В настоящее время при выводе через HDMI поддерживается только режим 1024×768, но после решения ряда проблем это ограничение будет снято; Расширены возможности драйвера ioat для устройств поддерживающих технологию Intel I/O Acceleration Technology, которые применяются в некоторых серверных системах Intel. Добавлена возможность установки переменных EFI из командной строки загрузчика. За отчётный период закрыто около 1800 PR и внесено приблизительно 7 тысяч изменений. Добавить код под GPLv3 в базовую систему проблематично из-за проявления дополнительных ограничений, которые могут быть неприемлемы для производных проектов. Обновлены порты, связанные с десктоп-окружением Xfce: audio/xfce4-pulseaudio-plugin 0.2.4, multimedia/xfce4-parole 0.8.1, x11/xfce4-whiskermenu-plugin 1.5.2, x11/xfce4-dashboard 0.5.4; Продолжает развитие порт с платформой GitLab, предоставляющей средства для организации совместной работы с Git-репозиториями. Метки безопасности теперь могут быть привязаны не только к процессам, но и к отдельным потокам. Работа SMP-режима полностью работоспособна и протестирована на платах Marvell DB-88F6288-GP и SolidRun ClearFog. Модуль построен с использованием наработок проекта LKL («Linux Kernel as a Library»), позволяющего скомпоновать ядро Linux в форме разделяемой библиотеки, которую можно собрать для различных платформ, в том числе для FreeBSD, и обращаться к функциям ядра из пользовательских приложений. Relaunchd уже содержит всю базовую функциональность Launchd и добавлен в дерево портов, но пока позиционируется как экспериментальная разработка. Таким для работы с ФС используется оригинальный код драйверов из состава Linux; В состав FreeBSD 11-CURRENT принят код для загрузки с временным rootfs, вместо которого затем монтируется реальный корневой раздел. В отчётный период основное внимание было уделено работе над HVMlite, новой реализацией режима PVH, который комбинирует элементы режимов паравиртуализации (PV) и полной виртуализации (HVM). Из ещё не решённых задач отмечается реализация возможности использования LLDB для отладки разделяемых библиотек, портирование компонентов для удалённой отладки, возможность отладки core-дампов ядра и расширение поддержки архитектур, отличных от amd64 и arm64; Внесены улучшения в отладчик GDB: в настройках порта devel/gdb включена по умолчанию опция отладки ядра KGDB, улучшена поддержка кросс-отладки crashdump-ов, реализован новый режим отладки многопоточных программ; Переработана реализация кэша vnode, проведена оптимизация кода для распределения и чистки vnode; В sysctl добавлена поддержка фиксированных типов (знаковые и беззнаковые 8-, 16-, 32 и 64-разрядные целые числа). В одной системе одновременно могут находиться библиотеки, собранные с soft и hard ABI; Выполнено портирование FreeBSD на платформу Marvell Armada38x, в которой используется один или два CPU ARM Cortex-A9. До включения в дерево портов остаётся добавить около 5 зависимостей, что в 10 раз меньше, чем требовалось ранее; Последние достижения проекта NanoBSD, предоставляющего средства для формирования минималистичных сборок FreeBSD, связаны с развитием возможности работы сборочных инструментов без необходимости их запуска с правами root, упрощением процесса создания сборок и оптимизации образов для карт SD и microSD; Развиваются дополнительные утилиты для упрощения работы по созданию и поддержанию портов. В настоящее время ведётся работа по обновлению порта с GitLab 7.14 до выпуска 8.3, который использует Rails 4.2 и существенно упрощает решение проблем с зависимостями. Ведётся работа по обновлению портов Qt5 и KDE до версий Qt5 5.5.1, KDE Frameworks 5.17.0, Plasma 5.5.1 и KDE Applications 15.12.0. В новой версии добавлена поддержка устройств Broadwell-EP, API расширен поддержкой операций «blockfill» и средствами выполнения операций копирования непоследовательных 8-килобайтных блоков памяти; Во FreeBSD 11-current и FreeBSD 10-stable добавлен драйвер mlx5 с поддержкой Ethernet и Infiniband сетевых карт Mellanox ConnectX-4, поддерживающих передачу данных на скоростях до 100GBit/s. Кроме увеличения производительности в новой реализации также добавлены новые флаги, предоставляющие дополнительный контроль над отправкой данных. В новой реализации можно асинхронно отправлять и читать данные. Поддерживается ускорение операций с TCP, идентификации и извлечения iSCSI PDU из потока, генерация и проверка контрольных сумм, прямая (zero copy) передача/получение пакетов; Инициирован проект по добавлению во FreeBSD поддержки SoC, основанных на архитектуре MIPS и применяемых в беспроводных маршрутизаторах Ralink/Mediatek RT3050, RT3052, RT3350, RT3352, RT3662, RT3883, RT5350, RT6855, RT6856, MT7620, MT7621, MT7628 и MT7688. После доведения проекта до конца пользователю будет предоставлена возможность загрузки минимального ядра, аналогичного сборке в конфигурации MINIMAL, с динамической загрузкой всех драйверов устройств по мере необходимости; Во FreeBSD-HEAD принят переработанный механизм вытеснения процессов в ситуации нехватки виртуальной памяти в системе (OOM, Out of Memory). Первый релиз запланирован на первый квартал 2016 года, из оставшихся задач отмечается добавление поддержки PE/COFF в elfcopy и адаптация системы сборки; Для платформ amd64 и arm64 по умолчанию задействован отладчик LLDB, развиваемый проектом LLVM. Отличия «soft float» и «hardware float» ABI будут только на пользовательском уровне, например, будет оставлена возможность сборки библиотек в режиме soft-float через указание сборочной опции WITH_LIBSOFT. С момента публикации прошлого отчёта в Nosh реализованы инструменты для экспорта логов cyclog/multilog в удалённые обработчики логов, поддерживающие RFC 5426 (например, logstash). Для расшифровки доступна новая утилита decryptcore; В состав FreeBSD 10-STABLE принято обновление пакета OpenBSM 1.2 alpha 4 с открытой реализации Sun Basic Security Module (BSM) Audit API, предоставляющего средства для управления аудитом системы и формат файлов аудита; Расширены возможности по работе в роли гостевой системы под управлением гипервизора Hyper-V. В настоящее время проектом сформировано около 300 новых портов, включая Socket.IO и Jison; Дерево портов FreeBSD держится на уровне 25 тысяч портов, число незакрытых PR достигло отметки в 2000. Планировщик позволяет разделять различные типы ввода/вывода, давая возможность привязать ограничения к типам и характеристикам ввода/вывода (в том числе учитывать задержки при обработке недавних запросов, относительно средних показателей). На звание нового системного менеджера претендуют три проекта: relaunchd (написанная с нуля реализация API launchd), развиваемый проектом NextBSD порт launchd из OS X (реализован через прослойку с реализаций механизма межпроцессного взаимодействия микроядра Mach) и nosh, оригинальная разработка по мотивам launchd, systemd и других систем; Близится к завершению проект миграции FreeBSD на инструментарий работы с исполняемыми файлами в формате ELF, эквивалентный набору GNU Binutils, но распространяемый под лицензией BSD.
Отчёт о развитии FreeBSD за четвёртый квартал 2015 года
Предыдущая запись