Доклад за развитието на проекта FreeBSD от януари до март 2020 г. Важно е да се отбележат следните промени:
- Общи и системни въпроси
- От дървото на изходния код FreeBSD-CURRENT е премахнат наборът от компилатори GCC, както и неизползваемите утилити gperf, gcov и gtc (компилатор devicetree). Всички платформи, които не поддържат Clang, преминават на използване на външни инструменти за компилиране, инсталирани от портовете. В базовата система е предлаган остарял выпуск GCC 4.2.1, а интегрирането на по-нови версии е невъзможно поради преминаването на 4.2.2 на лиценз GPLv3, която е призната за неприемлива за базовите компоненти на FreeBSD. Актуалните версии на GCC, включително GCC 9, могат, както и преди, да бъдат инсталирани от пакети и портове.
- В инфраструктурата за емулативна среда Linux (Linuxulator) е добавена поддръжка на системния повик sendfile, режим TCP_CORK (изисква се за nginx), флага MAP_32BIT (решава проблем с пускането на пакети с Mono от Ubuntu Bionic). Решени са проблемите с разрешаването на DNS при използване на glibc по-нова от 2.30 (например от CentOS 8).
В инфраструктурата за непрекъсната интеграция е осигурен старт на задания за LTP (Linux Testing Project) под управлението на Linuxulator, за тестване на подобренията, внесени в кода за поддръжка на Linux. Около 400 теста завършват с грешка и изискват корекция (някои от грешките са причинени от фалшиви сработвания, някои изискват тривиални корекции, но има и такива, за които е нужно да се добави поддръжка на нови системни повици). Направена е работа по почистването на кода на Linuxulator и опростяване на отстраняването на грешки. Подготвени са, но все още не рецензирани, пачове с поддръжка на разширени атрибути и системния повик fexecve. - Продължават заседанията на работната група, създадена за мигриране на изходния код от централизирана система за управление на код Subversion към децентрализирана система Git. Доклад с предложения за миграция е в процес на подготовка.
- В (runtime linker) е подобрен режимът на директно изпълнение ("/libexec/ld-elf.so.1 {път} {аргументи}").
- Проектът за fuzzing тестване на ядрото на FreeBSD с използването на системата syzkaller продължава да се развива. През отчетния период бяха отстранени проблеми в мрежовия стек и в кода за работа с таблиците на файловите дескриптори, открити с помощта на syzkaller. В следствие на диагностика на грешки в SCTP стека бяха добавени промени, които опростяват отстраняването на проблеми. Нови правила за откриване на възможни регресии бяха добавени в набора stress2. Добавена е поддръжка за fuzzing тестване на нови системни повиквания, включително copy_file_range(), __realpathat() и повиквания на подистемата Capsicum. Продължава работата по обхват на fuzzing тестването на слоя за емулация на Linux. Извършено е изследване и отстраняване на проблеми, отбелязани в последните отчети на Coverity Scan.
- В системата за непрекъсната интеграция бе преминато към изпълнение на всички тестове от главния клон само с използването на clang/lld. При тестване за RISC-V е осигурено генерирането на пълен диск образ за стартиране на тестове в QEMU с използване на OpenSBI. Добавени са нови задания за тестване на образи и виртуални машини powerpc64 (FreeBSD-head-powerpc64-images, FreeBSD-head-powerpc64-testvm).
- Работи се по прехвърлянето на тестовия набор Kyua от портовете (devel/kyua) в основната система, за да се решат проблемите (пакетите се инсталират много бавно), които възникват при използването на Kyua на нови архитектури, за които разработката се извършва с помощта на емулация или FPGA. Интеграцията в основната система значително ще опрости тестването на вградени платформи и свързването с системи за непрекъсната интеграция.
- Започна проект за оптимизация на производителността на драйвера за мрежови мостове , който използва един mutex за блокиране на вътрешните данни, което не позволява постигането на желаната производителност на системи с голям брой jail-окръжения или виртуални машини, обединени в една мрежа. На този етап в кода бяха добавени тестове, за да се предотврати възникването на регресии в процеса на модернизиране на работата с блокировките. Обмисля се възможността за използване на ConcurrencyKit за разпаралеляване на обработчиците за предаване на данни (bridge_input(), bridge_output(), bridge_forward(), …).
- Добавено е ново системно повикване sigfastblock, позволяващо на потока да определи блок памет за бърз обработчик на сигнали с цел повишаване на производителността на обработчиците на изключения.
- В ядрото е добавена поддръжка на атомарни инструкции LSE (Large System Extension), поддържани от ARMv8.1 системи. Тези инструкции са необходими за подобряване на производителността на платформи като Cavium ThunderX2 и AWS Graviton 2. Добавените промени определят наличието на поддръжка за LSE и динамично активират реализацията на atomic на тяхна основа. При тестове, използването на LSE позволи да се намали с 15% времето, прекарано от процесора при компилиране на ядрото.
- Оптимизирана е производителността и е разширена функционалността на инструментария за изпълними файлове в ELF формат.
Добавена е поддръжка за кеширане на отладъчна информация DWARF, решени са проблеми в утилитите elfcopy/objcopy и е добавена обработка на DW_AT_ranges.
В readelf е реализирана възможността за декодиране на флагове PROTMAX_DISABLE, STKGAP_DISABLE и WXNEEDED, както и на Xen и GNU Build-ID.
- Сигурност
- За подобряване на работата на FreeBSD в облачни среди Azure се работи по осигуряване на поддръжка на механизма HyperV Socket, което позволява използването на сокет интерфейса за взаимодействие между гостуващата система и хост средата без настройки на мрежата.
- Работи се по осигуряване на повторяеми компилации на FreeBSD, позволяващи да се уверите, че изпълнимите файлове на системните компоненти са компилирани точно от посочените изходни текстове и не съдържат нежелани промени.
- В утилитата elfctl е добавена възможността за управление на включването на допълнителни механизми за защита (ASLR, PROT_MAX, stack gap, W+X mapping) на ниво отделни процеси.
- Системи за съхранение и файлови системи
- Работи се по реализиране на възможността за работа на NFS върху криптиран канал за комуникация на базата на TLS 1.3, вместо използването на Kerberos (режим sec=krb5p), който ограничава криптирането само на RPC съобщенията и е реализиран само софтуерно. Новата реализация използва предлагания от ядрото стeк TLS, което позволява използването на хардуерно ускорение. Кодът за NFS върху TLS вече е почти готов за тестване, но все още изисква работа по поддръжка на подписани клиентски сертификати и адаптация на TLS стека на ядрото за изпращане на данни NFS (пачовете за получаване вече са готови).
- Поддръжка на оборудване
- Работи се по добавяне на поддръжка за китайските x86 CPU Hygon на базата на технологии на AMD.
- В рамките на CheriBSD, разклонение от FreeBSD за изследователска архитектура на процесора. (Capability Hardware Enhanced RISC Instructions) продължава реализацията на поддръжка на ARM Morello, който ще поддържа системата за управление на достъпа до памет CHERI, базирана на модел за защита на проекта Capsicum. Чипът Morello ще бъде пуснат през 2021 година. В момента работата е съсредоточена върху добавянето на поддръжка на платформата Arm Neoverse N1, лежаща в основата на Morello. Представен е начален порт CheriBSD за архитектурата RISC-V. Продължава развитието на CheriBSD за еталонния прототип CHERI на базата на архитектурата MIPS64.
- Продължено е портването на FreeBSD за 64-битовия SoC NXP LS1046A, базиран на ARMv8 Cortex-A72 с интегриран двигател за ускорение на обработката на мрежови пакети, 10 Gb Ethernet, PCIe 3.0, SATA 3.0 и USB 3.0. В момента се подготвят драйвери за QorIQ и LS1046A, GPIO, QorIQ LS10xx AHCI, VF610 I2C, Epson RX-8803 RTC, QorIQ LS10xx SDHCI за основната версия на FreeBSD.
- До версия 2.1.1 е обновен драйверът ena с поддръжка на второ поколение мрежови адаптери ENAv2 (Elastic Network Adapter), използвани в инфраструктурата Elastic Compute Cloud (EC2) за свързване между възлите EC2 на скорости до 25 Gb/s. Подготвя се обновление до ENA 2.2.0.
- Продължава усъвършенстването на порта FreeBSD за платформата powerpc64. Основното внимание е насочено към осигуряване на качествена работа на системи с процесори IBM POWER8 и POWER9. В отчетния период е извършен преход на FreeBSD-CURRENT към използване на компилатора LLVM/Clang 10.0 и линкера lld вместо GCC. По подразбиране за системи powerpc64 се използва ELFv2 ABI, а поддръжката на ELFv1 ABI е прекратена. В FreeBSD-STABLE все още остава gcc 4.2.1. Решени са проблеми с драйверите virtio, aacraid и ixl. На системи powerpc64 е осигурена възможността за стартиране на QEMU без поддръжка на Huge Pages.
- Продължава работата по реализирането на поддръжка на архитектурата RISC-V. В текущия си вид FreeBSD вече успешно се зарежда на платката SiFive Hifive Unleashed, за която са подготвени драйвери
UART, SPI и PRCI, поддържа фърмуера OpenSBI и SBI 0.2. В отчетния период работата беше съсредоточена върху миграцията от GCC към clang и lld.
- Приложения и система на портовете
- Колекцията на портовете FreeBSD премина границата от 39 хиляди порта, а броят на незатворените PR леко надхвърля 2400, от които 640 PR все още не са разгледани. През отчетния период са направени 8146 промени от 173 разработчици. Четирима нови участници (Loïc Bartoletti, Mikael Urankar, Kyle Evans, Lorenzo Salvadore) получиха права на коммитери. Добавен е флаг USES=qca и е премахнат флагът USES=zope (поради несъвместимост с Python 3). Работата по премахването на Python 2.7 от дървото с портове продължава — всички портове, зависещи от Python 2, трябва да бъдат пренесени на Python 3 или ще бъдат премахнати. Пакетният мениджър pkg е обновен до версия 1.13.2.
- Обновени са компонентите на графичния стек и портовете, свързани с xorg.
Сървърът X.org е обновен до версия 1.20.8 (по-рано беше налична версия 1.18), което позволи на FreeBSD по подразбиране да премине на използването на бекенда udev/evdev за обработка на входни устройства. Пакетът Mesa по подразбиране е пренесен на използване на разширение DRI3 вместо DRI2. Работи се по актуализирането на графичните драйвери, стека за входни устройства и компонентите drm-kmod (порт, осигуряващ работата на DRM модулите amdgpu, i915 и radeon, използвайки рамката linuxkpi за съвместимост с Direct Rendering Manager на ядрото Linux). - Работният плот KDE Plasma, KDE Frameworks, KDE Applications и Qt са поддържани актуални и обновени до най-новите версии. В портовете е добавено ново приложение kstars (звезден атлас).
- Проведена е работа за отстраняване на регресивни промени в мениджъра на прозорци xfwm4, възникнали след обновлението на Xfce до версия 4.14 (например, появиха се артефакти при декорирането на прозорците).
- Портът с Wine е обновен до версия Wine 5.0 (по-рано предлагана 4.0.3).
- От версия 1.14 компилаторът на езика Go получи официална поддръжка за архитектурата ARM64 за FreeBSD 12.0.
- OpenSSH в базовата система е обновен до версия 7.9p1.
- Реализирана и разположена в портовете (devel/libsysctlmibinfo2) библиотека sysctlmibinfo2, предоставяща API за достъп до sysctl MIB и извършваща транслация на имената на sysctl в идентификатори на обекти (OID).
- Сформирано обновление на дистрибутива , представляваща редакция на FreeBSD, адаптирана за използване като преносимо работно място, зареждано от USB флаш памет. Графичното обкръжение е на базата на мениджъра на прозорци . За монтиране на носители се използва (поддържат се файлови системи CD9660, FAT, HFS+, NTFS, Ext2/3/4), за настройка на безжична мрежа — , а за управление на звука — .
- Започна по написване на пълна документация за мениджъра на jail-окружения . Подготвя се за издаване pot 0.11.0, в който ще се добавят средства за управление на мрежовия стек.
Източник: opennet.ru
