Опубликован отчёт о развитии проекта FreeBSD с октября по декабрь 2021 года.
Сбор средств:
- Проект с гордостью сообщает о достижении цели: собрано $1,281,437!
Улучшения OS:
- Благодаря усилиям команды Semihalf защита ASLR теперь — штатная функция по умолчанию для 64-разрядных исполняемых файлов PIE и non-PIE.
Спонсировано Stormshield. - Сокращено время загрузки. Работы были начаты в 2017, за стандарт был взят инстанс EC2. К сентябрю 2021 время загрузки было уменьшено с 30 до 15 секунд, а в четвертом квартале доведено до 10.
Спонсировано через Patreon. - Отладчик LLDB. Этот отладчик поставляется в базовой системе и призван заменить собой GDB, но пока отстает от него по функциональным возможностям. Основной целью является реализация удаленной отладки ядра по тому же протоколу, что и для GDB. На данный момент достигнут успех в отладке по последовательному порту RS-232. Завершение проекта ожидается к выпуску LLDB 14.
Спонсировано The FreeBSD Foundation. - Поддержка NXP LS1028A/LS1027A SoC. Это системы с разнообразной периферией на основе 64-bit ARMv8 Cortex-A72.
Спонсировано Alstom Group. - Константином Белоусовым реализованы системные вызовы sched_getcpu(2), membarrier(2), и rseq(2).
В линуксе есть набор системных вызовов, которые позволяют разрабатывать масштабируемые алгоритмы с минимизацией системных вызовов. Эти механизмы основаны на оптимистическом предсказании (optimistic execution) с использованием локальных данных CPU в предполагаемой ситуации, когда переключения контекста, сигналы и прочие события такого рода не случаются, а если они случаются, происходит откат. Такой высокоуровневый подход применяется для реализации утилит вроде URCU (https://liburcu.org/), быстрого выделения памяти (tcmalloc) и других инфраструктурных проектов, нацеленных на кластеры.
Например, системный вызов sched_getcpu(2) возвращает CPU ID, где выполняется текущий поток (thread). Сложность в том, что результат полученный ассемблерными инструкциями устаревает еще в момент создания до возвращения в пространство пользователя. Но его тем не менее можно использовать как начальные данные (seeding values) для расчета долговременных алгоритмов. Два краеугольных камня, которые позволяют реализовать такие алгоритмы в пространстве пользователя — это membarrier(2) and rseq(2).
Эти вызовы написаны во FreeBSD с чистого листа, за основу взяты справка (man) в Linux и публичные обсуждения. В Linux/glibc нет стабильного интерфейса для реализации rseq(2). Что-то вносят в основную ветку, потом отменяют. Разработчкики FreeBSD считают, что будет благоразумнее подождать стабилизации интерфейса в Linux glibc, преждем чем переносить его во FreeBSD libc. В любом случае цели 100% совместимости с Linux не ставится.
Спонсировано: The FreeBSD Foundation. - Константин Белоусов работал также над VDSO (Virtual Dynamic Shared Object). VDSO — это динамическая библиотека, которую подключают к исполняемой программе в результате совместной работы ядра и динамического линковщика. Она не существует на диске в виде отдельного .so и соответственно нет ELF-инструкций для подключения. FreeBSD уже имела множество VDSO-возможностей, которые обычно используются в Linux, но без такого усложнения. Однако не поддерживалась отладочная информация формата DWARF (DWARF annotations). Теперь VDSO оборачивает DWARF annotations в разделяемый объект и помещает в страницу разделяемой памяти.
Спонсировано: The FreeBSD Foundation. - Поддержка ENA (Elastic Network Adapter) — гибких сетевых адаптеров, используемых в Amazon Web Services (AWS).
Спонсировано Amazon. - Добавлены новые драйверы Linux Wireless, которые работают через Linux-совместимый интерфейс LinuxKPI.
Спонсировано: The FreeBSD Foundation. - Джон Болдвин продолжает разработку wireguard-драйвера в ядре. Проделана работа над XChaCha20-Poly1305.
Спонсировано: The FreeBSD Foundation.
Система портов:
- KDE (в основном багфиксы), LibreOffice (нужны люди для багфиксов).
>>> Подробности