Опубликован отчёт о развитии проекта FreeBSD с июля по декабрь 2012 года.
Основные достижения:
Система
Представлены два проекта по обеспечению запуска скриптов rc.d в параллельном режиме (rcexecr,
rcorder). Проект rcexecr отличается достижением большего параллелизма и предоставлением более высокой гибкости, но при этом требует более значительной переработки скриптов в директории /etc. Какой из реализаций будет отдано предпочтение остаётся вопросом для обсуждения. Из актуальных задач также отмечается проведение оптимизации скриптов /etc/rc.d/* для исключения лишних задержек;
Обеспечена возможность сборки рабочего 64-разрядного загрузчика для систем с UEFI. Подготовленный UEFI-загрузчик поддерживает загрузку ядра и загрузку системы до приглашения монтирования корневого раздела. Загрузка в полноценном многопользовательском режиме пока не тестировалась. Из планов на будущее отмечается реализация поддержки режима UEFI Secure Boot;
Во FreeBSD HEAD интегрирована улучшенная реализация утилиты BSD patch, поставляемая под лицензией BSD и основанная на наработках проекта DragonFly BSD. В настоящее время задействовать BSD patch можно при сборке системы с опцией WITH_BSD_PATCH. После завершения тестирования новая утилита сможет заменить собой поставляемую в базовой системе утилиту GNU patch. Причиной замены является переход GNU patch на лицензию GPLv3, что вынуждает разработчиков FreeBSD оставаться на давно устаревшей версии GNU patch, распространяемой под лицензией GPLv2. Из дальнейших задач отмечается проведение всестороннего тестирования утилиты;
В ветке HEAD продолжается работа над новой утилитой bsdconfig с реализацией интерфейса для настройки различных параметров системы, который планируется интегрировать в новый инсталлятор bsdinstall для обеспечения функциональности похожей на меню "Configure" из sysinstall. В обособленном виде утилиту bsdconfig можно установить указав при сборке системы флаг WITH_BSDCONFIG. Кроме того, тестовые выпуски утилиты время от времени размещаются в дереве портов (sysutils/bsdconfig) и доступны для установки во FreeBSD 9. Тем не менее версия 0.8, развиваемая в ветке HEAD, ушла далеко вперёд от версии 0.7.3, поставляемой в портах. Из новшеств отмечается интеграция средств для управления пакетами и выполнение задач по обслуживанию дистрибутива;
Сетевая подсистема
Представлен проект pxe_http, позволяющий организовать загрузку FreeBSD, используя транспорт HTTP. В настоящее время работоспособна загрузка FreeBSD в окружении VirtualBox VM с использованием для отдачи загрузочных компонентов Apache 2.2 из портов;
В ветку HEAD интегрированы наработки проекта по обеспечению распараллеливания на SMP-системах пакетного фильтра PF. Основной целью проекта было избавление PF от зависимости от единого мьютекса, из-за которого PF являлся по сути однопоточным. Параллельно были внесены разнообразные сопутствующие улучшения, направленные на общее улучшение работы порта PF для FreeBSD. Отмечается, что работа над проектом завершена и его можно рассматривать как готовый для промышленной эксплуатации;
Системы хранения и файловые системы
Во FreeBSD CURRENT принят код реализации клиента NFSv4.1, в том числе поддерживающего pNFS. Началась реализация сервера NFSv4.1, которую планируется летом довести до состояния, пригодного для интеграции во FreeBSD CURRENT. Прогрессирует разработка режима агрессивного дискового кэширования на стороне клиента NFSv4 (nfsv4-packrats);
После проведения рецензирования интеграции в HEAD ожидает улучшенная реализация драйвера CFI (Common Flash Interface), предоставляющего программный интерфейс к различным типам устройств NOR Flash, используемых во встраиваемой технике. Улучшения коснулись исключения лишних циклов очистки. Для устройств с поддержкой записи единичных слов реализована только запись изменённых слов, для устройств Intel и Sharp обеспечена поддержка одновременной записи групп слов. Переработан код для работы с таймаутами. В итоге, внесённые изменения позволили более чем на порядок увеличить скорость потоковой записи;
Проект по созданию нативного iSCSI Target достиг стадии рабочего прототипа. Основные усилия были потрачены на разработку работающего на уровне ядра iSCSI-фронтэнда к CAM Target Layer. В утилиту ctladm добавлена поддержка специфичных для iSCSI подкоманд, таких как вывод списка сессий iSCSI или принудительный разрыв соединения. Нативная реализация iSCSI Target корректно работает с входящим в состав FreeBSD iSCSI Initiator;
Изолированные окружения, безопасность и ограничения ресурсов
Во FreeBSD 10-CURRENT интегрирован код с реализацией гипервизора BHyVe, изначально разработанного компанией NetApp и поддерживающего запуск гостевых окружений на базе FreeBSD 8-STABLE, 9-STABLE и 10-CURRENT. Для работы требуется система с процессором Intel, поддерживающим аппаратные средства виртуализации VT-x и EPT (Extended Page Tables). Из проводимой в настоящее время работы отмечается реализация поддержки процессоров AMD с расширениями SVM/RVI, перевод кодовой базы на модульную основу и возможность запуска гостевых окружений с системами Linux и Windows. Из ещё не реализованных запланированных возможностей BHyVe упоминается поддержка Live-миграции, временной заморозки окружений и процессоров без аппаратных механизмов ведения изолированных таблиц страниц памяти (Nested Page Tables);
Поддержка оборудования
Началось развитие проекта по добавлению во FreeBSD поддержки переключения видео-режимов на уровне ядра (Kernel Mode Setting) для видеокарт AMD. В настоящее время драйвер уже позволяет запустить X.Org-сервер и обеспечить беспроблемную работу Firefox, а также организовать вывод видео через mplayer с использованием XVideo.
В ветку HEAD интегрирована поддержка архитектур ARMv6 и ARMv7, включая поддержку SoC Marvell MV78x60, TI OMAP4 и AM335x. Из требующих улучшения элементов отмечается поддержка SMP, задействование инструкций VFP/NEON и создание дополнительных драйверов;
Началась работа по портированию FreeBSD для 64-разрядной архитектуры ARM64 (AARCH64). Для FreeBSD портированы тестовые ветки GCC и binutils с поддержкой ARM64, началась реализация поддержки инициализации ядра FreeBSD и настройки MMU на устройствах ARM64;
Обеспечена работа FreeBSD на одноплатном компьютере Raspberry Pi, включая поддержку USB и SDHC контроллеров, сетевого адаптера, Framebuffer (HDMI и композитный выход), GPIO, интерфейса VCHI. Текущая реализация драйвера VCHI позволяет выполнить тесты Videocore (OpenGL, декодирование видео, доступ к экрану). Из не решённых вопросов отмечается поддержка DMA-режима для драйвера USB, переработка организации блокировок в драйвере VCHI, реализация драйверов SPI, PWM и audio;
Для архитектуры FreeBSD/ARMv6 обеспечена возможность использования компилятора Clang. Поддержка ARM EABI теперь доступа как для GCC, так и для Clang, одновременно с поддержкой устаревшего ARM OABI. После решения некоторые наблюдаемых проблем система будет переведена на использование EABI по умолчанию.
Отмечается прогресс в обеспечении работы FreeBSD на плате BeagleBone (TI AM3358/AM3359), основанной на одноядерном CPU ARM Cortex-A8. Отмечается повышение стабильности порта и перемещение разработки в ветку CURRENT. При работе FreeBSD на BeagleBone сетевой драйвер уже достаточно стабилен, систему уже можно использовать для небольших сетевых устройств. Ожидается, что к моменту релиза FreeBSD 10 поддержка BeagleBone уже достигнет полнофункционального состояния. Из актуальных задач отмечается завершение разработки USB-драйвера, решение проблем с производительностью MMCSD, улучшение средств настройки GPIO и обработки pinmux;
Приложения и система портов
Дерево портов FreeBSD преодолело отметку в 24 тысячи портов, число незакрытых PR увеличилось до 1600. Завершена миграция дерева портов с CVS на систему контроля версий Subversion;
Проведена адаптация новых версий десктоп-оболочки KDE и фреймворка Qt для FreeBSD. В порты помещены релизы KDE SC: 4.9.2 (area51)
PyQt 4.9.5 (area51), SIP 4.14 (area51), KDevelop 4.4.1 (area51), KDevPlatform 1.4.1 (area51), Calligra 2.5.4 (area51) и
CMake 2.8.10.1. Обеспечена установка словарей для проверки орфографии с учётом зависимостей портов KDE-locale;
Обновлены компоненты десктоп-окружения Xfce. Осуществлён переход на файловый менеджер Thunar 1.6 с поддержкой вкладок. Из планов на будущее отмечается поддержка HSTS (HTTP Strict Transport Security) в Midori с Vala 0.12.1, замена libxfce4gui на libxfce4ui, решение проблем при работе gtk-xfce-engine с Gtk+ 3.6;
Обновлены порты, связанные с языком программирования Haskell. В частности, осуществлён переход на Haskell Platform 2012.4.0.0 и GHC 7.4.2. Число связанных с Haskell портов достигло 368. Все Haskell-порты обновлены для использования фреймворка OPTIONS и теперь собираются по умолчанию с поддержкой динамических библиотек (DYNAMIC);
Создание инфраструктуры для сборки релиза FreeBSD и формирования дисковых образов без необходимости выполнения операций с root-привилегиями. В систему сборки добавлена опция "-DDB_FROM_SRC" для установки компонентов без привязки к элементам файлов /etc/passwd и /etc/group, и "-DNO_ROOT" для установки файлов под текущим пользователем, осуществляющим сборку, с сохранением всех данных о владельцах, правах доступа и suid-битах в файле ${DESTDIR}/METALOG.
Основные достижения:
Система
Представлены два проекта по обеспечению запуска скриптов rc.d в параллельном режиме (rcexecr,
rcorder). Проект rcexecr отличается достижением большего параллелизма и предоставлением более высокой гибкости, но при этом требует более значительной переработки скриптов в директории /etc. Какой из реализаций будет отдано предпочтение остаётся вопросом для обсуждения. Из актуальных задач также отмечается проведение оптимизации скриптов /etc/rc.d/* для исключения лишних задержек;
Обеспечена возможность сборки рабочего 64-разрядного загрузчика для систем с UEFI. Подготовленный UEFI-загрузчик поддерживает загрузку ядра и загрузку системы до приглашения монтирования корневого раздела. Загрузка в полноценном многопользовательском режиме пока не тестировалась. Из планов на будущее отмечается реализация поддержки режима UEFI Secure Boot;
Во FreeBSD HEAD интегрирована улучшенная реализация утилиты BSD patch, поставляемая под лицензией BSD и основанная на наработках проекта DragonFly BSD. В настоящее время задействовать BSD patch можно при сборке системы с опцией WITH_BSD_PATCH. После завершения тестирования новая утилита сможет заменить собой поставляемую в базовой системе утилиту GNU patch. Причиной замены является переход GNU patch на лицензию GPLv3, что вынуждает разработчиков FreeBSD оставаться на давно устаревшей версии GNU patch, распространяемой под лицензией GPLv2. Из дальнейших задач отмечается проведение всестороннего тестирования утилиты;
В ветке HEAD продолжается работа над новой утилитой bsdconfig с реализацией интерфейса для настройки различных параметров системы, который планируется интегрировать в новый инсталлятор bsdinstall для обеспечения функциональности похожей на меню "Configure" из sysinstall. В обособленном виде утилиту bsdconfig можно установить указав при сборке системы флаг WITH_BSDCONFIG. Кроме того, тестовые выпуски утилиты время от времени размещаются в дереве портов (sysutils/bsdconfig) и доступны для установки во FreeBSD 9. Тем не менее версия 0.8, развиваемая в ветке HEAD, ушла далеко вперёд от версии 0.7.3, поставляемой в портах. Из новшеств отмечается интеграция средств для управления пакетами и выполнение задач по обслуживанию дистрибутива;
Сетевая подсистема
Представлен проект pxe_http, позволяющий организовать загрузку FreeBSD, используя транспорт HTTP. В настоящее время работоспособна загрузка FreeBSD в окружении VirtualBox VM с использованием для отдачи загрузочных компонентов Apache 2.2 из портов;
В ветку HEAD интегрированы наработки проекта по обеспечению распараллеливания на SMP-системах пакетного фильтра PF. Основной целью проекта было избавление PF от зависимости от единого мьютекса, из-за которого PF являлся по сути однопоточным. Параллельно были внесены разнообразные сопутствующие улучшения, направленные на общее улучшение работы порта PF для FreeBSD. Отмечается, что работа над проектом завершена и его можно рассматривать как готовый для промышленной эксплуатации;
Системы хранения и файловые системы
Во FreeBSD CURRENT принят код реализации клиента NFSv4.1, в том числе поддерживающего pNFS. Началась реализация сервера NFSv4.1, которую планируется летом довести до состояния, пригодного для интеграции во FreeBSD CURRENT. Прогрессирует разработка режима агрессивного дискового кэширования на стороне клиента NFSv4 (nfsv4-packrats);
После проведения рецензирования интеграции в HEAD ожидает улучшенная реализация драйвера CFI (Common Flash Interface), предоставляющего программный интерфейс к различным типам устройств NOR Flash, используемых во встраиваемой технике. Улучшения коснулись исключения лишних циклов очистки. Для устройств с поддержкой записи единичных слов реализована только запись изменённых слов, для устройств Intel и Sharp обеспечена поддержка одновременной записи групп слов. Переработан код для работы с таймаутами. В итоге, внесённые изменения позволили более чем на порядок увеличить скорость потоковой записи;
Проект по созданию нативного iSCSI Target достиг стадии рабочего прототипа. Основные усилия были потрачены на разработку работающего на уровне ядра iSCSI-фронтэнда к CAM Target Layer. В утилиту ctladm добавлена поддержка специфичных для iSCSI подкоманд, таких как вывод списка сессий iSCSI или принудительный разрыв соединения. Нативная реализация iSCSI Target корректно работает с входящим в состав FreeBSD iSCSI Initiator;
Изолированные окружения, безопасность и ограничения ресурсов
Во FreeBSD 10-CURRENT интегрирован код с реализацией гипервизора BHyVe, изначально разработанного компанией NetApp и поддерживающего запуск гостевых окружений на базе FreeBSD 8-STABLE, 9-STABLE и 10-CURRENT. Для работы требуется система с процессором Intel, поддерживающим аппаратные средства виртуализации VT-x и EPT (Extended Page Tables). Из проводимой в настоящее время работы отмечается реализация поддержки процессоров AMD с расширениями SVM/RVI, перевод кодовой базы на модульную основу и возможность запуска гостевых окружений с системами Linux и Windows. Из ещё не реализованных запланированных возможностей BHyVe упоминается поддержка Live-миграции, временной заморозки окружений и процессоров без аппаратных механизмов ведения изолированных таблиц страниц памяти (Nested Page Tables);
Поддержка оборудования
Началось развитие проекта по добавлению во FreeBSD поддержки переключения видео-режимов на уровне ядра (Kernel Mode Setting) для видеокарт AMD. В настоящее время драйвер уже позволяет запустить X.Org-сервер и обеспечить беспроблемную работу Firefox, а также организовать вывод видео через mplayer с использованием XVideo.
В ветку HEAD интегрирована поддержка архитектур ARMv6 и ARMv7, включая поддержку SoC Marvell MV78x60, TI OMAP4 и AM335x. Из требующих улучшения элементов отмечается поддержка SMP, задействование инструкций VFP/NEON и создание дополнительных драйверов;
Началась работа по портированию FreeBSD для 64-разрядной архитектуры ARM64 (AARCH64). Для FreeBSD портированы тестовые ветки GCC и binutils с поддержкой ARM64, началась реализация поддержки инициализации ядра FreeBSD и настройки MMU на устройствах ARM64;
Обеспечена работа FreeBSD на одноплатном компьютере Raspberry Pi, включая поддержку USB и SDHC контроллеров, сетевого адаптера, Framebuffer (HDMI и композитный выход), GPIO, интерфейса VCHI. Текущая реализация драйвера VCHI позволяет выполнить тесты Videocore (OpenGL, декодирование видео, доступ к экрану). Из не решённых вопросов отмечается поддержка DMA-режима для драйвера USB, переработка организации блокировок в драйвере VCHI, реализация драйверов SPI, PWM и audio;
Для архитектуры FreeBSD/ARMv6 обеспечена возможность использования компилятора Clang. Поддержка ARM EABI теперь доступа как для GCC, так и для Clang, одновременно с поддержкой устаревшего ARM OABI. После решения некоторые наблюдаемых проблем система будет переведена на использование EABI по умолчанию.
Отмечается прогресс в обеспечении работы FreeBSD на плате BeagleBone (TI AM3358/AM3359), основанной на одноядерном CPU ARM Cortex-A8. Отмечается повышение стабильности порта и перемещение разработки в ветку CURRENT. При работе FreeBSD на BeagleBone сетевой драйвер уже достаточно стабилен, систему уже можно использовать для небольших сетевых устройств. Ожидается, что к моменту релиза FreeBSD 10 поддержка BeagleBone уже достигнет полнофункционального состояния. Из актуальных задач отмечается завершение разработки USB-драйвера, решение проблем с производительностью MMCSD, улучшение средств настройки GPIO и обработки pinmux;
Приложения и система портов
Дерево портов FreeBSD преодолело отметку в 24 тысячи портов, число незакрытых PR увеличилось до 1600. Завершена миграция дерева портов с CVS на систему контроля версий Subversion;
Проведена адаптация новых версий десктоп-оболочки KDE и фреймворка Qt для FreeBSD. В порты помещены релизы KDE SC: 4.9.2 (area51)
PyQt 4.9.5 (area51), SIP 4.14 (area51), KDevelop 4.4.1 (area51), KDevPlatform 1.4.1 (area51), Calligra 2.5.4 (area51) и
CMake 2.8.10.1. Обеспечена установка словарей для проверки орфографии с учётом зависимостей портов KDE-locale;
Обновлены компоненты десктоп-окружения Xfce. Осуществлён переход на файловый менеджер Thunar 1.6 с поддержкой вкладок. Из планов на будущее отмечается поддержка HSTS (HTTP Strict Transport Security) в Midori с Vala 0.12.1, замена libxfce4gui на libxfce4ui, решение проблем при работе gtk-xfce-engine с Gtk+ 3.6;
Обновлены порты, связанные с языком программирования Haskell. В частности, осуществлён переход на Haskell Platform 2012.4.0.0 и GHC 7.4.2. Число связанных с Haskell портов достигло 368. Все Haskell-порты обновлены для использования фреймворка OPTIONS и теперь собираются по умолчанию с поддержкой динамических библиотек (DYNAMIC);
Создание инфраструктуры для сборки релиза FreeBSD и формирования дисковых образов без необходимости выполнения операций с root-привилегиями. В систему сборки добавлена опция "-DDB_FROM_SRC" для установки компонентов без привязки к элементам файлов /etc/passwd и /etc/group, и "-DNO_ROOT" для установки файлов под текущим пользователем, осуществляющим сборку, с сохранением всех данных о владельцах, правах доступа и suid-битах в файле ${DESTDIR}/METALOG.