Rapport om utvecklingen av projektet FreeBSD frÄn januari till mars 2020. Bland förÀndringarna kan nÀmnas:
- AllmÀnna och systemfrÄgor
- FrÄn trÀdet med kÀlltexter FreeBSD-CURRENT har uppsÀttningen av kompilatorer GCC tagits bort, liksom oanvÀnda verktyg som gperf, gcov och gtc (kompilator för devicetree). Alla plattformar som inte stöder Clang har övergÄtt till anvÀndning av extern byggverktyg som installeras frÄn portar. I grundsystemet levererades en förÄldrad version av GCC 4.2.1, och integrationen av nyare versioner var omöjlig pÄ grund av övergÄngen av 4.2.2 till GPLv3-licensen, som ansÄgs oacceptabel för de grundlÀggande komponenterna av FreeBSD. Aktuella versioner av GCC, inklusive GCC 9, kan fortfarande installeras frÄn paket och portar.
- I infrastrukturen för Linux-emulering (Linuxulator) har stöd för systemanropet sendfile, TCP_CORK-lÀget (krÀvs för nginx) och flaggan MAP_32BIT lagts till (löser problemet med körning av paket med Mono frÄn Ubuntu Bionic). Problem med DNS-upplösning vid anvÀndning av glibc version 2.30 eller senare (t.ex. frÄn CentOS 8) har ÄtgÀrdats.
I infrastrukturen för kontinuerlig integration har körningen av uppgifter för LTP (Linux Testing Project) under Linuxulator sÀkerstÀllts för att testa förbÀttringar som görs i koden för stöd för Linux. Cirka 400 tester avslutas med fel och krÀver korrigering (vissa problem orsakades av falska positiv, medan andra krÀver triviala korrigeringar, men det finns Àven sÄdana som krÀver stöd för nya systemanrop). Arbetet med att stÀda upp koden i Linuxulator och förenkla felsökningen har genomförts. Patcher med stöd för utökade attribut och systemanropet fexecve har förberetts men har Ànnu inte granskats. - Arbetet med arbetsgruppen som skapats för att genomföra migreringen av kÀlltexter frÄn det centraliserade versionshanteringssystemet Subversion till det decentraliserade systemet Git fortsÀtter. Rapporten med förslag för migrering Àr under framtagning.
- I (runtime linker) har förbÀttrats för att möjliggöra direkt körlÀge ("/libexec/ld-elf.so.1 {vÀg} {argument}").
- Projektet för fuzzing-testning av FreeBSD-kĂ€rnan fortsĂ€tter att utvecklas med hjĂ€lp av syzkaller-systemet. Under rapportperioden Ă„tgĂ€rdades problem i nĂ€tverksstacken och koden för arbete med filbeskrivartabeller, identifierade med syzkaller. Ăndringar har lagts till i SCTP-stacken för att förenkla felsökning baserat pĂ„ feldiagnostiken. I stress2-samlingen har regler lagts till för att upptĂ€cka möjliga regressioner. Stöd för fuzzing-testning av nya systemanrop, inklusive copy_file_range(), __realpathat() och anrop frĂ„n Capsicum-underprogrammet, har lagts till. Arbetet med att tĂ€cka Linux-emuleringslagret med fuzzing-testning fortsĂ€tter. En analys och Ă„tgĂ€rd av fel markerade i fĂ€rska rapporter frĂ„n Coverity Scan har genomförts.
- I systemet för kontinuerlig integration har övergÄngen genomförts till att köra alla tester i head-grenen endast med clang/lld. Vid testning för RISC-V har ett komplett diskimage skapats för att köra tester i QEMU med OpenSBI. Nya uppgifter för testning av bilder och virtuella maskiner för powerpc64 (FreeBSD-head-powerpc64-images, FreeBSD-head-powerpc64-testvm) har lagts till.
- Arbetet med att flytta Kyua-testuppsÀttningen frÄn portarna (devel/kyua) till basystemet pÄgÄr för att lösa problemen (paket installeras mycket lÄngsamt) som uppstÄr vid anvÀndning av Kyua pÄ nya arkitekturer, vars utveckling sker med hjÀlp av emulator eller FPGA. Integreringen i basystemet kommer avsevÀrt att förenkla testning av inbyggda plattformar och koppla samman med system för kontinuerlig integration.
- Projektet för optimering av prestandan för nĂ€tverksbryggans drivrutin har startat. , som anvĂ€nder en mutex för att lĂ„sa interna data, vilket hindrar uppnĂ„endet av önskad prestanda pĂ„ system med ett stort antal jail-miljöer eller virtuella maskiner som Ă€r kopplade till ett nĂ€tverk. I det hĂ€r skedet har tester lagts till i koden för att förhindra uppkomsten av regressioner under moderniseringen av arbetet med lĂ„sningar. Möjligheten att anvĂ€nda ConcurrencyKit för att parallellisera databehandlingshanterarna (bridge_input(), bridge_output(), bridge_forward(), âŠ) övervĂ€gs.
- Ett nytt systemanrop sigfastblock har lagts till, vilket gör det möjligt för trÄden att definiera en minnesblock för en snabb handlare för signaler för att förbÀttra prestandan för undantagshanterare.
- KÀrnan har fÄtt stöd för atomÀra instruktioner LSE (Large System Extension), som stöds av ARMv8.1-system. Dessa instruktioner Àr nödvÀndiga för att förbÀttra prestandan pÄ Cavium ThunderX2- och AWS Graviton 2-kort. De tillagda Àndringarna bestÀmmer tillgÄngen till LSE-stödet och aktiverar dynamiskt implementationen av atomic baserat pÄ dem. Vid testning har anvÀndningen av LSE lett till en 15 % minskning av processortiden som krÀvs för att kompilera kÀrnan.
- Prestanda har optimerats och funktionaliteten för verktyg för körbara filer i ELF-format har utökats.
Stöd för cachning av felsökningsinformation DWARF har lagts till, problem i elfcopy/objcopy-verktygen har lösts, och hantering av DW_AT_ranges har lagts till.
I readelf har möjligheten att avkoda flaggor PROTMAX_DISABLE, STKGAP_DISABLE och WXNEEDED implementerats, liksom Xen och GNU Build-ID.
- SĂ€kerhet
- För att förbÀttra FreeBSD:s funktion i molnmiljöer pÄ Azure pÄgÄr arbete med att sÀkerstÀlla stöd för mekanismen HyperV Socket, vilket möjliggör anvÀndning av socketgrÀnssnittet för interaktion mellan gÀstsystemet och vÀrdmiljön utan nÀtverkskonfiguration.
- Arbetet med att sÀkerstÀlla reproducerbara byggnationer av FreeBSD pÄgÄr, vilket gör att man kan verifiera att de körbara filerna för systemkomponenterna Àr byggda exakt frÄn de angivna kÀllkoderna och inte innehÄller externa Àndringar.
- I verktyget elfctl har möjligheten att hantera aktivering av ytterligare skyddsmekanismer (ASLR, PROT_MAX, stack gap, W+X mapping) pÄ nivÄ av enskilda processer lagts till.
- Lagringssystem och filsystem
- PÄgÄende arbete syftar till att implementera möjligheten att anvÀnda NFS över en krypterad kommunikationskanal baserad pÄ TLS 1.3, istÀllet för att anvÀnda Kerberos (lÀge sec=krb5p), vilket begrÀnsas till kryptering av endast RPC-meddelanden och görs helt programvarubaserat. Den nya implementeringen anvÀnder kÀrnans tillhandahÄllna TLS-stack, vilket möjliggör anvÀndning av hÄrdvaruaccelerationsmedel. Koden för NFS över TLS Àr nÀstan redo för testning, men krÀver fortfarande arbete med att stödja signerade klientcertifikat och anpassning av kÀrnans TLS-stack för att skicka NFS-data (patcharna för att ta emot Àr redan klara).
- Stöd för hÄrdvara
- Arbete pÄgÄr för att lÀgga till stöd för kinesiska x86 CPU Hygon baserat pÄ AMD-technologier.
- Inom ramen för CheriBSD, en avledning frÄn FreeBSD för forskningsarkitekturen för processorer. (Capability Hardware Enhanced RISC Instructions), fortsÀtter implementeringen av ARM Morello-processorns stöd, som kommer att stödja minnesÄtkomstkontrollsystemet CHERI, baserat pÄ Capsicum-projektets skyddmodell. Morello-chipet slÀpps 2021. För nÀrvarande fokuserar arbetet pÄ att lÀgga till stöd för Arm Neoverse N1-plattformen, som ligger till grund för Morello. En första port av CheriBSD för RISC-V-arkitekturen har presenterats. Utvecklingen av CheriBSD för CHERI-referensprototypen baserad pÄ MIPS64-arkitekturen fortsÀtter.
- Porteringen av FreeBSD för 64-bitars SoC NXP LS1046A baserad pÄ ARMv8 Cortex-A72-processorn har fortsatt, med en integrerad motor för nÀtverkspaketbehandling, 10 Gb Ethernet, PCIe 3.0, SATA 3.0 och USB 3.0. För nÀrvarande förbereds drivrutiner för QorIQ och LS1046A, GPIO, QorIQ LS10xx AHCI, VF610 I2C, Epson RX-8803 RTC, QorIQ LS10xx SDHCI för att ingÄ i huvudsakliga FreeBSD-distribution.
- Till version 2.1.1 har ena drivrutinen uppdaterats med stöd för andra generationens ENAv2 (Elastic Network Adapter) nÀtverkskort, som anvÀnds i Elastic Compute Cloud (EC2) infrastrukturen för att koppla samman EC2-noder med hastigheter upp till 25 Gb/s. En uppdatering till ENA 2.2.0 förbereds.
- FörbÀttringarna av FreeBSD-porten för powerpc64-plattformen fortsÀtter. Fokuset ligger pÄ att sÀkerstÀlla hög kvalitet pÄ system med IBM POWER8 och POWER9-processorer. Under rapporteringsperioden har FreeBSD-CURRENT övergÄtt till att anvÀnda LLVM/Clang 10.0-compiler och lld-lÀnk istÀllet för GCC. Som standard anvÀnds ELFv2 ABI för powerpc64-system, medan stödet för ELFv1 ABI har avbrutits. GCC 4.2.1 finns kvar i FreeBSD-STABLE. Problem med virtio-, aacraid- och ixl-drivrutinerna har lösits. PÄ powerpc64-system kan QEMU nu köras utan stöd för Huge Pages.
- Arbetet för att implementera stöd för RISC-V-arkitekturen har fortsatt. I sitt nuvarande skick startar FreeBSD redan framgÄngsrikt pÄ SiFive Hifive Unleashed-kortet, för vilket drivrutiner för
UART, SPI och PRCI har förberetts, och firmware OpenSBI och SBI 0.2 stöds. Under rapporteringsperioden har arbetet fokuserats pÄ migrationen frÄn GCC till clang och lld.
- Applikationer och portsystem
- Samlingen av FreeBSD-portar har överstigit 39 000 portar, antalet öppna PR ligger nĂ„got över 2400, varav 640 PR Ă€nnu inte har granskats. Under rapporteringsperioden har 8146 Ă€ndringar gjort av 173 utvecklare. Fyra nya deltagare (LoĂŻc Bartoletti, Mikael Urankar, Kyle Evans, Lorenzo Salvadore) har fĂ„tt commit-rĂ€ttigheter. Flaggan USES=qca har lagts till och flaggan USES=zope har tagits bort (pĂ„ grund av inkompatibilitet med Python 3). Arbetet med att ta bort Python 2.7 frĂ„n porttrĂ€det pĂ„gĂ„r â alla portar som Ă€r beroende av Python 2 mĂ„ste porteras till Python 3 eller kommer att tas bort. Paketmanagern pkg har uppdaterats till version 1.13.2.
- Komponenterna i grafiska mjukvarustacken och portar relaterade till xorg har uppdaterats.
X.org-servern har uppdaterats till version 1.20.8 (den tidigare versionen var 1.18), vilket har gjort att FreeBSD som standard övergÄr till att anvÀnda udev/evdev-backenden för hantering av inmatningsenheter. Paketet Mesa har som standard övergÄtt till att anvÀnda DRI3 istÀllet för DRI2. Arbetet med att hÄlla grafiska drivrutiner, inmatningsenhetsstacken och drm-kmod-komponenterna aktuella pÄgÄr (porten som möjliggör drift av DRM-moduler amdgpu, i915 och radeon, med hjÀlp av linuxkpi-ramverket för kompatibilitet med Direct Rendering Manager i Linux-kÀrnan). - Skrivbordsmiljön KDE Plasma, KDE Frameworks, KDE Applications och Qt hÄlls aktuella och har uppdaterats till de senaste versionerna. Det nya programmet kstars (stjÀrnatlas) har lagts till i portarna.
- Arbetet med att ÄtgÀrda regressionsfel i fönsterhanteraren xfwm4, som uppstod efter uppdateringen av Xfce till version 4.14 (till exempel uppstod artefakter vid dekoration av fönster), har genomförts.
- Porten för Wine har uppdaterats till Wine 5.0 (den tidigare versionen var 4.0.3).
- FrÄn och med version 1.14 har kompilatorn för Go-sprÄket fÄtt officiellt stöd för ARM64-arkitektur för FreeBSD 12.0.
- OpenSSH i det grundlÀggande systemet har uppdaterats till version 7.9p1.
- Biblioteket sysctlmibinfo2 (devel/libsysctlmibinfo2) har utvecklats och lagts till i portarna, vilket ger ett API för Ätkomst till sysctl MIB och omvandling av sysctl-namn till objektidentifikatorer (OID).
- Distributionen har uppdaterats , som Ă€r en version av FreeBSD anpassad för att anvĂ€ndas som en portabel skrivbordsmiljö som kan startas frĂ„n ett USB-minne. Det grafiska grĂ€nssnittet baseras pĂ„ ett fönsterhanterare . För montering av lagringsenheter anvĂ€nds (stödjer montering av CD9660, FAT, HFS+, NTFS, Ext2/3/4), för att konfigurera det trĂ„dlösa nĂ€tverket â , och för volymkontroll â .
- Arbetet har pÄbörjats för att skriva fullstÀndig dokumentation för jail-miljöhanteraren . Pot 0.11.0 förbereds för lansering, dÀr nÀtverksstackhanteringsverktyg kommer att finnas.
KĂ€lla: opennet.ru
