relazione sullo sviluppo del progetto FreeBSD da gennaio a marzo 2020. Tra le modifiche si possono notare:
- Questioni generali e sistemiche
- Dal albero dei sorgenti di FreeBSD-CURRENT è stato rimosso il set di compilatori GCC, insieme ad alcune utility non utilizzate come gperf, gcov e gtc (compilatore devicetree). Tutte le piattaforme che non supportano Clang sono state trasferite all'uso di strumenti di build esterni installabili dai porti. Nel sistema di base era presente una versione obsoleta di GCC 4.2.1, e l'integrazione delle versioni più recenti non è stata possibile a causa del passaggio del 4.2.2 alla licenza GPLv3, ritenuta inaccettabile per i componenti di base di FreeBSD. Le versioni attuali di GCC, inclusi GCC 9, possono ancora essere installate come in passato da pacchetti e porti.
- Nell'infrastruttura di emulazione dell'ambiente Linux (Linuxulator) è stato aggiunto il supporto per la system call sendfile, la modalità TCP_CORK (necessaria per nginx), e il flag MAP_32BIT (risolve un problema con l'esecuzione dei pacchetti con Mono da Ubuntu Bionic). Risolti i problemi di risoluzione DNS quando si utilizza glibc più recente del 2.30 (ad esempio da CentOS 8).
Nell'infrastruttura di integrazione continua è stato assicurato il lancio di job per eseguire LTP (Linux Testing Project) sotto Linuxulator per testare le migliorie apportate al codice per il supporto di Linux. Circa 400 test terminano con un errore e richiedono correzioni (alcuni errori sono causati da falsi positivi, altri richiedono correzioni triviali, ma ce ne sono altre le quali necessitano di aggiungere supporto per nuove system call). È stato effettuato lavoro di pulizia del codice di Linuxulator e semplificazione del debugging. Sono stati preparati, ma non ancora revisionati, patch con supporto per attributi estesi e la system call fexecve. - Continuano le riunioni del gruppo di lavoro creato per condurre la migrazione dei sorgenti dal sistema di gestione centralizzato Subversion a un sistema decentralizzato Git. La relazione con le proposte per la migrazione è in fase di preparazione.
- In (runtime linker) migliorato il modo di esecuzione diretta ("/libexec/ld-elf.so.1 {path} {arguments}").
- Continua a svilupparsi il progetto di fuzzing testing del kernel FreeBSD utilizzando il sistema syzkaller. Durante il periodo di riferimento, sono stati risolti problemi nello stack di rete e nel codice per l'elaborazione delle tabelle dei descrittori di file, identificati con l'ausilio di syzkaller. A seguito della diagnostica degli errori nello stack SCTP, sono state apportate modifiche per semplificare il debugging. Nel set stress2 sono state aggiunte regole per rilevare possibili regressioni. È stato aggiunto il supporto per il fuzzing testing di nuove system call, tra cui copy_file_range(), __realpathat() e le chiamate del sottosistema Capsicum. Proseguono i lavori per estendere il fuzzing testing al layer di emulazione Linux. È stata effettuata un'analisi e risoluzione degli errori segnalati nei recenti report di Coverity Scan.
- Nel sistema di integrazione continua è stata effettuata la transizione per eseguire tutti i test del ramo head utilizzando solo clang/lld. Durante i test per RISC-V è stata garantita la creazione di un'immagine disco completa per eseguire i test in QEMU utilizzando OpenSBI. Sono stati aggiunti nuovi incarichi per il test delle immagini e delle macchine virtuali powerpc64 (FreeBSD-head-powerpc64-images, FreeBSD-head-powerpc64-testvm).
- È in corso il processo di trasferimento del set di test Kyua dai port (devel/kyua) al sistema di base per risolvere i problemi (i pacchetti vengono installati molto lentamente) che sorgono quando si utilizza Kyua su nuove architetture, lo sviluppo delle quali avviene tramite emulatore o FPGA. L'integrazione nel sistema di base semplificherà notevolmente il testing delle piattaforme embedded e l'integrazione con i sistemi di integrazione continua.
- Ha preso avvio un progetto per l'ottimizzazione delle prestazioni del driver dei ponti di rete , che utilizza un mutex per bloccare i dati interni, il che non consente di raggiungere le prestazioni desiderate su sistemi con un gran numero di ambienti jail o macchine virtuali collegate in una rete unica. In questa fase, sono stati aggiunti test al codice per prevenire la comparsa di regressioni durante l'aggiornamento del lavoro con i 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 un gestore di segnali veloce al fine di migliorare le prestazioni dei gestori di eccezioni.
- Nel kernel è stato aggiunto il supporto per le istruzioni atomiche LSE (Large System Extension), supportate dai sistemi ARMv8.1. Le istruzioni indicate sono necessarie per migliorare le prestazioni sui server Cavium ThunderX2 e AWS Graviton 2. Le modifiche apportate determinano la disponibilità del supporto per LSE e abilitano dinamicamente l'implementazione di atomic su quella base. Durante i test, l'uso di LSE ha consentito di ridurre il tempo di CPU utilizzato nella 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 i problemi nelle utility elfcopy/objcopy, aggiunta la gestione di DW_AT_ranges,
in readelf è stata implementata la decodifica dei flag PROTMAX_DISABLE, STKGAP_DISABLE e WXNEEDED, così come per Xen e GNU Build-ID.
- Sicurezza
- Per migliorare il funzionamento di FreeBSD negli ambienti cloud di Azure, si sta lavorando per garantire il supporto per il meccanismo HyperV Socket, che consente di utilizzare l'interfaccia socket per l'interazione tra il sistema guest e l'ambiente host senza configurare la rete.
- Si sta lavorando per garantire build ripetibili di FreeBSD, che consentano di verificare che i file eseguibili dei componenti di sistema siano stati 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
- Si sta lavorando per implementare la funzionalità NFS su un canale di comunicazione crittografato basato su TLS 1.3, invece di utilizzare Kerberos (modalità sec=krb5p), che si limita a crittografare solo i messaggi RPC e viene implementato solo a livello software. La nuova implementazione utilizza lo stack TLS fornito dal kernel, che permette di sfruttare le capacità di accelerazione hardware. Il codice NFS su TLS è già quasi pronto per i test, ma richiede ancora lavoro per supportare i certificati client firmati e l'adattamento dello stack TLS del kernel per l'invio dei dati NFS (i patch per la ricezione sono già pronti).
- Supporto hardware
- Si sta lavorando per aggiungere il supporto per le CPU x86 Hygon cinesi basate su tecnologie AMD;
- Nell'ambito di CheriBSD, un fork di FreeBSD per l'architettura dei processori di ricerca. (Istruzioni RISC semplificate per hardware, continua l'implementazione del supporto per il processore ARM Morello, che supporterà il sistema di gestione degli accessi alla memoria CHERI, basato sul modello di protezione del progetto Capsicum. Il chip Morello sarà rilasciato nel 2021. Attualmente, il lavoro è concentrato sull'aggiunta del supporto per la piattaforma Arm Neoverse N1, su cui si basa Morello. È stato presentato il port iniziale di CheriBSD per l'architettura RISC-V. Continua lo sviluppo di CheriBSD per il prototipo di riferimento CHERI basato sull'architettura MIPS64.
- È continuato il porting di FreeBSD per il SoC a 64 bit NXP LS1046A basato sul processore ARMv8 Cortex-A72, con motore integrato per l'accelerazione dell'elaborazione dei pacchetti di rete, 10 Gb Ethernet, PCIe 3.0, SATA 3.0 e USB 3.0. Attualmente, si stanno preparando i driver QorIQ e LS1046A, GPIO, QorIQ LS10xx AHCI, VF610 I2C, Epson RX-8803 RTC, QorIQ LS10xx SDHCI per la trasmissione nel ramo principale di FreeBSD.
- Fino alla versione 2.1.1, il driver ena è stato aggiornato con il supporto per la seconda generazione di adattatori di rete ENAv2 (Elastic Network Adapter), utilizzati nell'infrastruttura Elastic Compute Cloud (EC2) per organizzare la comunicazione tra i nodi EC2 a velocità fino a 25 Gb/s. È in preparazione l'aggiornamento a ENA 2.2.0.
- Continua il miglioramento del port di FreeBSD per la piattaforma powerpc64. L'attenzione principale è rivolta a garantire prestazioni di alta qualità su sistemi con processori IBM POWER8 e POWER9. Durante il periodo di riferimento, è stato effettuato il passaggio di FreeBSD-CURRENT all'uso del compilatore LLVM/Clang 10.0 e del linker lld invece di GCC. Di default, per i sistemi powerpc64, è utilizzato l'ABI ELFv2, mentre il supporto per l'ABI ELFv1 è stato eliminato. In FreeBSD-STABLE rimane ancora gcc 4.2.1. Risolti problemi con i driver virtio, aacraid e ixl. Nei sistemi powerpc64 è stata garantita la possibilità di eseguire QEMU senza supporto per Huge Pages.
- È proseguita l'attività per implementare il supporto per l'architettura RISC-V. Nella forma attuale, FreeBSD si avvia già con successo sulla scheda SiFive Hifive Unleashed, per la quale sono stati preparati i driver
UART, SPI e PRCI, supporta il firmware OpenSBI e SBI 0.2. Durante il periodo di riferimento, il lavoro è stato focalizzato sulla migrazione da GCC a clang e lld.
- Applicazioni e sistema dei porti
- La collezione di port di FreeBSD ha superato la soglia di 39.000 port, il numero di PR aperti supera leggermente 2400, di cui 640 PR devono ancora essere esaminati. Nel periodo di riferimento sono stati apportati 8146 cambiamenti da 173 sviluppatori. Quattro nuovi partecipanti (Loïc Bartoletti, Mikael Urankar, Kyle Evans, Lorenzo Salvadore) hanno ottenuto i diritti di commit. È stata aggiunta l'opzione USES=qca e rimossa l'opzione USES=zope (per incompatibilità con Python 3). È in corso il lavoro per rimuovere Python 2.7 dall'albero dei port — tutti i port collegati a Python 2 devono essere portati su Python 3 o saranno rimossi. Il gestore pacchetti pkg è stato aggiornato alla versione 1.13.2.
- Sono stati aggiornati i componenti della stack grafica e i port collegati a xorg.
Il server X.org è stato aggiornato alla versione 1.20.8 (in precedenza era fornita la branch 1.18), il che ha permesso di impostare FreeBSD per utilizzare di default il backend udev/evdev per la gestione dei dispositivi di input. Il pacchetto Mesa è stato impostato di default per utilizzare l'estensione DRI3 invece di DRI2. È in corso il lavoro per mantenere aggiornati i driver grafici, la stack dei dispositivi di input e i componenti drm-kmod (port che fornisce il supporto per i moduli DRM amdgpu, i915 e radeon, usando il framework linuxkpi per la compatibilità con il Direct Rendering Manager del kernel Linux). - L'ambiente desktop KDE Plasma, le KDE Frameworks, le KDE Applications e Qt sono stati mantenuti aggiornati e portati alle versioni più recenti. È stata aggiunta una nuova applicazione ai port, kstars (atlante stellare).
- È stato effettuato un lavoro per correggere i problemi regressivi nel gestore delle finestre xfwm4, emersi dopo l'aggiornamento a Xfce versione 4.14 (ad esempio, sono emersi artefatti durante la decorazione delle finestre).
- Il port di Wine è stato aggiornato alla versione Wine 5.0 (in precedenza era disponibile 4.0.3).
- A partire dalla versione 1.14, il compilatore del linguaggio Go ha aggiunto supporto ufficiale per l'architettura ARM64 per FreeBSD 12.0.
- OpenSSH nel sistema di base è stato aggiornato alla versione 7.9p1.
- È stata implementata e messa a disposizione nei port (devel/libsysctlmibinfo2) la libreria sysctlmibinfo2, che fornisce un'API per accedere a sysctl MIB e trasforma i nomi sysctl in identificatori di oggetti (OID).
- Aggiornamento della distribuzione generato , che rappresenta una versione di FreeBSD adattata per essere utilizzata come desktop portatile, avviabile da un'unità USB. L'ambiente grafico è basato su un window manager . Per il montaggio delle unità viene utilizzato (è supportato il montaggio di CD9660, FAT, HFS+, NTFS, Ext2/3/4), per la configurazione della rete wireless — , e per controllare il volume — .
- È iniziata per la redazione di una documentazione completa per il gestore di ambienti jail . È in preparazione il rilascio di pot 0.11.0, che includerà strumenti per la gestione dello stack di rete.
Fonte: opennet.ru
