Relazione sullo sviluppo di FreeBSD per il primo trimestre del 2020

Pubblicato rapporto sullo sviluppo del progetto FreeBSD da gennaio a marzo 2020. Tra le novità si possono segnalare:

  • Domande generali e di sistema
    • Dall'albero delle sorgenti FreeBSD-CURRENT è stata rimossa la suite di compilatori GCC, così come gli strumenti non utilizzati gperf, gcov e gtc (compilatore devicetree). Tutte le piattaforme che non supportano Clang sono state migrate all'uso di strumenti di build esterni, installabili dai port. Nella base del sistema era fornita una versione obsoleta di GCC 4.2.1, mentre l'integrazione di versioni più recenti era impossibile a causa del passaggio a GPLv3 con la versione 4.2.2, che è stata ritenuta inaccettabile per i componenti di base di FreeBSD. Le versioni attuali di GCC, incluse GCC 9, possono essere ancora installate tramite pacchetti e port.
    • Nell'infrastruttura di emulazione dell'ambiente Linux (Linuxulator) è stata aggiunta la supporto alla syscall sendfile, alla modalità TCP_CORK (necessaria per nginx), e al flag MAP_32BIT (risolve il problema con l'esecuzione di pacchetti Mono da Ubuntu Bionic). Sono stati risolti problemi con la risoluzione DNS utilizzando glibc versione superiore a 2.30 (ad esempio da CentOS 8).
      Nell'infrastruttura di integrazione continua è garantito l'avvio delle operazioni per l'esecuzione del LTP (Linux Testing Project) sotto Linuxulator per testare le migliorie apportate al codice a supporto di Linux. Circa 400 test terminano con errori e richiedono correzioni (alcuni errori sono dovuti a falsi positivi, alcuni necessitano di piccole correzioni, ma ce ne sono anche alcuni per i quali è necessario aggiungere supporto per nuove syscall). È stato effettuato un lavoro di pulizia del codice di Linuxulator e semplificazione del processo di debug. Sono stati preparati, ma non ancora revisionati, patch con supporto per attributi estesi e la syscall fexecve.
    • Continuano le riunioni del gruppo di lavoro creato per migrare i sorgenti dalla sistema centralizzato di gestione delle versioni Subversion a un sistema decentralizzato Git. È in fase di preparazione un rapporto con proposte per la migrazione.
    • In rtld (runtime linker) migliorato il modo di esecuzione diretta ("/libexec/ld-elf.so.1 {percorso} {argomenti}").
    • Il progetto di fuzzing del kernel FreeBSD continua a progredire utilizzando il sistema syzkaller. Nel periodo di riferimento, sono stati risolti problemi nel stack di rete e nel codice per gestire le tabelle dei descrittori di file, identificati tramite syzkaller. A seguito della diagnosi degli errori, sono state apportate modifiche allo stack SCTP che semplificano il debug. Sono state aggiunte regole nel set di stress2 per identificare possibili regressioni. È stato aggiunto il supporto per il fuzzing di nuove chiamate di sistema, inclusi copy_file_range(), __realpathat() e le chiamate del sottosistema Capsicum. Si continua a lavorare per estendere il fuzzing al layer di emulazione Linux. È stata effettuata l'analisi e la correzione degli errori evidenziati nei recenti rapporti di Coverity Scan.
    • Nel sistema di integrazione continua è stato effettuato il passaggio all'esecuzione di tutti i test del ramo head utilizzando esclusivamente clang/lld. Durante il testing per RISC-V, è stato garantito il completamento dell'immagine disco per l'esecuzione dei test in QEMU con OpenSBI. Sono stati aggiunti nuovi incarichi per testare le immagini e le macchine virtuali powerpc64 (FreeBSD-head-powerpc64-images, FreeBSD-head-powerpc64-testvm).
    • È in corso il trasferimento del set di test Kyua dai porti (devel/kyua) al sistema di base per risolvere i problemi (i pacchetti vengono installati molto lentamente) che si verificano quando si utilizza Kyua su nuove architetture, per le quali lo sviluppo avviene tramite emulatori o FPGA. L'integrazione nel sistema di base semplificherà notevolmente il testing delle piattaforme embedded e l'integrazione con i sistemi di continuous integration.
    • È stato avviato un progetto per ottimizzare le prestazioni del driver dei bridge di rete if_bridge, che utilizza un mutex per bloccare i dati interni, impedendo così di raggiungere le prestazioni desiderate su sistemi con un numero elevato di ambienti jail o macchine virtuali unite in una rete. In questa fase, sono stati aggiunti test al codice per prevenire la comparsa di regressioni durante l'aggiornamento del sistema di locking. Si sta valutando la possibilità di utilizzare ConcurrencyKit per parallelizzare i gestori di trasferimento dati (bridge_input(), bridge_output(), bridge_forward(), …).
    • È stata aggiunta una nuova chiamata di sistema sigfastblock, che consente a un thread di determinare un blocco di memoria per una gestione rapida dei segnali, al fine di migliorare le prestazioni dei gestori di eccezioni.
    • Il kernel ha aggiunto il supporto per le istruzioni atomiche LSE (Large System Extension), supportate dai sistemi ARMv8.1. Queste istruzioni sono necessarie per migliorare le prestazioni su schede Cavium ThunderX2 e AWS Graviton 2. Le modifiche apportate determinano la presenza del supporto LSE e attivano dinamicamente l'implementazione atomica basata su di esse. Nei test, l'utilizzo di LSE ha ridotto il tempo di CPU necessario per la compilazione del kernel del 15%.
    • È stata ottimizzata la performance e ampliata la funzionalità degli strumenti per file eseguibili in formato ELF.
      È stato aggiunto il supporto per la memorizzazione nella cache delle informazioni di debug DWARF, risolti problemi negli strumenti elfcopy/objcopy, aggiunta la gestione di DW_AT_ranges.
      In readelf è stata implementata la possibilità di decodificare i flag PROTMAX_DISABLE, STKGAP_DISABLE e WXNEEDED, nonché Xen e GNU Build-ID.
  • Sicurezza
    • Per migliorare il funzionamento di FreeBSD negli ambienti cloud di Azure, si sta lavorando per garantire il supporto del meccanismo HyperV Socket, che consente di utilizzare l'interfaccia dei socket per interagire con l'ambiente ospitante senza configurare la rete.
    • Si sta lavorando per garantire build ripetibili di FreeBSD, per assicurare che i file eseguibili dei componenti del sistema siano costruiti esattamente dai sorgenti dichiarati e non contengano modifiche non autorizzate.
    • Nell'utilità elfctl è stata aggiunta la possibilità di gestire l'attivazione di meccanismi di protezione aggiuntivi (ASLR, PROT_MAX, stack gap, W+X mapping) a livello di singoli processi.
  • Sistemi di archiviazione e file system
    • Sono in corso lavori per implementare la possibilità di utilizzare NFS su un canale di comunicazione crittografato basato su TLS 1.3, anziché utilizzare Kerberos (modalità sec=krb5p), che si limita a crittografare solo i messaggi RPC e viene implementata solo a livello software. La nuova implementazione utilizza lo stack TLS fornito dal kernel, che consente di sfruttare le risorse di accelerazione hardware. Il codice NFS su TLS è quasi pronto per essere testato, ma richiede ancora lavori per supportare i certificati client firmati e l'adattamento dello stack TLS del kernel per inviare i dati NFS (i patch per la ricezione sono già pronti).
  • Supporto hardware
    • Sono in corso lavori per aggiungere il supporto per le CPU x86 Hygon cinesi basate su tecnologie AMD;
    • Nell'ambito di CheriBSD, un ramo di FreeBSD per un'architettura di processo di ricerca CHERI (Capability Hardware Enhanced RISC Instructions), continua l'implementazione del supporto per il processore ARM Morello, che supporterà un sistema di gestione degli accessi alla memoria CHERI, basato sul modello di protezione del progetto Capsicum. Il chip Morello intendono lanciare nel 2021. Attualmente, il lavoro si concentra sull'aggiunta del supporto per la piattaforma Arm Neoverse N1, che è alla base di Morello. È stato presentato il port iniziale di CheriBSD per l'architettura RISC-V. Prosegue lo sviluppo di CheriBSD per il prototipo di riferimento CHERI basato sull'architettura MIPS64.
    • È continuato il porting di FreeBSD per SoC a 64 bit NXP LS1046A basato su processore ARMv8 Cortex-A72 con motore integrato per l'accelerazione del processamento dei pacchetti di rete, 10 Gb Ethernet, PCIe 3.0, SATA 3.0 e USB 3.0. Attualmente, i driver QorIQ e LS1046A, GPIO, QorIQ LS10xx AHCI, VF610 I2C, Epson RX-8803 RTC, QorIQ LS10xx SDHCI sono in fase di preparazione per il passaggio nel ramo principale di FreeBSD.
    • Fino alla versione 2.1.1, è stato aggiornato il driver ena con supporto per la seconda generazione di adattatori di rete ENAv2 (Elastic Network Adapter), utilizzati nell'infrastruttura Elastic Compute Cloud (EC2) per la comunicazione tra nodi EC2 a velocità fino a 25 Gb/s. Un aggiornamento a ENA 2.2.0 è in preparazione.
    • Continua il miglioramento del porting di FreeBSD per la piattaforma powerpc64. L'attenzione principale è rivolta a garantire un funzionamento di qualità sui sistemi con processori IBM POWER8 e POWER9. Nel periodo di riferimento, è stata effettuata la migrazione di FreeBSD-CURRENT all'uso del compilatore LLVM/Clang 10.0 e del linker lld invece di GCC. Per impostazione predefinita, per i sistemi powerpc64 è utilizzato l'ABI ELFv2, mentre il supporto per l'ABI ELFv1 è stato interrotto. In FreeBSD-STABLE rimane per ora gcc 4.2.1. Sono stati risolti problemi con i driver virtio, aacraid e ixl. Nei sistemi powerpc64 è stata garantita la possibilità di avviare QEMU senza il supporto di Huge Pages.
    • È proseguito il lavoro per implementare il supporto all'architettura RISC-V. Nella sua attuale incarnazione, FreeBSD si avvia già con successo sulla scheda SiFive Hifive Unleashed, per la quale sono stati preparati i driver UART, SPI e PRCI, e supporta il firmware OpenSBI e SBI 0.2. Durante il periodo di riferimento, il lavoro si è concentrato sulla migrazione da GCC a clang e lld.
      È stato completato il supporto per UART, SPI e PRCI, con supporto per il firmware OpenSBI e SBI 0.2. Nel periodo di riferimento, il lavoro si è concentrato sulla migrazione da GCC a clang e lld.
  • Applicazioni e sistema di porte
    • La collezione di port di FreeBSD ha superato la soglia di 39.000 port, con il numero di PR aperti che supera leggermente i 2.400, di cui 640 PR non sono ancora stati trattati. Nel periodo di riferimento sono state apportate 8.146 modifiche da 173 sviluppatori. Quattro nuovi partecipanti (Loïc Bartoletti, Mikael Urankar, Kyle Evans, Lorenzo Salvadore) hanno ottenuto i diritti di commit. È stato aggiunto il flag USES=qca e rimosso il flag USES=zope (a causa dell'incompatibilità con Python 3). Sono in corso lavori per rimuovere Python 2.7 dall'albero dei port — tutti i port dipendenti da Python 2 devono essere portati su Python 3 o verranno rimossi. Il gestore pacchetti pkg è stato aggiornato alla versione 1.13.2.
    • Aggiornati i componenti dello stack grafico e i port relativi a xorg.
      Il server X.org è stato aggiornato alla versione 1.20.8 (in precedenza era fornita la versione 1.18), il che ha consentito a FreeBSD di passare per impostazione predefinita all'uso del backend udev/evdev per la gestione dei dispositivi di input. Il pacchetto Mesa è stato impostato per impostazione predefinita per utilizzare l'estensione DRI3 invece di DRI2. Sono in corso lavori per mantenere aggiornati i driver grafici, lo stack dei dispositivi di input e i componenti drm-kmod (port che fornisce il funzionamento dei moduli DRM amdgpu, i915 e radeon, utilizzando il framework linuxkpi per la compatibilità con il Direct Rendering Manager del kernel Linux).
    • Il desktop KDE Plasma, i KDE Frameworks, le applicazioni KDE e Qt sono aggiornati alle ultime versioni. È stata aggiunta una nuova applicazione kstars (atlante stellare) nei port.
    • È stato lavorato per risolvere i problemi regressivi nel gestore di finestre xfwm4, emersi dopo l'aggiornamento di Xfce alla versione 4.14 (ad esempio, sono comparsi artefatti nella decorazione delle finestre).
    • Il port di Wine è stato aggiornato alla versione Wine 5.0 (precedentemente era 4.0.3).
    • A partire dalla versione 1.14, il compilatore del linguaggio Go ha aggiunto il supporto ufficiale per l'architettura ARM64 per FreeBSD 12.0.
    • OpenSSH nel sistema di base è stato aggiornato alla versione 7.9p1.
    • È stata implementata e pubblicata nei port (devel/libsysctlmibinfo2) la libreria sysctlmibinfo2, che offre un'API per accedere al MIB sysctl e traduce i nomi sysctl in identificatori di oggetti (OID).
    • È stato formata un'aggiornamento del distribuito NomadBSD 1.3.1, una versione di FreeBSD adattata per l'uso come desktop portatile, avviabile da un'unità USB. L'ambiente grafico si basa sul gestore di finestre Openbox. Per il montaggio delle unità si utilizza DSBMD (supporta il montaggio di CD9660, FAT, HFS+, NTFS, Ext2/3/4), per configurare la rete wireless — wifimgr, e per gestire il volume — DSBMixer.
    • Iniziato funzionamento per la scrittura di una documentazione completa per il gestore degli ambienti jail pot. È in preparazione il rilascio di pot 0.11.0, che includerà strumenti per la gestione dello stack di rete.

Fonte: opennet.ru

Acquista hosting affidabile per siti web con protezione DDoS, server VPS VDS 🔥 Acquista hosting affidabile per siti web con protezione DDoS, server VPS VDS | ProHoster