Rapporto sullo sviluppo di FreeBSD Q2019 XNUMX

pubblicato rapporto sullo sviluppo del progetto FreeBSD da luglio a settembre 2019. Tra le modifiche possiamo notare:

  • Questioni generali e sistemiche
    • Il Core team ha generalmente approvato la possibilità di includere codice nel sistema distribuito sotto licenza BSD con un accordo di brevetto aggiuntivo (BSD+brevetto), ma la decisione di includere ciascun componente nel sistema sotto questa licenza deve essere approvata separatamente;
    • Si è svolto il primo incontro del gruppo di lavoro creato per effettuare la migrazione dei codici sorgente dal sistema di controllo sorgente centralizzato Subversion al sistema decentralizzato Git. La discussione sulla fattibilità della migrazione è ancora in corso e le decisioni su molte questioni devono ancora essere sviluppate (ad esempio, cosa fare con contrib/, se è necessario rigenerare gli hash nell'attuale repository git e come implementare al meglio i test di commette);
    • Da NetBSD portato toolkit KCSAN (Kernel Concurrency Sanitizer), che consente di rilevare condizioni di competizione tra thread del kernel in esecuzione su CPU diverse;
    • È in corso il lavoro per utilizzare l'assemblatore integrato di Clang (IAS) invece dell'assemblatore GNU binutils;
    • L'infrastruttura di emulazione dell'ambiente Linux (Linuxulator) è adattata per funzionare sull'architettura ARM64. Implementata la chiamata di sistema “renameat2”. L'utilità strace è stata migliorata per diagnosticare i problemi negli eseguibili Linux eseguiti nel Linuxulator. È stato risolto il problema dei crash quando si collegavano file eseguibili con nuova glibc. I port con componenti Linux per Linuxulator sono stati aggiornati a CentOS 7.7;
    • Nell'ambito del programma Google Summer of Code, gli studenti hanno completato con successo sei progetti: è stata preparata l'implementazione di un'utilità ping unificata (IPv4/IPv6), sono stati sviluppati strumenti per testare i firewall e identificare errori nel kernel (Kernel sanitizer), il mac_ipacl è stato proposto il modulo, è stato scritto il codice per la compressione della memoria virtuale ed è stato fatto del lavoro per separare il processo di creazione della porta dall'installazione locale;
    • Il progetto per il test fuzzing del kernel di FreeBSD utilizzando il sistema continua a svilupparsi syzkaller. Durante il periodo di riferimento sono stati identificati ed eliminati più di dieci errori utilizzando syzkaller. Per eseguire syzkaller in macchine virtuali basate su bhyve, è dedicato un server separato e si utilizza
      syzbot ha stabilito test di vari sottosistemi FreeBSD nell'infrastruttura di Google. Organizzato il trasferimento delle informazioni su tutti gli arresti anomali al servizio backtrace.io per semplificarne il raggruppamento e l'analisi;

    • È in corso il lavoro per aggiornare l'implementazione di zlib a livello di kernel.
      Il codice relativo alla compressione è stato migrato da zlib 1.0.4, rilasciato oltre 20 anni fa, all'attuale codebase zlib 1.2.11. Per unificare l'accesso a zlib, sono state aggiunte al kernel le funzioni compress, compress2 e uncompress. Il codice che garantisce il funzionamento del protocollo PPP dal sottosistema netgraph è stato trasferito per utilizzare l'implementazione di sistema di zlib, invece della propria edizione di questa libreria. Anche i sottosistemi kern_ctf.c, opencryptodeflate, geom_uzip, subr_compressor, sono stati trasferiti nella nuova zlib.
      if_mxge, bxe aggiornati e ng_deflate;

    • È in fase di sviluppo una nuova interfaccia del kernel sysctlinfo, che consente di trovare elementi nel database dei parametri sysctl, elaborati sotto forma di MIB (Management Information Base) e trasferire informazioni sugli oggetti nello spazio utente.
  • sicurezza
    • Sviluppato il modulo kernel mac_ipacl, basato sul TrustedBSD MAC Framework e che implementa un sistema di controllo degli accessi per le impostazioni dello stack di rete per gli ambienti jail. Ad esempio, utilizzando mac_ipacl, un amministratore di sistema host può impedire all'utente root in un ambiente jail di modificare o impostare indirizzi IP o impostazioni di sottorete per determinate interfacce di rete. Proposto un sistema obbligatorio di controllo degli accessi permette impostare elenchi di indirizzi IP e sottoreti consentiti per Jail, vietare l'installazione di determinati IP e sottoreti in Jail o limitare la modifica dei parametri solo per determinate interfacce di rete;
    • Intel ha donato una porta dello stack software al progetto TPM 2.0 (Trusted Platform Module) per interfacciarsi con il chip di elaborazione sicuro, che viene solitamente utilizzato per il caricamento verificato del firmware e del bootloader del sistema operativo. I componenti dello stack sono presentati sotto forma di porte security/tpm2-tss, security/tpm2-tools e security/tpm2-abrmd. Il port tpm2-tss include librerie per l'utilizzo dell'API TPM2, tpm2-tools fornisce utilità della riga di comando per l'esecuzione di operazioni TPM e tpm2-abrmd contiene un'implementazione del processo in background dei componenti TPM Access Broker e Resource Manager che multiplexa le richieste di diversi utenti TPM ad un unico dispositivo. Oltre all'avvio verificato su FreeBSD, TPM può essere utilizzato per migliorare la sicurezza di Strongswan IPsec, SSH e TLS eseguendo operazioni crittografiche su un chip separato;
    • Il kernel per l'architettura amd64 è adattato per l'avvio utilizzando la tecnica di protezione W^X (scrittura XOR esecuzione), il che significa che non è possibile accedere simultaneamente alle pagine di memoria per la scrittura e l'esecuzione (il kernel può ora essere caricato utilizzando pagine di memoria eseguibili per le quali la scrittura è proibito). Il nuovo metodo di protezione del kernel è incluso nel ramo HEAD e sarà incluso nelle versioni FreeBSD 13.0 e 12.2;
    • Per le chiamate di sistema mmap e mprotect implementato macro PROT_MAX(), che consente di determinare l'insieme di flag di restrizione di accesso consentiti per ulteriori modifiche (PROT_READ, PROT_WRITE, PROT_EXEC). Utilizzando PROT_MAX(), uno sviluppatore può vietare il trasferimento di un'area di memoria nella categoria degli eseguibili o richiedere memoria che non consente l'esecuzione, ma che può essere successivamente convertita in eseguibile. Ad esempio, una regione di memoria può essere aperta alla scrittura solo per la durata del collegamento dinamico o della generazione di codice JIT, ma una volta completata la scrittura, è limitata alla sola lettura ed esecuzione e, in futuro, se compromessa, l'utente malintenzionato non sarà in grado di abilitare la scrittura per quel blocco di memoria. Oltre a PROT_MAX() è implementato anche sysctl vm.imply_prot_max che, una volta attivato, determina l'insieme di flag validi in base ai parametri iniziali della prima chiamata a mmap;
    • Per migliorare la protezione contro lo sfruttamento delle vulnerabilità, oltre alla tecnica di randomizzazione dello spazio degli indirizzi (ASLR), un meccanismo per randomizzare gli offset dei puntatori che indirizzano lo stack frame iniziale e le strutture poste sullo stack con informazioni sull'ambiente, parametri di avvio del programma e dati per le immagini eseguibili viene proposto il formato ELF;
    • È stato fatto del lavoro per rimuovere la funzione unsafe goes da libc (a partire dallo standard C11 questa funzione è stata esclusa dalle specifiche) e per correggere i port che ancora utilizzano questa funzione. Si prevede che la modifica sarà offerta in FreeBSD 13.0;
    • È stato lanciato un progetto sperimentale per creare strumenti per orchestrare gli ambienti carcerari basati sul framework lattina per la creazione e l'esportazione di immagini, implementato in modo simile a Docker, e un driver nomade, che fornisce un'interfaccia per l'avvio dinamico delle applicazioni in un ambiente jail. Il modello proposto ci consente di separare i processi di creazione di ambienti jail e di distribuzione delle applicazioni in essi. Uno degli obiettivi del progetto è fornire un mezzo per manipolare le jail come contenitori in stile Docker;
  • Archiviazione e file system
    • Da NetBSD all'utility "makefs". mosso Supporto del file system FAT (msdosfs). Le modifiche predisposte consentono di creare immagini FS con FAT senza utilizzare il driver md e senza autorizzazione root;
    • È stata completata la rielaborazione del driver del sottosistema FUSE (File system in USErspace), consentendo la creazione di implementazioni di file system in spazio utente. Il driver originariamente fornito conteneva molti bug ed era basato su FUSE 7.8, rilasciato 11 anni fa. Nell'ambito del progetto di modernizzazione dei driver è stato implementato il supporto al protocollo FUSE 7.23, è stato aggiunto il codice per la verifica dei diritti di accesso lato kernel (“-o default_permissions”), sono state aggiunte le chiamate a VOP_MKNOD, VOP_BMAP e VOP_ADVLOCK, è stata fornita la possibilità di interrompere le operazioni FUSE, è stato aggiunto il supporto per pipe senza nome e socket Unix in fusefs, è diventato possibile utilizzare kqueue per /dev/fuse, è stato possibile aggiornare i parametri di montaggio tramite "mount -u", aggiunto supporto per l'esportazione di fusef tramite NFS, implementato l'accounting RLIMIT_FSIZE, aggiunti i flag FOPEN_KEEP_CACHE e FUSE_ASYNC_READ, apportate significative ottimizzazioni delle prestazioni e migliorata l'organizzazione della memorizzazione nella cache. Il nuovo driver è incluso nei rami head e stable/12 (incluso in FreeBSD 12.1);
    • L'implementazione di NFSv4.2 (RFC-7862) per FreeBSD è quasi completata. L'attenzione principale durante il periodo di riferimento è stata posta sui test. Sono stati completati i test per verificare la compatibilità con l'implementazione Linux, ma i test del server pNFS con NFSv4.2 sono ancora in corso. In generale, il codice è già considerato pronto per l'integrazione nei rami head/current di FreeBSD. La nuova versione di NFS aggiunge il supporto per le funzioni posix_fadvise, posix_fallocate, le modalità SEEKHOLE/SEEKDATA in lseek, l'operazione di copia locale di parti di un file sul server (senza trasferimento al client);
  • Supporto hardware
    • È stato lanciato un progetto per migliorare le prestazioni di FreeBSD sui laptop. Il primo dispositivo ad essere controllato per il supporto hardware in FreeBSD è stato il laptop Lenovo X1 Carbon di settima generazione;
    • CheriBSD, un fork di FreeBSD per l'architettura dei processori di ricerca CHERÌ (Capability Hardware Enhanced RISC Instruction), aggiornato per supportare il prossimo processore ARM Morello, che supporterà il sistema di controllo dell'accesso alla memoria CHERI basato sul modello di sicurezza del design Capsicum. Patatine Morello stanno pianificando rilascio nel 2021. Gli sviluppatori di CheriBSD continuano inoltre a monitorare lo sviluppo del prototipo di riferimento CHERI basato sull'architettura MIPS;
    • Supporto esteso per i chip RockChip RK3399 utilizzati nelle schede RockPro64 e NanoPC-T4. Il miglioramento più significativo è stato il supporto per eMMC e lo sviluppo di un nuovo driver per il controller eMMC utilizzato sulla scheda;
    • Continua il lavoro per implementare il supporto per il SoC ARM64 Broadcom BCM5871X con processori ARMv8 Cortex-A57, finalizzato all'utilizzo in router, gateway e storage di rete. Durante il periodo di riferimento
      Il supporto iProc PCIe è stato ampliato ed è stata aggiunta la possibilità di utilizzare operazioni crittografiche hardware per velocizzare IPsec.
      Nel quarto trimestre è prevista l'integrazione del codice nel ramo HEAD;

    • Ci sono stati progressi significativi nello sviluppo di un port di FreeBSD per la piattaforma powerpc64. L'obiettivo è fornire prestazioni di qualità su sistemi con processori IBM POWER8 e POWER9, ma supporta opzionalmente il funzionamento su vecchi Apple Power Mac, x500 e Amiga A1222. Il ramo powerpc*/12 continua a essere fornito con gcc 4.2.1 e il ramo powerpc*/13 verrà presto migrato a llvm90. Delle 33306 porte, 30514 sono state assemblate con successo;
    • Continua il porting di FreeBSD per il SoC NXP LS64A a 1046 bit basato sul processore ARMv8 Cortex-A72 con un motore di accelerazione dell'elaborazione dei pacchetti di rete integrato, 10 Gb Ethernet, PCIe 3.0, SATA 3.0 e USB 3.0. Durante il periodo di riferimento è stato implementato il supporto per le interfacce di rete USB 3.0, SD/MMC, I2C, DPAA e GPIO. Sono previsti piani per supportare QSPI e ottimizzare le prestazioni dell'interfaccia di rete. Il completamento dei lavori e l'inserimento nel ramo HEAD è previsto nel 4° trimestre 2019;
    • Il driver ena è stato aggiornato per supportare 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. Il supporto NETMAP è stato aggiunto e testato al driver ena e il layout della memoria è stato adattato per abilitare la modalità LLQ negli ambienti Amazon EC2 A1;
  • Applicazioni e sistema portuale
    • Aggiornati i componenti dello stack grafico e le porte relative a xorg. Le porte che utilizzano USE_XORG e XORG_CAT sono state spostate nel framework USES invece di chiamare bsd.xorg.mk tramite bsd.port.mk. Tali port ora includono il flag "USES=xorg" nei loro makefile. La funzionalità XORG_CAT è stata separata da bsd.xorg.mk ed è ora abilitata dal flag "USES=xorg-cat". Aggiunti strumenti per generare direttamente porte xorg da un repository git
      freedesktop.org, che, ad esempio, consente di creare port per versioni non ancora rilasciate. In futuro, prevediamo di preparare strumenti per utilizzare il sistema di assemblaggio dei mesoni invece degli autotools per creare port xorg.

      È stato fatto del lavoro per ripulire i vecchi port xorg legati a componenti che non sono più supportati, ad esempio il port x11/libXp è stato rimosso e i port x11/Xxf86misc, x11-fonts/libXfontcache e graphics/libGLw sono stati deprecati ;

    • È stato fatto del lavoro per migliorare il supporto per Java 11 e versioni più recenti in FreeBSD, nonché per trasferire alcune modifiche al ramo Java 8. Dopo il supporto per le nuove funzionalità di Java 11 come Java Flight Recorder, HotSpot Serviceability Agent, HotSpot Debugger è stato implementato per FreeBSD, DTrace, Javac Server, Java Sound e SCTP, il lavoro si è spostato per garantire che tutti i test di compatibilità fossero superati. Il numero di fallimenti durante il superamento dei test è stato ridotto da 50 a 2;
    • Il desktop KDE Plasma, KDE Frameworks, le applicazioni KDE e Qt sono mantenuti aggiornati e aggiornati alle ultime versioni;
    • Port con il desktop Xfce aggiornato al rilascio 4.14;
    • L'albero dei port di FreeBSD ha superato i 38000 port, il numero di PR non chiusi è leggermente superiore a 2000, di cui 400 PR non sono ancora stati risolti. Durante il periodo di riferimento sono state apportate 7340 modifiche da 169 sviluppatori. Due nuovi partecipanti (Santhosh Raju e Dmitri Goutnik) hanno ricevuto i diritti di committer. È stata pubblicata una nuova versione del gestore di pacchetti pkg 1.12, con il supporto per gli overlay nell'albero dei port e la pulizia di bsd.sites.mk. Tra gli aggiornamenti di versione significativi nei port ci sono: Lazarus 2.0.4, LLVM 9.0, Perl5.30, PostgreSQL 11, Ruby 2.6, Firefox 69.0.1, Firefox-esr 68.1.0, Chromium 76.0;
    • Lo sviluppo del progetto continua Clon OS, sviluppando una distribuzione specializzata per l'implementazione dell'infrastruttura del server virtuale. In termini di compiti che risolve, ClonOS assomiglia a sistemi come Proxmox, Triton (Joyent), OpenStack, OpenNebula e Amazon AWS, la differenza principale da cui è l'uso di FreeBSD e la capacità di gestire, distribuire e gestire contenitori Jail e FreeBSD ambienti virtuali basati su hypervisor Bhyve e Xen. Le modifiche recenti includono il supporto
      cloud-init per VM Linux/BSD e cloudbase-init per VM Windows, inizio della transizione all'utilizzo di immagini native, utilizzo di Jenkins CI per testare le build e un nuovo repository pkg per l'installazione
      ClonOS dai pacchetti.

Fonte: opennet.ru

Aggiungi un commento