raport privind dezvoltarea proiectului FreeBSD din iulie până în septembrie 2019. Printre modificări se numără:
- Întrebări generale și sistemice
- Echipa de bază a aprobat în general posibilitatea includerii în sistem a codului furnizat sub licența BSD cu un acord suplimentar pentru utilizarea brevetelor (), dar decizia privind includerea în sistem a fiecărui component sub această licență trebuie aprobată separat;
- A avut loc prima ședință a grupului de lucru creat pentru migrarea codului sursă din sistemul centralizat de gestionare a codului sursă Subversion în sistemul descentralizat Git. Discursul asupra oportunității migrației este încă în desfășurare, iar multe întrebări necesită încă soluții (de exemplu, cum să procedăm cu contrib/, dacă trebuie regenerate hash-urile în actualul git-repository și cum să realizăm cel mai bine testarea commit-urilor);
- Din NetBSD instrumentul KCSAN (Kernel Concurrency Sanitizer), care permite identificarea stărilor de competiție între firele de execuție ale nucleului rulate pe CPU-uri diferite;
- Se lucrează la utilizarea asamblorului încorporat în Clang (IAS) în loc de asamblorul din GNU binutils;
- Infrastructura de emulare a mediului Linux (Linuxulator) a fost adaptată pentru a funcționa pe arhitectura ARM64. A fost implementat apelul de sistem „renameat2“. Utilitarul strace a fost îmbunătățit pentru diagnosticarea problemelor în fișierele executabile Linux, rulate în Linuxulator. Problema cu apariția erorilor la legarea fișierelor executabile cu glibc-ul proaspăt a fost rezolvată. Porturile cu componente Linux pentru Linuxulator au fost actualizate la CentOS 7.7;
- În cadrul programului Google Summer of Code, studenții au realizat cu succes șase proiecte: implementarea utilitarului unificat (IPv4/IPv6) ping, dezvoltarea instrumentelor pentru testarea firewall-urilor și identificarea erorilor în nucleu (Kernel sanitizer), propunerea unui modul mac_ipacl, scrierea codului pentru comprimarea memoriei virtuale și separarea procesului de construire a porturilor de instalarea locală;
- Proiectul de testare a fuzzing-ului pentru nucleul FreeBSD continuă să se dezvolte utilizând sistemul . În perioada raportată, cu ajutorul syzkaller, au fost identificate și remediate peste zece erori. Un server dedicat a fost dedicat rulării syzkaller în mașini virtuale bazate pe bhyve, iar cu ajutorul
syzbot a configurat verificarea diverselor subsisteme FreeBSD în infrastructura Google. A fost organizat transferul de informații despre toate erorile către serviciul backtrace.io pentru a simplifica gruparea și analiza acestora; - Se lucrează la actualizarea implementării zlib la nivel de kernel.
Codul legat de compresie a fost transformat din zlib 1.0.4, lansat acum mai bine de 20 de ani, în baza de cod actualizată zlib 1.2.11. Pentru unificarea accesului la zlib, în kernel au fost adăugate funcțiile compress, compress2 și uncompress. Codul care asigură funcționarea protocolului PPP din subsistemul netgraph a fost transformat pentru a utiliza implementarea de sistem a zlib, în locul versiunii proprii a acestei biblioteci. Subsistemele kern_ctf.c, opencryptodeflate, geom_uzip, subr_compressor,
if_mxge, bxe updated și ng_deflate; - Se dezvoltă o nouă interfață de kernel , care permite găsirea elementelor în baza de date a parametrilor sysctl, procesată sub formă de MIB (Management Information Base), și transmiterea informațiilor despre obiecte în spațiul utilizatorului.
- Securitate
- A fost dezvoltat un modul de kernel , bazat pe TrustedBSD MAC Framework, care implementează un sistem de control al accesului la setările stivei de rețea pentru medii jail. De exemplu, cu ajutorul mac_ipacl, administratorul sistemului gazdă poate interzice utilizatorului root din mediul jail să modifice sau să stabilească adrese IP sau parametrii subrețelelor pentru anumite interfețe de rețea. Sistemul propus de gestionare a accesului permite definirea listelor de adrese IP și subrețelele acceptate pentru Jail, interzicerea stabilirii anumitor IP și subrețele în Jail sau limitarea schimbării parametrilor doar pentru anumite interfețe de rețea;
- Compania Intel a transferat proiectului portul stivei software (Trusted Platform Module) pentru interacțiunea cu cipul de calcul sigur, care este utilizat în mod obișnuit pentru încărcarea verificată a firmware-urilor și a bootloader-ului sistemului de operare. Componentele stivei sunt prezentate sub formă de module securitate/tpm2-tss, securitate/tpm2-tools și securitate/tpm2-abrmd. Modulul tpm2-tss include biblioteci pentru utilizarea API-ului TPM2, tpm2-tools furnizează utilitare de linie de comandă pentru a efectua operațiuni cu TPM, iar tpm2-abrmd conține un proces de fundal cu implementarea componentelor TPM Access Broker și Resource Manager, care multiplexează cererile de la diferiți utilizatori TPM către un singur dispozitiv. Pe lângă încărcarea verificată, în FreeBSD TPM poate fi utilizat pentru a îmbunătăți securitatea Strongswan IPsec, SSH și TLS prin efectuarea operațiunilor criptografice pe un cip separat;
- Nucleul pentru arhitectura amd64 a fost adaptat pentru a permite încărcarea utilizând tehnica de protecție W^X (write XOR execute), ce presupune că paginile de memorie nu pot fi accesibile simultan pentru scriere și execuție (nucleul poate fi acum încărcat utilizând pagini de memorie executabile pentru care scrierea este interzisă). Noua metodă de protecție a nucleului a fost inclusă în ramura HEAD și va face parte din lansările FreeBSD 13.0 și 12.2;
- Pentru apelurile de sistem mmap și mprotect macro PROT_MAX(), care permite determinarea setului de steaguri de restricție a accesului acceptate (PROT_READ, PROT_WRITE, PROT_EXEC) la modificările ulterioare. Utilizând PROT_MAX(), dezvoltatorul poate interzice trecerea unei zone de memorie în categoria executabilă sau poate solicita memorie care nu permite execuția, dar care ulterior poate fi schimbată în executabilă. De exemplu, zona de memorie poate fi deschisă pentru scriere doar pentru perioada legării dinamice sau generării de cod JIT, dar după finalizarea scrierii, este limitată doar la citire și execuție, iar ulterior, în cazul unei compromiteri, atacatorul nu va putea permite scrierea pentru acest bloc de memorie. Pe lângă PROT_MAX(), a fost implementat de asemenea sysctl vm.imply_prot_max, prin activarea căruia setul de steaguri acceptate este determinat pe baza parametrilor inițiali ai primei apeluri mmap;
- Pentru a spori protecția împotriva exploatării vulnerabilităților, pe lângă tehnica de randomizare a spațiului adreselor (ASLR), a fost propus un mecanism de randomizare a deplasărilor pointerilor, care vizează cadrul inițial al stivei și structurile plasate în stivă cu informații despre mediu, parametrii de pornire a programului și date pentru imaginile executabile în format ELF;
- A fost efectuată o muncă de eliminare a funcției nesigure gets din libc (începând cu standardul C11, această funcție a fost exclusă din specificație) și de corectare a porturilor care mai utilizează această funcție. Modificarea este planificată pentru a fi propusă în FreeBSD 13.0;
- A fost lansat un proiect experimental pentru a crea instrumente de orchestrare a mediilor jail pe baza framework-ului pentru crearea și exportarea imaginilor, implementat similar cu Docker, și a driverului , care oferă o interfață pentru lansarea dinamică a aplicațiilor în mediul jail. Modelul propus permite separarea proceselor de creare a mediilor jail și desfășurarea aplicațiilor în acestea. Una dintre scopurile proiectului este de a oferi un instrument pentru manipularea jail-urilor ca pe containere în stil Docker;
- Sisteme de stocare și sisteme de fișiere
- Din NetBSD în utilitarul „makefs” suportul pentru sistemul de fișiere FAT (msdosfs). Modificările pregătite permit crearea de imagini FS cu FAT fără a utiliza driverul md și fără privilegii root;
- Finalizarea actualizării driverului pentru subsistemul FUSE (File system in USErspace), care permite crearea de implementări ale sistemelor de fișiere în spațiul utilizatorului. Driverul livrat inițial conținea numeroase erori și se baza pe versiunea FUSE 7.8, lansată acum 11 ani. În cadrul proiectului de modernizare a driverului, a fost implementat suportul pentru protocolul FUSE 7.23, s-a adăugat cod pentru verificarea permisiunilor de acces pe partea kernel («-o default_permissions»), au fost incluse apeluri VOP_MKNOD, VOP_BMAP și VOP_ADVLOCK, s-a asigurat posibilitatea de a întrerupe operațiunile FUSE, s-a adăugat suport pentru canale fără nume și sockets unix în fusefs, a devenit posibilă utilizarea kqueue pentru /dev/fuse, a fost permisă actualizarea parametrilor de montare prin «mount -u», s-a adăugat suport pentru exportul fusefs prin NFS, s-a implementat contabilizarea RLIMIT_FSIZE, s-au adăugat flagurile FOPEN_KEEP_CACHE și FUSE_ASYNC_READ, s-au realizat optimizări semnificative ale performanței și a fost îmbunătățită organizarea caching-ului. Noua versiune a driverului este inclusă în ramurile head și stable/12 (a fost integrată în FreeBSD 12.1);
- Lucrările la implementarea NFSv4.2 (RFC-7862) pentru FreeBSD sunt aproape finalizate. În perioada raportată, s-a pus accent pe testare. Testele pentru verificarea compatibilității cu implementarea din Linux au fost finalizate, dar continuă verificările pentru funcționarea serverului pNFS cu NFSv4.2. În general, codul este deja considerat gata pentru integrarea în ramurile FreeBSD head/current. Noua versiune NFS include suport pentru funcțiile posix_fadvise, posix_fallocate, modurile SEEKHOLE/SEEKDATA în lseek, operațiuni de copiere locală a unor părți de fișiere pe server (fără transmiterea către client);
- Suport hardware
- A început un proiect pentru îmbunătățirea funcționării FreeBSD pe laptopuri. Primul dispozitiv pentru care a fost realizat un audit al suportului hardware în FreeBSD a fost laptopul Lenovo X1 Carbon din generația a șaptea;
- CheriBSD, o ramură a FreeBSD pentru arhitectura de procesor în cercetare (Capability Hardware Enhanced RISC Instructions), actualizat pentru a sprijini viitorul procesor 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 urmează să fie lansat în 2021. Dezvoltatorii CheriBSD continuă de asemenea să monitorizeze evoluția prototipului de referință CHERI bazat pe arhitectura MIPS;
- S-a extins suportul pentru cipurile RockChip RK3399, utilizate în plăcile RockPro64 și NanoPC-T4. Cea mai semnificativă îmbunătățire a fost suportul pentru eMMC și dezvoltarea unui nou driver pentru controlerul eMMC utilizat pe placă;
- Continuăm lucrările pentru implementarea suportului pentru ARM64 SoC Broadcom BCM5871X cu procesoare ARMv8 Cortex-A57, destinate utilizării în routere, gateway-uri și stocare de rețea. În perioada raportată,
s-a extins suportul pentru iProc PCIe și s-a adăugat posibilitatea utilizării operațiunilor criptografice hardware pentru accelerarea funcționării IPsec.
Integrarea codului în ramura HEAD este așteptată în trimestrul patru; - Se remarcă realizări semnificative în dezvoltarea portului FreeBSD pentru platforma powerpc64. Principala atenție este acordată asigurării unei funcționări de calitate pe sistemele cu procesoare IBM POWER8 și POWER9, dar se susține opțional și funcționarea pe vechile Apple Power Mac, x500 și Amiga A1222. Ramura powerpc*/12 continuă să fie livrată cu gcc 4.2.1, iar ramura powerpc*/13 va fi curând migrată pe llvm90. Dintre cele 33306 porturi, 30514 s-au compilat cu succes;
- S-a continuat portarea FreeBSD pentru SoC de 64 de biți NXP LS1046A bazat pe procesorul 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 perioada raportată, s-a implementat suportul pentru USB 3.0, SD/MMC, I2C, interfața de rețea DPAA și GPIO. În planuri se află suportul pentru QSPI și optimizarea performanței interfeței de rețea. Finalizarea lucrărilor și includerea în ramura HEAD sunt așteptate în trimestrul 4 al anului 2019;
- 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 comunicația între nodurile EC2 la viteze de până la 25 Gb/s. În driverul ena a fost adăugat și testat suportul pentru NETMAP, iar modelul de memorie a fost adaptat pentru a activa modul LLQ în medii Amazon EC2 A1;
- Aplicații și sistem de porturi
- Componentele stivei grafice și porturile asociate cu xorg au fost actualizate. Porturile care utilizează USE_XORG și XORG_CAT au fost migrate pe frameworkul USES în loc de apelarea bsd.xorg.mk prin bsd.port.mk. Aceste porturi includ acum flagul „USES=xorg” în makefile-uri. Funcționalitatea XORG_CAT a fost separată din bsd.xorg.mk și acum este activată de flagul „USES=xorg-cat”. A fost adăugat un instrumentar pentru formarea directă a porturilor xorg dintr-un repo git.
freedesktop.org, care permite, de exemplu, crearea de porturi pentru versiuni care nu au fost încă lansate. În continuare, se preconizează pregătirea unui instrument pentru utilizarea sistemului de construcție meson în loc de autotools pentru compilarea porturilor xorg.A fost realizată o muncă de curățare a porturilor vechi xorg, legate de componente deja nesuportate, de exemplu, a fost eliminat portul x11/libXp, iar porturile x11/Xxf86misc, x11-fonts/libXfontcache și graphics/libGLw au fost trecute în categoria învechite;
- S-a lucrat la îmbunătățirea suportului pentru Java 11 și versiunile mai noi în FreeBSD, precum și la portarea unor modificări în ramura Java 8. După ce a fost implementat suportul pentru noile funcționalități Java 11 în FreeBSD, cum ar fi Java Flight Recorder, HotSpot Serviceability Agent, HotSpot Debugger, DTrace, Javac Server, Java Sound și SCTP, munca s-a concentrat pe asigurarea trecerii tuturor testelor de compatibilitate. Numărul de eșecuri la trecerea testelor a fost redus de la 50 la 2;
- Desktopul KDE Plasma, KDE Frameworks, KDE Applications și Qt sunt menținute la zi și actualizate la cele mai recente versiuni;
- Porturile cu desktopul Xfce au fost actualizate la versiune ;
- Arborele de porturi FreeBSD a depășit pragul de 38000 de porturi, numărul PR-urilor neînchise depășește puțin 2000, dintre care 400 PR-uri nu au fost încă analizate. În perioada raportată, au fost aduse 7340 de modificări de către 169 de dezvoltatori. Doi noi participanți (Santhosh Raju și Dmitri Goutnik) au obținut drepturi de commit. A fost publicată o nouă versiune a managerului de pachete pkg 1.12, cu suport pentru overlay-uri în arborele de porturi și curățarea bsd.sites.mk. Printre actualizările semnificative ale versiunilor în porturi se numără: 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;
- Dezvoltarea proiectului continuă , este o distribuție specializată pentru desfășurarea infrastructurii serverelor virtuale. În ceea ce privește sarcinile rezolvate, ClonOS este similar cu sisteme precum Proxmox, Triton (Joyent), OpenStack, OpenNebula și Amazon AWS, principala diferență dintre ele fiind utilizarea FreeBSD și capacitatea de a gestiona, desfășura și controla containerele Jail FreeBSD și medii virtuale pe baza hiper-vizorilor Bhyve și Xen. Printre modificările recente se numără suportul
cloud-init pentru VM Linux/BSD și cloudbase-init pentru VM Windows, începutul tranziției către utilizarea imaginilor proprii, implicarea Jenkins CI în testarea construcțiilor și un nou repo pkg pentru instalarea
ClonOS din pachete.
- Componentele stivei grafice și porturile asociate cu xorg au fost actualizate. Porturile care utilizează USE_XORG și XORG_CAT au fost migrate pe frameworkul USES în loc de apelarea bsd.xorg.mk prin bsd.port.mk. Aceste porturi includ acum flagul „USES=xorg” în makefile-uri. Funcționalitatea XORG_CAT a fost separată din bsd.xorg.mk și acum este activată de flagul „USES=xorg-cat”. A fost adăugat un instrumentar pentru formarea directă a porturilor xorg dintr-un repo git.
Sursa: opennet.ro
