Отчёт о состоянии развития FreeBSD за первый квартал 2015 года
5 мая 2015 года
Представлен отчёт о развитии проекта FreeBSD с января по март 2015 года.
Основные достижения:
- Система
- Поставляемые в базовой системе компилятор Clang, компоненты LLVM и отладчик LLDB обновлены до выпуска 3.6. Импортирован новый снапшот compiler-rt, который позволил добавить в поставляемый в базовой системе инструментарий средства для выявления ошибок при работе с памятью (Address Sanitizer) и детектор неопределённого поведения программы (Undefined Behavior Sanitizer);
- На финальный этап разработки вышел проект по созданию загрузчика со встроенной поддержкой языка Lua, который должен заменить собой загрузчик на базе языка Forth. Все скрипты уже переписаны на Lua и размещены в директории sys/boot/lua. Новый загрузчик будет интегрирован во FreeBSD HEAD как только будет завершено его тестирование и достигнут паритет в функциональности с загрузчиком Forth;
- Подготовлен релиз пакетного менеджера Pkg 1.5 с возможностью возобновления прерванных загрузок, режимом установки пакета в иную корневую директорию без использования chroot и начальной поддержкой опций provides/requires, позволяющих определить какой установленный пакет предоставляет указанную библиотеку и какие пакеты используют данную библиотеку.
- Добавлены два новых системных вызова futimens() и utimensat(), позволяющие манипулировать временем модификации файла с наносекундной точностью. Утилиты cp, mv и touch уже обновлены для сохранения параметров доступа с повышенной точностью. Ранее, stat() и похожие системные вызовы выводили параметры с наносекундной точностью, но установить эти параметры можно было только с точностью до микросекунд.
- В основное дерево исходных текстов приняты наработки по обеспечению сборки FreeBSD для развёртывания в качестве гостевой ОС в cloud-окружениях Amazon EC2, что дало возможность наладить формирование AMI-сборок FreeBSD в рамках основного процесса формирования релизов. Для сборки следует выполнить "make ec2ami" в директории src/release.
- Во FreeBSD HEAD обеспечена возможность динамической загрузки многопоточной библиотеки libthr.so из однопоточных процессов, собранных без опции "-lpthread". Для обхода ранее присутствовавших ограничений библиотека libthr.so преобразована в плагин к libc.
- Стартовал процесс миграции FreeBSD на инструментарий работы с исполняемыми файлами в формате ELF, эквивалентный набору GNU Binutils, но распространяемый под лицензией BSD. В настоящее время уже подготовлены BSD-версии библиотек libelf и libdwarf, а также утилит addr2line, nm, readelf, size, strings и strip (elfcopy). Пока отсутствуют аналоги утилит as, ld и objdump, но их планируется заимствовать у проекта LLVM.
- Изолированные окружения, эмуляторы, безопасность и ограничения ресурсов
- Отмечается прогресс в реализации верифицированной загрузки на системах с UEFI Secure Boot. В ветку 11-CURRENT добавлена новая утилита uefisign для формирования цифровых подписей для файлов EFI. Остальные утилиты размещены в портах sysutils/pesign, sysutils/sbsigntool и sysutils/shim. Подготовлен прототип патча для использования Secure Boot shim в загрузчике boot1.
- В рамках проекта Nested Kernel для FreeBSD развивается реализация новой системной архитектуры, подразумевающей запуск отдельного небольшого вложенного изолированного ядра помимо основного монолитного ядра. Вложенное ядро берёт на себя все операции с обновлением таблиц трансляции виртуальной памяти, обеспечивая защиту основного ядра от полной компрометации в случае атаки (вложенное ядро инициализирует систему, так что все страниц памяти становятся отражены в режиме только для чтения, все страницы с кодом защищены от записи, а все страницы с данными защищены от запуска). С точки зрения производительности подобный поход приводит к накладным расходам, которые оцениваются для http-сервера apache в 1%, для sshd - в 3.7%, для компиляции ядра - 2.7%.
- Продолжается работа по улучшению реализации гипервизора BHyVe, изначально разработанного компанией NetApp и поставляемого в базовом составе FreeBSD 10. Работа сосредоточена на обеспечении поддержки новых типов гостевых систем и доведении функциональности до других гипервизоров. В настоящее время поддерживается создание хост-систем на базе платформы FreeBSD/AMD64 и запуск в гостевых системах FreeBSD, Linux i386/x64, OpenBSD i386/amd64 и NetBSD/amd64. Из последних достижений отмечается поддержка неблокирующего VCPU асинхронного ввода/вывода в драйвере virtio-blk, возможность параллельной обработки запросов в устройствах virtio-blk и ahci-hd, поддержка операции TRIM в ahci-hd.
Из задач на будущее выделяются: развитие инструментария bhyveucl, поддержка virtio-scsi, создание гибких сетевых бэкендов, таких как wanproxy и vhost-net, объединение процессов bhyveload и bhyve, возможность запуска bhyve без прав root, фильтры для образов виртуальных машин VMDK, VHD и QCOW2, абстрактная прослойка для видео, не привязанная к X11 или SDL, поддержка спящего режима, Live-миграция, вложенный запуск виртуальных машин, поддержка архитектур ARM, MIPS и PPC.
- Подготовлен новый патч с улучшенной реализацией технологии ASLR (Address space layout randomization) для защиты от некоторых видов атак, манипулирующих переполнением буфера. Новый патч отличается более высокой надёжностью и уже опробован проектом HardenedBSD в промышленной эксплуатации. В качестве следующего шага намечена компиляция приложений и библиотек базовой системы в формате PIE (Position-Independent Executables), который необходим для эффективной работы ASLR.
- Сетевая подсистема
- Подготовлена новая версия патчей с реализацией расширения Multipath TCP (MPTCP), позволяющего организовать доставку пакетов одновременно по нескольким маршрутам через разные сетевые интерфейсы, привязанные к разным IP-адресам. Целью проекта является подготовка MPTCP-патчей для ядра FreeBSD, совместимых с эталонной реализацией MPTCP и дополнительными улучшениями. Новая версия патчей отличается полностью переработанной архитектурой, пригодностью установки соединений по нескольким каналам связи и поддержкой повторной передачи на уровне данных (data-level re-transmission).
- В рамках проекта "opaque ifnet" совместно с компанией Netflix развивается новый программный интерфейс ядра (KPI) для сетевых драйверов, который позволит развивать сетевой стек без нарушения совместимости с уже существующими драйверами. Основная идея нового интерфейса в скрытии от драйвера структуры ifnet, позволяя не заботиться о составе данной структуры.
- Для iSER Initiator, развиваемого в рамках нового нативного стека iSCSI, подготовлена начальная поддержка iSCSI-расширений для RDMA (Remote Direct Memory Access), используемых в продуктах компании Mellanox. Данные расширения предоставляют доступ к средствам аппаратного ускорения перемещения данных, присутствующих в 10, 40, 56 и 100 gigabit IB/Ethernet адаптерах Mellanox.
- Системы хранения и файловые системы
- Разработка реализации файловой системы autofs и связанного с ней демона automountd для организации автоматического монтирования ФС при попытке обращения к связанным с ними разделам, после включения в состав FreeBSD 10.1 в основном перешла на стадию оптимизации и устранения ошибок. При этом отмечается и появление новшеств, таких как дополнительная привязка "-media", предназначенная для обработки внешних накопителей, таких как Flash и DVD, а также средства для её поддержки в сопутствующих подсистемах, таких как fstyp и GEOM devd. Кроме того, добавлена привязка "-noauto" для типового автоматического монтирования ФС, помеченных флагом "noauto" в fstab, без необходимости написания отдельных правил autofs.
- Поддержка оборудования
- Представлен CheriBSD, ответвление от FreeBSD для исследовательских процессоров CHERI (Capability Hardware Enhanced RISC Instructions). В рамках проекта CheriBSD ведётся работа по адаптации ядра FreeBSD и пользовательского окружения для использование развиваемой в CHERI системы управления доступом к памяти, основывающейся на модели проекта Capsicum.
- Реализована, но ещё требует тестирования, начальная поддержка горячего подключения устройств PCI Express (PCIe), которая позволит на лету при работе системы извлекать и подключать периферийные устройства с интерфейсом PCIe (например, подключение адаптеров Gigabit Ethernet и eSATA через слоты ExpressCard и Thunderbolt на ноутбуках).
- Продолжается портирование FreeBSD для процессоров POWER8. Для экспериментов проект FreeBSD получил сервер GN70-BP010 POWER8. Добавлена поддержка инструкций VSX (Vector-Scalar Extensions);
- Проведение работы по обеспечению поддержки расширений современных платформ x86, таких как x2APIC и VT-d IR.
- Добавлена поддержка новых ARM-плат Amlogic SoC aml8726-m6 и aml8726-m8b;
- Отмечен значительный прогресс в реализации поддержки 64-разрядной архитектуры ARM64 (AARCH64). Во FreeBSD-HEAD уже приняты прошедшие рецензирование изменения, которых достаточно для работы под управлением эмуляторов QEMU и ARM Foundation Model. В качестве эталонной аппаратной платформы, для тестирования FreeBSD/ARM64 используется плата Cavium ThunderX.
- Приложения и система портов
- Дерево портов FreeBSD держится на уровне 25 тысяч портов, число незакрытых PR достигло отметки в 1500. За отчётный период закрыто около 2 тысяч PR и внесено приблизительно 7 тысяч изменений.
- Продолжена работа по чистке и упрощению сопровождения портов, связанных с языком программирования Python (lang/python*). Обновлены версии CPython (2.7.9 и 3.4.3), фреймворк Twisted обновлён до выпуска 15.0.0.
- Окружение GNOME обновлено до выпуска 3.14, а окружение Cinnamon до выпуска 2.4. Ведётся работа по портированию GNOME 3.16 и рабочего стола MATE 1.10, релиз которого ожидается в ближайшем будущем.
- Началась работа по портированию libinput и тестированию Wayland. Поддержка Wayland в портах ожидается после прекращения времени жизни ветки FreeBSD 8.4;
- Проведена адаптация новых версий десктоп-оболочки KDE и фреймворка Qt для FreeBSD. В порты помещены релизы 4.14.3, Qt 5.4.1, Calligra 2.9.1 (в area51), CMake 3.1.0, 3.1.1, 3.1.3, DigiKam 4.2.0, 4.8.0 (в area51), PyQt 4.11.3 + QScintilla 2.8.4 + sip 4.16.5, sip 4.16.7 (в area51). В репозиторий area51 началось добавление компонентов KDE Frameworks 5;
- Обновлён графический стек. В портах libglapi, libGL, libEGL, libglesv2, gbm и dri задействован новый выпуск Mesa 10.4.x. Проходят тестирования порты с Mesa 10.5 и xorg-server 1.17. Добавлен новый порт drm-kmod, предоставляющий новые версии драйверов drm2, i915kms и radeonkms для FreeBSD 9.3-RELEASE и 9.3-STABLE. DRM-компоненты и драйвер i915kms синхронизированы с ядром Linux 3.8.
- Порт с Wine, открытой реализации Win32 API, обновлён до выпуска 1.6.2 (emulators/i386-wine), также доступен порт с экспериментальным выпуском 1.7.39 (emulators/i386-wine-devel). В порт i386-wine-devel добавлена поддержка V4L, сборки с расширением X composite и Wine64, позволяющего запускать 64-разрядные приложения Windows.
- В порты добавлено десктоп-окружение Xfce 4.12, а также обновлены версии связанных с Xfce приложений, таких как x11-fm/thunar 1.6.6.
Источники
правитьЛюбой участник может оформить статью: добавить иллюстрации, викифицировать, заполнить шаблоны и добавить категории.
Любой редактор может снять этот шаблон после оформления и проверки.
Комментарии
Если вы хотите сообщить о проблеме в статье (например, фактическая ошибка и т. д.), пожалуйста, используйте обычную страницу обсуждения.
Комментарии на этой странице могут не соответствовать политике нейтральной точки зрения, однако, пожалуйста, придерживайтесь темы и попытайтесь избежать брани, оскорбительных или подстрекательных комментариев. Попробуйте написать такие комментарии, которые заставят задуматься, будут проницательными или спорными. Цивилизованная дискуссия и вежливый спор делают страницу комментариев дружелюбным местом. Пожалуйста, подумайте об этом.
Несколько советов по оформлению реплик:
- Новые темы начинайте, пожалуйста, снизу.
- Используйте символ звёздочки «*» в начале строки для начала новой темы. Далее пишите свой текст.
- Для ответа в начале строки укажите на одну звёздочку больше, чем в предыдущей реплике.
- Пожалуйста, подписывайте все свои сообщения, используя четыре тильды (~~~~). При предварительном просмотре и сохранении они будут автоматически заменены на ваше имя и дату.
Обращаем ваше внимание, что комментарии не предназначены для размещения ссылок на внешние ресурсы не по теме статьи, которые могут быть удалены или скрыты любым участником. Тем не менее, на странице комментариев вы можете сообщить о статьях в СМИ, которые ссылаются на эту заметку, а также о её обсуждении на сторонних ресурсах.