Представлен отчёт о развитии проекта 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.


Источник: http://www.opennet.ru/opennews/art.shtml?num=42163