Raportul despre dezvoltarea FreeBSD pentru primul trimestru al anului 2020

Publicat raportul despre dezvoltarea proiectului FreeBSD din ianuarie până în martie 2020. Printre modificări se numără:

  • Întrebări generale și sistemice
    • Din arborele codului sursă FreeBSD-CURRENT a fost eliminat setul de compilatoare GCC, precum și utilitarele neutilizate gperf, gcov și gtc (compilatorul devicetree). Toate platformele care nu suportă Clang au fost migrate la utilizarea unui instrumentar extern de construire, instalat din porturi. În sistemul de bază a fost livrată o versiune învechită a GCC 4.2.1, iar integrarea versiunilor mai recente a fost imposibilă din cauza trecerii la GPLv3 a versiunii 4.2.2, care a fost considerată inacceptabilă pentru componentele de bază ale FreeBSD. Versiuni actuale ale GCC, inclusiv GCC 9, pot fi instalate din pachete și porturi, la fel ca înainte.
    • În infrastructura de emulare a mediului Linux (Linuxulator) a fost adăugată suportul pentru apelul de sistem sendfile, modul TCP_CORK (necesar pentru nginx), flag-ul MAP_32BIT (rezolvă problema cu rularea pachetelor Mono din Ubuntu Bionic). Problemele cu rezolvarea DNS atunci când se folosește glibc mai recent de 2.30 (de exemplu din CentOS 8) au fost rezolvate.
      În infrastructura de integrare continuă s-a asigurat lansarea sarcinilor pentru rularea LTP (Linux Testing Project) sub Linuxulator pentru testarea îmbunătățirilor aduse codului pentru suportul Linux. Aproximativ 400 de teste se finalizează cu eroare și necesită corectare (unele erori sunt cauzate de false alarme, unele necesită corecturi triviale, dar există și acelea care necesită adăugarea suportului pentru noi apeluri de sistem). S-au efectuat lucrări de curățare a codului Linuxulator și simplificare a depanării. Patch-uri cu suport pentru atribute extinse și apelul de sistem fexecve au fost pregătite, dar încă nu au fost revizuite.
    • Continuă întâlnirile grupului de lucru creat pentru migrarea codului sursă din sistemul de gestiune a codului sursă centralizat Subversion într-un sistem descentralizat Git. Raportul cu propunerile pentru migrare este în curs de pregătire.
    • În rtld (linker la runtime) a fost îmbunătățit modul de execuție directă ("/libexec/ld-elf.so.1 {cale} {argumente}").
    • Proiectul de fuzzing al nucleului FreeBSD continuă să se dezvolte folosind sistemul syzkaller. În perioada raportată, au fost rezolvate probleme în stiva de rețea și în codul pentru gestionarea tabelelor descriptorilor de fișiere, identificate cu ajutorul syzkaller. Ca urmare a diagnosticării erorilor în stiva SCTP, au fost aduse modificări care simplifică depanarea. Regulile pentru identificarea regresiilor au fost adăugate în setul stress2. A fost adăugată suportul pentru fuzzing-ul noilor apeluri de sistem, inclusiv copy_file_range(), __realpathat() și apelurile subsistemului Capsicum. Se continuă lucrările pentru acoperirea fuzzing-ului stratului de emulare Linux. Au fost analizate și remediate erorile semnalate în cele mai recente rapoarte Coverity Scan.
    • În sistemul de integrare continuă a fost realizată trecerea la executarea tuturor testelor din ramura head doar cu utilizarea clang/lld. În timpul testării pentru RISC-V, a fost asigurată generarea unei imagini complete a discului pentru rularea testelor în QEMU utilizând OpenSBI. Au fost adăugate noi sarcini pentru testarea imaginilor și mașinilor virtuale powerpc64 (FreeBSD-head-powerpc64-images, FreeBSD-head-powerpc64-testvm).
    • Se lucrează la migrarea setului de teste Kyua din porturi (devel/kyua) în sistemul de bază pentru a rezolva problemele (pachetele sunt instalate foarte lent) care apar atunci când se utilizează Kyua pe arhitecturi noi, pentru care dezvoltarea se realizează folosind un emulator sau FPGA. Integrarea în sistemul de bază va simplifica considerabil testarea platformelor încorporate și integrarea cu sistemele de integrare continuă.
    • A început proiectul de optimizare a performanței driverului pentru punți de rețea if_bridge, care folosește un mutex pentru blocarea datelor interne, ceea ce nu permite obținerea performanței dorite pe sistemele cu un număr mare de medii jail sau mașini virtuale unite într-o singură rețea. În această etapă, în cod au fost adăugate teste pentru a preveni apariția regresiilor în procesul de modernizare a gestionării blocărilor. Se ia în considerare posibilitatea utilizării ConcurrencyKit pentru paralelizarea handler-elor de transfer de date (bridge_input(), bridge_output(), bridge_forward(), …).
    • A fost adăugat un nou apel de sistem sigfastblock, care permite unui fir să determine un bloc de memorie pentru un handler rapid de semnale, cu scopul de a îmbunătăți performanța handler-elor de excepții.
    • În kernel a fost adăugată suport pentru instrucțiuni atomice LSE (Large System Extension), susținute de sistemele ARMv8.1. Aceste instrucțiuni sunt necesare pentru a îmbunătăți performanța pe plăcile Cavium ThunderX2 și AWS Graviton 2. Modificările adăugate definesc prezența suportului LSE și activează dinamic implementarea atomică pe baza acestora. În timpul testării, utilizarea LSE a permis o reducere de 15% a timpului procesorului necesar pentru compilarea kernel-ului.
    • A fost realizată o optimizare a performanței și extinsă funcționalitatea uneltelor pentru fișierele executabile în format ELF.
      A fost adăugat suport pentru cache-ul informațiilor de depanare DWARF, au fost rezolvate probleme în utilitarele elfcopy/objcopy și a fost adăugată procesarea DW_AT_ranges.
      În readelf a fost implementată capacitatea de a decodifica flagurile PROTMAX_DISABLE, STKGAP_DISABLE și WXNEEDED, precum și Xen și GNU Build-ID.
  • Securitate
    • Pentru a îmbunătăți funcționarea FreeBSD în medii cloud Azure, se lucrează la asigurarea suportului pentru mecanismul HyperV Socket, care permite utilizarea interfeței de socketuri pentru interacțiunea dintre sistemul gazdă și mediul gazdă fără configurarea rețelei.
    • Se lucrează la asigurarea unor compilări repetabile pentru FreeBSD, care permit verificarea faptului că fișierele executabile ale componentelor sistemului sunt compilate exact din sursele declarate și nu conțin modificări neautorizate.
    • Utilitarul elfctl a fost îmbunătățit cu funcționalitatea de a gestiona activarea mecanismelor suplimentare de protecție (ASLR, PROT_MAX, gap de stivă, mapare W+X) la nivelul proceselor individuale.
  • Sisteme de stocare și sisteme de fișiere
    • Se lucrează la implementarea funcționalității NFS peste un canal de comunicație criptat bazat pe TLS 1.3, în locul utilizării Kerberos (mod sec=krb5p), care este limitat la criptarea doar a mesajelor RPC și este implementat doar software. Noua implementare utilizează stiva TLS furnizată de kernel, permițând utilizarea accelerării hardware. Codul NFS peste TLS este aproape gata pentru testare, dar mai necesită lucrări pentru a suporta certificatele client semnate și adaptarea stivei TLS a kernel-ului pentru transmiterea datelor NFS (patch-uri pentru recepție sunt deja pregătite).
  • Suport hardware
    • Se lucrează la adăugarea suportului pentru CPU-uri x86 chineze Hygon bazate pe tehnologiile AMD.
    • În cadrul CheriBSD, o ramificație a FreeBSD pentru arhitectura de procesor de cercetare. CHERI (Capabilități Hardware Enhanced RISC Instructions), continuă implementarea suportului pentru procesorul ARM Morello, care va susține sistemul de gestionare a accesului la memorie CHERI, bazat pe modelul de protecție al proiectului Capsicum. Chipul Morello intenționează va fi lansat în 2021. În prezent, munca se concentrează pe adăugarea suportului pentru platforma Arm Neoverse N1, pe care se bazează Morello. A fost prezentat un port inițial CheriBSD pentru arhitectura RISC-V. Continuă dezvoltarea CheriBSD pentru prototipul de referință CHERI bazat pe arhitectura MIPS64.
    • A continuat portarea FreeBSD pentru SoC NXP LS1046A pe baza procesorului ARMv8 Cortex-A72, cu un motor integrat pentru accelerarea procesării pachetelor de rețea, Ethernet de 10 Gb, PCIe 3.0, SATA 3.0 și USB 3.0. În prezent, driverele QorIQ și LS1046A, GPIO, QorIQ LS10xx AHCI, VF610 I2C, Epson RX-8803 RTC, QorIQ LS10xx SDHCI sunt pregătite pentru a fi incluse în versiunea principală a FreeBSD.
    • Până la versiunea 2.1.1, driverul ena a fost actualizat cu suport pentru a doua generație de adaptoare de rețea ENAv2 (Elastic Network Adapter), utilizate în infrastructura Elastic Compute Cloud (EC2) pentru a organiza comunicarea între nodurile EC2 la viteze de până la 25 Gb/s. Se pregătește actualizarea la ENA 2.2.0.
    • Continuă îmbunătățirile portării FreeBSD pentru platforma powerpc64. Accentul principal se pune pe asigurarea unei funcționări de calitate pe sistemele cu procesoare IBM POWER8 și POWER9. În perioada raportată, a fost realizat transferul FreeBSD-CURRENT pentru a folosi compilatorul LLVM/Clang 10.0 și linker-ul lld în loc de GCC. Din oficiu, pentru sistemele powerpc64 este activată ABI ELFv2, iar suportul pentru ABI ELFv1 este încetat. În FreeBSD-STABLE rămâne încă gcc 4.2.1. Problemele cu driverele virtio, aacraid și ixl au fost rezolvate. Pe sistemele powerpc64, este posibil să rulați QEMU fără suport pentru Huge Pages.
    • A continuat munca pentru implementarea suportului pentru arhitectura RISC-V. În forma sa actuală, FreeBSD se încarcă deja cu succes pe placa SiFive Hifive Unleashed, pentru care au fost pregătite drivere
      UART, SPI și PRCI, suportă firmware-ul OpenSBI și SBI 0.2. În perioada raportată, munca a fost concentrată pe migrarea de la GCC la clang și lld.
  • Aplicații și sistem de porturi
    • Colecția de porturi FreeBSD a depășit pragul de 39 de mii de porturi, iar numărul PR-urilor neînchise depășește puțin 2400, dintre care 640 de PR-uri nu au fost încă analizate. În perioada raportată au fost aduse 8146 de modificări de către 173 de dezvoltatori. Patru noi membri (Loïc Bartoletti, Mikael Urankar, Kyle Evans, Lorenzo Salvadore) au primit drepturi de commit. A fost adăugat flagul USES=qca și a fost eliminat flagul USES=zope (din cauza incompatibilității cu Python 3). Se lucrează la eliminarea Python 2.7 din arborele de porturi - toate porturile legate de Python 2 trebuie să fie portate pe Python 3 sau vor fi eliminate. Managerul de pachete pkg a fost actualizat la versiunea 1.13.2.
    • Au fost actualizate componentele stivei grafice și porturile asociate cu xorg.
      Serverul X.org a fost actualizat la versiunea 1.20.8 (anterior era disponibilă ramura 1.18), ceea ce a permis trecerea FreeBSD la utilizarea prin default a backend-ului udev/evdev pentru gestionarea dispozitivelor de intrare. Pachetul Mesa a fost setat prin default să utilizeze extensia DRI3 în loc de DRI2. Se lucrează la menținerea actualizării driver-elor grafice, a stivei de dispozitive de intrare și a componentelor drm-kmod (port care asigură funcționarea modulelor DRM amdgpu, i915 și radeon, folosind cadrul linuxkpi pentru compatibilitate cu Direct Rendering Manager-ul nucleului Linux).
    • Desktop-ul KDE Plasma, KDE Frameworks, KDE Applications și Qt sunt menținute la zi și actualizate la cele mai recente versiuni. A fost adăugat un nou aplicație în porturi, kstars (atlasul stelar).
    • S-a lucrat pentru a elimina modificările regresive în managerul de feronerie xfwm4, apărute după actualizarea Xfce la versiunea 4.14 (de exemplu, au apărut artefacte la decorarea feroneriilor).
    • Portul cu Wine a fost actualizat la versiunea Wine 5.0 (anterior era disponibilă 4.0.3).
    • Începând cu versiunea 1.14, compilatorul limbajului Go a adăugat suport oficial pentru arhitectura ARM64 pentru FreeBSD 12.0.
    • OpenSSH din sistemul de bază a fost actualizat la versiunea 7.9p1.
    • A fost implementată și disponibilă în porturi (devel/libsysctlmibinfo2) biblioteca sysctlmibinfo2, oferind API pentru accesul la sysctl MIB și efectuând traducerea numelui sysctl în identificatori de obiecte (OID).
    • A fost format un update al distribuției NomadBSD 1.3.1, care reprezintă o variantă a FreeBSD, adaptată pentru a fi utilizată ca un birou portabil, încărcat de pe un USB. Mediul grafic se bazează pe un manager de feronerie Openbox. Pentru montarea unităților se utilizează DSBMD (se suportă montarea CD9660, FAT, HFS+, NTFS, Ext2/3/4), pentru configurarea rețelei wireless — wifimgr, iar pentru gestionarea volumului — DSBMixer.
    • lucrul la încetarea suportului pentru codec-ul Theora. În etapa inițială, dezvoltatorii vor evalua cererea acestuia pe baza datelor de telemetrie, conform datelor preliminare, doar 0,09% din conținutul media din Firefox este redat cu ajutorul Theora, iar resursele mari (de exemplu, Wikipedia), care au folosit acest codec, au trecut de mult timp la codecuri mai eficiente. la pentru redactarea unei documentații complete pentru managerul de medii jail pot. Se pregătește lansarea pot 0.11.0, în care vor apărea instrumente pentru gestionarea stivei de rețea.

Sursa: opennet.ro

Cumpără un hosting fiabil pentru site-uri cu protecție DDoS, servere VPS VDS 🔥 Cumpără un hosting fiabil pentru site-uri cu protecție DDoS, servere VPS VDS | ProHoster