Raporti i Zhvillimit të FreeBSD T2019 XNUMX

botuar raport mbi zhvillimin e projektit FreeBSD nga korriku deri në shtator 2019. Ndryshimet përfshijnë:

  • Pyetje të përgjithshme dhe të sistemit
    • Ekipi Core në përgjithësi ka miratuar përfshirjen e kodit të licencuar nga BSD me një marrëveshje shtesë për patentë (BSD + Patent), por vendimi për përfshirjen e secilit komponent nën këtë licencë në sistem duhet të miratohet veçmas;
    • U zhvillua takimi i parë i grupit të punës të krijuar për të kryer migrimin e kodeve burimore nga sistemi i centralizuar i menaxhimit të kodit burimor Subversion në sistemin e decentralizuar Git. Diskutimi mbi përshtatshmërinë e migrimit është ende në vazhdim, dhe shumë çështje mbeten për t'u vendosur (për shembull, si të merreni me kontributin/, nëse do të rigjeneroni hash-et në depon e tanishme git dhe si të zbatoni më mirë testimin e kryerjes);
    • Nga NetBSD portuar paketa e veglave KCSAN (Kernel Concurrency Sanitizer), e cila ju lejon të zbuloni shfaqjen e kushteve të garës midis fijeve të kernelit që funksionojnë në CPU të ndryshme;
    • Po punohet për të përdorur montuesin e integruar të Clang (IAS) në vend të montimit nga GNU binutils;
    • Infrastruktura e emulimit të mjedisit Linux (Linuxulator) është përshtatur për të punuar në arkitekturën ARM64. Thirrja e sistemit "renameat2" është zbatuar. Shërbimi strace është përmirësuar për të diagnostikuar problemet në ekzekutuesit Linux që funksionojnë në Linuxulator. Rregullimi i ndërprerjes kur lidhni skedarët e ekzekutueshëm me glibc të freskët. Portet me komponentë Linux për Linuxulator të përditësuar në CentOS 7.7;
    • Si pjesë e programit Google Summer of Code, studentët përfunduan me sukses gjashtë projekte: u përgatit një zbatim i një mjeti ping të unifikuar (IPv4 / IPv6), u zhvilluan mjete për testimin e mureve të zjarrit dhe zbulimin e gabimeve në kernel (sanitizer i kernelit), një mac_ipacl u propozua moduli dhe u shkrua kodi për të kompresuar memorien virtuale dhe është bërë punë për të ndarë procesin e ndërtimit të porteve nga instalimi lokal;
    • Një projekt për të testuar fuzz kernelin FreeBSD duke përdorur sistemin syzkaller. Gjatë periudhës raportuese, me ndihmën e syzkaller, janë identifikuar dhe eliminuar më shumë se dhjetë gabime. Për të ekzekutuar syzkaller në makinat virtuale të bazuara në bhyve, ndahet një server i veçantë dhe përdoret
      syzbot kontrollon nënsisteme të ndryshme FreeBSD në infrastrukturën e Google. Transferimi i informacionit për të gjitha përplasjet në shërbimin backtrace.io është organizuar për të thjeshtuar grupimin dhe analizën e tyre;

    • Po punohet për përditësimin e zbatimit të zlib në nivel kernel.
      Kodi i lidhur me kompresimin është zhvendosur nga zlib 1.0.4, i cili u lëshua mbi 20 vjet më parë, në bazën aktuale të kodit zlib 1.2.11. Funksionet compress, compress2 dhe uncompress janë shtuar në kernel për të unifikuar aksesin në zlib. Kodi që siguron protokollin PPP nga nënsistemi netgraph është ndërruar për të përdorur zbatimin e sistemit të zlib, në vend të botimit origjinal të kësaj biblioteke. Nënsistemet kern_ctf.c, opencryptodeflate, geom_uzip, subr_compressor,
      if_mxge, bxe përditësuar dhe ng_deflate;

    • Një ndërfaqe e re kernel po zhvillohet sysctlinfo, i cili ju lejon të gjeni elementë në bazën e parametrave sysctl, të përpunuara në formën e një MIB (Management Information Base) dhe të transferoni informacione rreth objekteve në hapësirën e përdoruesit.
  • siguri
    • Moduli i kernelit është zhvilluar mac_ipacl, bazuar në TrustedBSD MAC Framework dhe implementimin e një sistemi të kontrollit të aksesit në cilësimet e rrjetit të pirgut për mjediset e burgut. Për shembull, duke përdorur mac_ipacl, një administrator i sistemit pritës mund të parandalojë që përdoruesi rrënjë në një mjedis burgu të ndryshojë ose të vendosë adresat IP ose cilësimet e nënrrjetit për ndërfaqe të caktuara të rrjetit. Sistemi i Propozuar i Kontrollit të Detyrueshëm të Aksesit Kjo i lejon caktoni listat e adresave IP dhe nënrrjetave të lejuara për Jail, ndaloni instalimin e IP-ve dhe nënrrjetave të caktuara në Jail, ose kufizoni ndryshimet e parametrave vetëm për ndërfaqe të caktuara të rrjetit;
    • Intel i dhuroi projektit një port stack software TPM 2.0 (Trusted Platform Module) për ndërveprim me çipin e sigurt kompjuterik, i cili zakonisht përdoret për nisjen e verifikuar të firmuerit dhe ngarkuesit të OS. Komponentët e stivës ofrohen në formën e porteve të sigurisë/tpm2-tss, të sigurisë/tpm2-veglave dhe të porteve të sigurisë/tpm2-abrmd. Porta tpm2-tss përfshin biblioteka për përdorimin e TPM2 API, tpm2-tools ofron shërbime të linjës së komandës për kryerjen e operacioneve TPM dhe tpm2-abrmd përmban një proces sfondi që zbaton komponentët TPM Access Broker dhe Resource Manager që kërkon shumëfish nga TPM të ndryshme përdoruesit në një pajisje të vetme. Përveç nisjes së verifikuar në FreeBSD, TPM mund të përdoret për të përmirësuar sigurinë Strongswan IPsec, SSH dhe TLS duke kryer operacione kriptografike në një çip të veçantë;
    • Kerneli për arkitekturën amd64 është përshtatur për t'u ngarkuar duke përdorur teknikën e mbrojtjes W^X (shkruani XOR execute), që nënkupton se faqet e memories nuk mund të jenë njëkohësisht të disponueshme për shkrim dhe ekzekutim (kerneli tani mund të ngarkohet duke përdorur faqe memorie të ekzekutueshme për të cilat shkrimi është i çaktivizuar). Metoda e re e mbrojtjes së kernelit është përfshirë në degën HEAD dhe do të jetë pjesë e versioneve të FreeBSD 13.0 dhe 12.2;
    • Për thirrjet e sistemit mmap dhe mprotect zbatuar makro PROT_MAX(), e cila lejon përcaktimin e grupit të flamujve të kufizimit të aksesit (PROT_READ, PROT_WRITE, PROT_EXEC) që është i vlefshëm për ndryshime të mëtejshme. Duke përdorur PROT_MAX(), një zhvillues mund të ndalojë transferimin e një zone memorie në kategorinë e ekzekutueshme ose të kërkojë memorie që nuk lejon ekzekutimin, por më vonë mund të transferohet në ekzekutues. Për shembull, një zonë memorie mund të jetë e hapur për shkrim vetëm për kohëzgjatjen e lidhjes dinamike ose gjenerimit të kodit JIT, por pas përfundimit të shkrimit, ajo kufizohet vetëm në lexim dhe ekzekutim, dhe në të ardhmen, në rast të një kompromis, sulmuesi nuk do të jetë në gjendje të lejojë shkrimin për këtë bllok memorie. Përveç PROT_MAX(), zbatohet edhe sysctl vm.imply_prot_max, i cili, kur aktivizohet, përcakton grupin e flamujve të vlefshëm bazuar në parametrat fillestarë të thirrjes së parë mmap;
    • Për të forcuar mbrojtjen kundër shfrytëzimit të dobësive, përveç teknikës së randomizimit të hapësirës së adresave (ASLR), propozohet një mekanizëm për randomizimin e zhvendosjeve të treguesve që adresojnë kornizën fillestare të stivit dhe strukturat e vendosura në pirg me informacion rreth mjedisit, parametrat e nisjes së programit, dhe të dhëna për imazhe të ekzekutueshme në formatin ELF;
    • Është bërë punë për të hequr funksionin e pasigurt gets nga libc (duke filluar me standardin C11, ky funksion është i përjashtuar nga specifikimi) dhe për të korrigjuar portat që ende e përdorin këtë funksion. Ndryshimi është planifikuar të ofrohet në FreeBSD 13.0;
    • Një projekt pilot u lançua për të krijuar mjete për orkestrimin e mjediseve të burgut bazuar në kornizën tenxhere për krijimin dhe eksportimin e imazheve, të zbatuara në mënyrë të ngjashme me Docker, dhe një drejtues nomade, i cili ofron një ndërfaqe për nisjen dinamike të aplikacioneve në një mjedis burgu. Modeli i propozuar lejon ndarjen e proceseve të krijimit të mjediseve të burgut dhe vendosjen e aplikacioneve në to. Një nga qëllimet e projektit është të sigurojë një mjet për të manipuluar burgjet si kontejnerët e stilit Docker;
  • Magazinimi dhe sistemet e skedarëve
    • Nga NetBSD te programi "makefs". i riplanifikuar mbështetje për sistemin e skedarëve FAT (msdosfs). Ndryshimet e përgatitura ju lejojnë të krijoni imazhe FS me FAT pa përdorur drejtuesin md dhe pa privilegje rrënjësore;
    • Drejtuesi i nënsistemit FUSE (File system in USERspace) është ripunuar, i cili lejon krijimin e implementimeve të sistemeve të skedarëve në hapësirën e përdoruesit. Shoferi që u dërgua fillimisht përmbante shumë gabime dhe bazohej në FUSE 7.8 të lëshuar 11 vjet më parë. Si pjesë e projektit të modernizimit të drejtuesve, u zbatua mbështetja e protokollit FUSE 7.23, u shtua kodi për të kontrolluar lejet në anën e kernelit ("-o default_permissions"), u shtuan thirrjet VOP_MKNOD, VOP_BMAP dhe VOP_ADVLOCK, u shtua aftësia për të ndërprerë operacionet FUSE u shtua, u shtua mbështetja për tubat pa emër dhe bazat unix në siguresat, u bë e mundur përdorimi i kqueue për /dev/fuse, u lejua përditësimi i parametrave të montimit nëpërmjet "mount -u", u shtua mbështetja për eksportimin e siguresave përmes NFS, u shtua kontabiliteti RLIMIT_FSIZE u zbatuan, u shtuan flamujt FOPEN_KEEP_CACHE dhe FUSE_ASYNC_READ, u bënë optimizime të rëndësishme të performancës dhe u përmirësua organizimi i memorizimit. Drejtuesi i ri përfshihet në degët kryesore dhe stabile/12 (përfshirë me FreeBSD 12.1);
    • Implementimi i NFSv4.2 (RFC-7862) për FreeBSD është pothuajse i përfunduar. Gjatë periudhës raportuese, fokusi ishte te testimi. Testet e përputhshmërisë me implementimin Linux kanë përfunduar, por testimi i serverit pNFS me NFSv4.2 është ende në vazhdim. Në terma të përgjithshëm, kodi konsiderohet tashmë i gatshëm për integrim në degët kryesore/aktuale të FreeBSD. Versioni i ri i NFS shton mbështetje për funksionet posix_fadvise, posix_fallocate, mënyrat SEEKHOLE/SEEKDATA në lseek, kopjimi lokal i pjesëve të skedarëve në server (pa transferim te klienti);
  • Mbështetja e harduerit
    • Filloi një projekt për të përmirësuar FreeBSD në laptopë. Pajisja e parë që u auditua për mbështetje harduerike në FreeBSD ishte laptopi Lenovo X1 Carbon i gjeneratës së shtatë;
    • CheriBSD, një fork i FreeBSD për arkitekturën e procesorit kërkimor CHERI (Capability Hardware Enhanced RISC Instructions), i përditësuar për të mbështetur procesorin e ardhshëm ARM Morello, i cili do të mbështesë sistemin e kontrollit të aksesit të kujtesës të CHERI bazuar në modelin e sigurisë Capsicum. Çip Morello janë duke planifikuar lëshimi në 2021. Zhvilluesit CheriBSD gjithashtu vazhdojnë të monitorojnë zhvillimin e prototipit të referencës CHERI bazuar në arkitekturën MIPS;
    • Mbështetje e zgjeruar për çipat RockChip RK3399 të përdorura në bordet RockPro64 dhe NanoPC-T4. Përmirësimi më i rëndësishëm ishte mbështetja e eMMC dhe zhvillimi i një drejtuesi të ri për kontrolluesin eMMC të përdorur në tabelë;
    • Vazhdoi puna për zbatimin e mbështetjes për ARM64 SoC Broadcom BCM5871X me procesorë ARMv8 Cortex-A57 që synojnë përdorimin në ruter, porta dhe NAS. Gjatë periudhës raportuese
      zgjeroi mbështetjen për iProc PCIe dhe shtoi aftësinë për të përdorur operacione kriptografike harduerike për të shpejtuar IPsec.
      Integrimi i kodit në degën HEAD pritet në tremujorin e katërt;

    • Është bërë përparim i rëndësishëm në zhvillimin e portit FreeBSD për platformën powerpc64. Fokusi është në ofrimin e performancës cilësore në sistemet me procesorë IBM POWER8 dhe POWER9, por mbështetet opsionalisht në Mac të vjetër Apple Power, x500 dhe Amiga A1222. Dega powerpc*/12 vazhdon të dërgohet me gcc 4.2.1 dhe dega powerpc*/13 së shpejti do të migrohet në llvm90. Nga 33306 porte, 30514 janë montuar me sukses;
    • Vazhdoi transferimi i FreeBSD në NXP LS64A SoC 1046-bit i bazuar në procesorin ARMv8 Cortex-A72 me motor të integruar të përshpejtimit të përpunimit të paketave në rrjet, 10 Gb Ethernet, PCIe 3.0, SATA 3.0 dhe USB 3.0. Gjatë periudhës së raportimit, u zbatua mbështetja për USB 3.0, SD / MMC, I2C, ndërfaqen e rrjetit DPAA dhe GPIO. Ne planifikojmë të mbështesim QSPI dhe të optimizojmë performancën e ndërfaqes së rrjetit. Përfundimi dhe përfshirja në degën HEAD pritet në TM4 2019;
    • Drejtuesi ena është përditësuar për të mbështetur gjeneratën e dytë të përshtatësve të rrjetit ENAv2 (Elastic Network Adapter) të përdorur në infrastrukturën Elastic Compute Cloud (EC2) për të organizuar komunikimin midis nyjeve EC2 me shpejtësi deri në 25 Gb/s. Shtoi dhe testoi mbështetjen NETMAP për drejtuesin ena dhe rregulloi paraqitjen e memories për të aktivizuar modalitetin LLQ në mjediset Amazon EC2 A1;
  • Aplikacionet dhe sistemi i porteve
    • Komponentët dhe portat e stivës grafike të përditësuara të lidhura me xorg. Portet që përdorin USE_XORG dhe XORG_CAT janë migruar në kornizën USES në vend që të thërrasin bsd.xorg.mk nëpërmjet bsd.port.mk. Porte të tilla tani përfshijnë flamurin "USES=xorg" në skedarët e tyre të makinerisë. Funksionaliteti XORG_CAT është nxjerrë nga bsd.xorg.mk dhe tani është aktivizuar me flamurin "USES=xorg-cat". Mjete të shtuara për gjenerimin e drejtpërdrejtë të porteve xorg nga një depo git
      freedesktop.org, i cili, për shembull, ju lejon të gjeneroni porte për versionet që nuk janë lëshuar ende. Në të ardhmen, është planifikuar të përgatitet një paketë veglash për të përdorur sistemin e ndërtimit të mesonit në vend të veglave automatike për të ndërtuar portat xorg.

      Është bërë punë për të pastruar portat e vjetra xorg të lidhura me komponentë që nuk mbështeten më, si p.sh. heqja e portës x11/libXp dhe zhvlerësimi i porteve x11/Xxf86misc, x11-fonts/libXfontcache dhe grafika/libGLw;

    • Është bërë punë për të përmirësuar mbështetjen për Java 11 dhe versionet më të reja në FreeBSD dhe për të transferuar disa ndryshime në degën Java 8. Meqenëse FreeBSD ka implementuar mbështetje për veçoritë e reja të Java 11 si Java Flight Recorder, HotSpot Serviceability Agent, HotSpot Debugger , DTrace, Javac Server, Java Sound dhe SCTP, puna është zhvendosur për të siguruar që të gjitha testet e përputhshmërisë të kalojnë. Numri i dështimeve gjatë kalimit të testeve është ulur nga 50 në 2;
    • Desktopi i KDE Plasma, KDE Frameworks, Aplikacionet e KDE dhe Qt mbahen të përditësuara dhe përditësohen me versionet më të fundit;
    • Portat me desktopin Xfce të përditësuar për t'u lëshuar 4.14;
    • Pema e porteve FreeBSD ka kaluar momentin historik të 38000 porteve, numri i PR-ve të hapura është pak më shumë se 2000, nga të cilat 400 PR janë ende në pritje. Gjatë periudhës raportuese, janë bërë 7340 ndryshime nga 169 zhvillues. Dy kontribues të rinj (Santhosh Raju dhe Dmitri Goutnik) morën të drejta të kryerësit. Është publikuar një version i ri i menaxherit të paketave pkg 1.12 me mbështetje për mbivendosjet në pemën e porteve dhe pastrimin e bsd.sites.mk. Përditësimet e rëndësishme të versioneve në porte përfshijnë: 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;
    • Zhvillimi i projektit vazhdon ClonOS, duke u zhvilluar një komplet i specializuar shpërndarjeje për vendosjen e një infrastrukture të serverit virtual. Për sa i përket detyrave që duhen zgjidhur, ClonOS ngjan me sisteme të tilla si Proxmox, Triton (Joyent), OpenStack, OpenNebula dhe Amazon AWS, ndryshimi kryesor nga i cili është përdorimi i FreeBSD dhe aftësia për të menaxhuar, vendosur dhe menaxhuar kontejnerët e burgut FreeBSD dhe mjedise virtuale të bazuara në hipervizorë Bhyve dhe Xen. Nga ndryshimet e fundit, ka mbështetje
      cloud-init për Linux/BSD VM dhe cloudbase-init për Windows VM, fillimi i kalimit në imazhet vendase, përdorimi i Jenkins CI për testimin e ndërtimit dhe depoja e re pkg për instalim
      ClonOS nga paketat.

Burimi: opennet.ru

Shto një koment