Zpráva o vývoji projektu FreeBSD od ledna do března 2020. Mezi změnami lze uvést:
- Obecné a systémové otázky
- Z větve zdrojových textů FreeBSD-CURRENT byla odstraněna sada kompilátorů GCC a také nepoužívané utilitky gperf, gcov a gtc (kompilátor devicetree). Všechny platformy, které nepodporovaly Clang, byly převedeny na použití externího buildovacího nástroje instalovaného z portů. V základním systému byl dodáván zastaralý vydání GCC 4.2.1, a integrace novějších verzí byla nemožná kvůli přechodu 4.2.2 na licenci GPLv3, která byla považována za nepřijatelnou pro základní komponenty FreeBSD. Aktuální vydání GCC, včetně GCC 9, lze i nadále nainstalovat z balíčků a portů.
- Infrastruktura emulace prostředí Linux (Linuxulator) přidala podporu systémového volání sendfile, režimu TCP_CORK (potřebného pro nginx), příznaku MAP_32BIT (řeší problém se spouštěním balíčků s Mono z Ubuntu Bionic). Byly vyřešeny problémy s DNS resolvováním při použití glibc novější než 2.30 (např. z CentOS 8).
V infrastruktuře kontinuální integrace byl zajištěn běh úloh pro spuštění LTP (Linux Testing Project) pod řízením Linuxulatoru pro testování vylepšení implementovaných do kódu pro podporu Linuxu. Přibližně 400 testů končí chybou a vyžaduje opravu (některé chyby jsou způsobeny falešnými poplachy, některé vyžadují triviální opravy, ale jsou i takové, pro jejichž odstranění je potřeba přidat podporu nových systémových volání). Byla provedena práce na úklidu kódu Linuxulatoru a zjednodušení ladění. Byly připraveny, ale ještě nebyly recenzovány, patche s podporou rozšířených atributů a systémového volání fexecve. - Pokračují zasedání pracovní skupiny zřízené k provedení migrace zdrojových textů z centralizovaného systému správy zdrojových textů Subversion do decentralizovaného systému Git. Zpráva s návrhy na migraci je v přípravě.
- V (runtime linker) byl vylepšen režim přímého spouštění ("/libexec/ld-elf.so.1 {cesta} {argumenty}").
- Pokračuje vývoj projektu fuzzingového testování jádra FreeBSD s využitím systému syzkaller. Během vykazovaného období byly odstraněny problémy v síťovém stacku a kódu pro práci s tabulkami deskriptorů souborů, které byly identifikovány pomocí syzkaller. Na základě diagnostiky chyb ve stacku SCTP byly přidány změny, které zjednodušují ladění. Do sady stress2 byly přidány pravidla pro zjištění možných regresí. Byla přidána podpora fuzzingového testování nových systémových volání, včetně copy_file_range(), __realpathat() a volání subsystému Capsicum. Pokračuje práce na pokrytí fuzzingovým testováním vrstvy emulace Linuxu. Byla provedena analýza a odstranění chyb uvedených v nových zprávách Coverity Scan.
- V systému kontinuální integrace došlo k přechodu na provádění všech testů větve head pouze za použití clang/lld. Při testování pro RISC-V bylo zajištěno vytvoření kompletního diskového obrazu pro spuštění testů v QEMU s využitím OpenSBI. Byly přidány nové úlohy pro testování obrazů a virtuálních strojů powerpc64 (FreeBSD-head-powerpc64-images, FreeBSD-head-powerpc64-testvm).
- Probíhá práce na přenosu testovací sady Kyua z portů (devel/kyua) do základního systému za účelem vyřešení problémů (balíčky se instalují velmi pomalu), které vznikají při použití Kyua na nových architekturách, jejichž vývoj probíhá s využitím emulátoru nebo FPGA. Integrace do základního systému výrazně zjednoduší testování vestavěných platforem a spolupráci se systémy kontinuální integrace.
- Byl zahájen projekt na optimalizaci výkonu ovladače síťových mostů , který používá jeden mutex pro zamykání interních dat, což neumožňuje dosáhnout požadovaného výkonu na systémech s velkým počtem jail-ů nebo virtuálních strojů sdružených v jedné síti. V této fázi byly do kódu přidány testy, aby se zabránilo vzniku regresí během modernizace práce se zámky. Zvažuje se možnost využití ConcurrencyKit pro paralelizaci zpracovatelů přenosu dat (bridge_input(), bridge_output(), bridge_forward(), ...).
- Bylo přidáno nové systémové volání sigfastblock, které umožňuje vláknu určit blok paměti pro rychlého zpracovatele signálů s cílem zvýšit výkon zpracovatelů výjimek.
- Byla přidána podpora atomárních instrukcí LSE (Large System Extension) v jádře, které jsou podporovány systémy ARMv8.1. Tyto instrukce jsou nezbytné pro zvýšení výkonu na deskách Cavium ThunderX2 a AWS Graviton 2. Přidané změny určují přítomnost podpory LSE a dynamicky aktivují implementaci atomických operací na jejich základě. Při testování umožnilo použití LSE snížit procesorový čas potřebný na sestavení jádra o 15%.
- Byla provedena optimalizace výkonu a rozšířena funkčnost nástrojů pro spustitelné soubory ve formátu ELF.
Byla přidána podpora kešování ladicích informací DWARF, byly vyřešeny problémy v utilitách elfcopy/objcopy, byla přidána podpora zpracování DW_AT_ranges.
V readelf byla implementována možnost dekódování flagů PROTMAX_DISABLE, STKGAP_DISABLE a WXNEEDED, stejně jako Xen a GNU Build-ID.
- Bezpečnost
- Pro zlepšení fungování FreeBSD v cloudových prostředích Azure je prováděna podpora mechanismu HyperV Socket, který umožňuje použít rozhraní socketů pro komunikaci mezi hostitelským prostředím a hostovaným systémem bez nastavení sítě.
- Probíhá práce na zajištění opakovatelných sestavení FreeBSD, která usnadní ověření, že spustitelné soubory systémových komponent jsou sestaveny přesně z deklarovaných zdrojových kódů a neobsahují nežádoucí změny.
- Do utilit elfctl byla přidána možnost správy aktivace dodatečných ochranných mechanismů (ASLR, PROT_MAX, stack gap, W+X mapping) na úrovni jednotlivých procesů.
- Systémy ukládání a souborové systémy
- Probíhá práce na implementaci podpory NFS přes šifrovaný spoj na bázi TLS 1.3 namísto používání Kerberos (režim sec=krb5p), který se omezuje pouze na šifrování RPC zpráv a je realizován pouze softwarově. Nová implementace využívá jádrem poskytovaný TLS stack, který umožňuje využití hardwarového zrychlení. Kód NFS přes TLS je téměř připraven k testování, avšak stále vyžaduje práci na podpoře podepsaných klientských certifikátů a přizpůsobení TLS stacku jádra pro odesílání dat NFS (patch pro příjem je již připraven).
- Podpora hardwaru
- Probíhá práce na přidání podpory pro čínské x86 CPU Hygon na základě technologií AMD.
- V rámci CheriBSD, odnože FreeBSD pro výzkumnou procesorovou architekturu. (Capability Hardware Enhanced RISC Instructions) pokračuje implementace podpory procesoru ARM Morello, který bude podporovat systém správy přístupu k paměti CHERI založený na modelu ochrany projektu Capsicum. Čip Morello bude vydán v roce 2021. V současnosti je práce soustředěna na přidání podpory platformy Arm Neoverse N1, která tvoří základ pro Morello. Byla představena počáteční portace CheriBSD pro architekturu RISC-V. Pokračuje vývoj CheriBSD pro referenční prototyp CHERI založený na architektuře MIPS64.
- Pokračuje portování FreeBSD pro 64-bitový SoC NXP LS1046A založený na procesoru ARMv8 Cortex-A72 s integrovaným urychlovačem zpracování síťových paketů, 10 Gb Ethernet, PCIe 3.0, SATA 3.0 a USB 3.0. V současnosti se připravují ovladače QorIQ a LS1046A, GPIO, QorIQ LS10xx AHCI, VF610 I2C, Epson RX-8803 RTC, QorIQ LS10xx SDHCI k předání do hlavního vydání FreeBSD.
- Do verze 2.1.1 byl aktualizován ovladač ena s podporou druhé generace síťových adaptérů ENAv2 (Elastic Network Adapter), které se používají v infrastruktuře Elastic Compute Cloud (EC2) pro organizaci spojení mezi uzly EC2 při rychlostech až 25 Gb/s. Připravuje se aktualizace na ENA 2.2.0.
- Pokračuje zdokonalování portu FreeBSD pro platformu powerpc64. Hlavní pozornost je věnována zajištění kvalitního výkonu na systémech s procesory IBM POWER8 a POWER9. Během sledovaného období došlo k přepnutí FreeBSD-CURRENT na používání kompilátoru LLVM/Clang 10.0 a linkeru lld místo GCC. Výchozí volbou pro systémy powerpc64 se stal ELFv2 ABI, podpora ELFv1 ABI byla ukončena. Ve FreeBSD-STABLE stále zůstává gcc 4.2.1. Byly vyřešeny problémy s ovladači virtio, aacraid a ixl. Na systémech powerpc64 byla zajištěna možnost spouštění QEMU bez podpory Huge Pages.
- Pokračovalo se v implementaci podpory architektury RISC-V. V aktuálním stavu se FreeBSD již úspěšně spouští na desce SiFive Hifive Unleashed, pro kterou byly připraveny ovladače
UART, SPI a PRCI, podporuje firmware OpenSBI a SBI 0.2. Během sledovaného období byla práce soustředěna na migraci z GCC na clang a lld.
- Aplikace a systém portů
- Kolekce portů FreeBSD překročila hranici 39 tisíc portů, počet neuzavřených PR mírně přesahuje 2400, z nichž 640 PR ještě není zpracováno. Během zprávového období bylo provedeno 8146 změn od 173 vývojářů. Status committera získali čtyři noví účastníci (Loïc Bartoletti, Mikael Urankar, Kyle Evans, Lorenzo Salvadore). Byl přidán příznak USES=qca a odstraněn příznak USES=zope (kvůli nekompatibilitě s Python 3). Pracuje se na odstranění Python 2.7 z portového stromu - všechny porty závislé na Pythonu 2 musí být přeneseny na Python 3, jinak budou odstraněny. Balíčkový manažer pkg byl aktualizován na verzi 1.13.2.
- Byly aktualizovány komponenty grafického stacku a porty související s xorg.
Server X.org byl aktualizován na verzi 1.20.8 (předtím byla dodávána verze 1.18), což umožnilo přepnout FreeBSD na výchozí použití backendu udev/evdev pro zpracování vstupních zařízení. Balíček Mesa byl přepnut na výchozí použití rozšíření DRI3 místo DRI2. Pracuje se na udržení aktuálnosti grafických ovladačů, stacku vstupních zařízení a komponent drm-kmod (port, který zajišťuje provoz DRM modulů amdgpu, i915 a radeon, používající framework linuxkpi pro kompatibilitu s Direct Rendering Managerem jádra Linuxu). - Desktop KDE Plasma, KDE Frameworks, KDE Applications a Qt jsou udržovány aktuální a byly aktualizovány na nejnovější verze. Do portů byla přidána nová aplikace kstars (hvězdný atlas).
- Bylo provedeno úsilí o odstranění regresivních změn v okně správy xfwm4, které se objevily po aktualizaci Xfce na verzi 4.14 (například se objevily artefakty při dekoration okna).
- Port s Wine byl aktualizován na verzi Wine 5.0 (dříve byla nabízena verze 4.0.3).
- Od verze 1.14 byl do kompilátoru jazyka Go přidán oficiální support pro architekturu ARM64 pro FreeBSD 12.0.
- OpenSSH v základním systému byl aktualizován na verzi 7.9p1.
- Byla implementována a umístěna do portů (devel/libsysctlmibinfo2) knihovna sysctlmibinfo2, která poskytuje API pro přístup k sysctl MIB a provádí překlad názvů sysctl na identifikátory objektů (OID).
- Byla vytvořena aktualizace distribuce , což je edice FreeBSD přizpůsobená pro použití jako přenosná pracovní stanice, zaváděná z USB zařízení. Grafické prostředí je založeno na správci oken . Pro montování zařízení se používá (podporuje připojení CD9660, FAT, HFS+, NTFS, Ext2/3/4), pro konfiguraci bezdrátové sítě - , a pro řízení hlasitosti - .
- Začala na psaní komplexní dokumentace pro manažer jail-ových prostředí . Připravuje se k vydání pot 0.11.0, ve kterém se objeví nástroje pro správu síťového stacku.
Zdroj: opennet.ru
