Доклад за развитието на FreeBSD за първото тримесечие на 2020 година

Публикувано Доклад за развитието на проекта 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. Докладът с предложения за миграция е в процес на подготовка.
    • В rtld (runtime linker) е подобрен режимът на директно изпълнение ("/libexec/ld-elf.so.1 {път} {аргументи}").
    • Проектът за fuzzing-тестове на ядрото FreeBSD с използването на системата syzkaller продължава да се развива. През отчетния период бяха решени проблеми в мрежовия стек и в кода за работа с таблиците на файловите дескриптори, открити с помощта на syzkaller. В следствие на диагностиката на грешки в SCTP стека бяха добавени промени, улесняващи отстраняването на проблеми. В набор stress2 бяха добавени правила за откриване на възможни регресии. Добавена е поддръжка за fuzzing-тестове на нови системни извиквания, включително copy_file_range(), __realpathat() и извиквания на подсистемата Capsicum. Работата по обхващането на слоя за емулация на Linux със fuzzing-тестове продължава. Проведена е проверка и отстраняване на грешки, отбелязани в последните отчети на Coverity Scan.
    • В системата за непрекъсната интеграция е осъществен преход към изпълнение на всички тестове на клон head, използвайки само clang/lld. При тестването за RISC-V беше осигурено формирането на пълен образ на диска за стартиране на тестове в QEMU с помощта на OpenSBI. Добавени са нови задания за тестване на образи и виртуални машини powerpc64 (FreeBSD-head-powerpc64-images, FreeBSD-head-powerpc64-testvm).
    • Работи се по прехвърлянето на тестовия набор Kyua от портовете (devel/kyua) в основната система, за да се решат проблемите (пакетите се инсталират много бавно), които възникват при използването на Kyua на нови архитектури, за разработката на които се използва емулация или FPGA. Интеграцията в основната система значително ще улесни тестването на вградените платформи и свързването с системи за непрекъсната интеграция.
    • Старт на проект за оптимизиране на производителността на драйвера за мрежови мостове if_bridge, който използва един 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-съобщения и се реализира само софтуерно. Новата реализация използва предоставления от ядрото стек TLS, позволяващ използването на средства за хардуерно ускорение. Кодът на NFS над TLS вече е почти готов за тестване, но все още изисква работа по поддръжката на подписани клиентски сертификати и адаптиране на TLS-стека на ядрото за изпращане на данни NFS (пачовете за получаване вече са готови).
  • Поддръжка на оборудване
    • Работи се по добавяне на поддръжка за китайски x86 CPU Hygon, базирани на технологии от AMD;
    • В рамките на CheriBSD, разклонение от FreeBSD за изследователската процесорна архитектура. CHERI (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 с интегриранAcceleration Engine за обработка на мрежови пакети, 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).
    • Създадено е обновление на дистрибуцията NomadBSD 1.3.1, представляваща редакция на FreeBSD, адаптирана за използване като преносима работна станция, зареждаща се от USB устройство. Графичната среда е базирана на прозоречен мениджър Openbox. За монтиране на устройства се използва DSBMD (поддържа се монтиране на CD9660, FAT, HFS+, NTFS, Ext2/3/4), за конфигуриране на безжична мрежа — wifimgr, а за управление на звука — DSBMixer.
    • Започна работа по написването на пълноценна документация за мениджъра jail-окружения pot. Подготвя се версия pot 0.11.0, в която ще се появят средства за управление на мрежовия стек.

Източник: opennet.ru

Купете надежден хостинг за сайтове със защита от DDoS, VPS и VDS сървъри 🔥 Купете надежден хостинг за сайтове със защита от DDoS, VPS и VDS сървъри | ProHoster