Izvješće o razvoju projekta FreeBSD od srpnja do rujna 2019. godine. Od promjena možemo istaknuti:
- Opća i sistemska pitanja
- Glavni tim je uopćeno odobrio mogućnost uključivanja koda u sustav koji je izdan pod BSD licencom s dodatnim sporazumom o korištenju patenata (), ali odluka o uključivanju svakog pojedinog komponenta pod ovom licencom mora se odobriti odvojeno;
- Održana je prva sjednica radne skupine stvorene za migraciju izvornog koda iz centraliziranog sustava za upravljanje izvorom Subversion u decentralizirani sustav Git. Rasprava o svrhovitosti migracije još uvijek se nastavlja, a mnoga pitanja još uvijek trebaju rješenja (na primjer, kako postupiti s contrib/, treba li regenerirati hash-e u trenutnom git repozitoriju i kako najbolje realizirati testiranje commit-a);
- Iz NetBSD-a alatu KCSAN (Kernel Concurrency Sanitizer) koji omogućuje otkrivanje stanja utrke između niti jezgre koje se izvode na različitim CPU-ima;
- Radi se na korištenju ugrađenog assemblera u Clangu (IAS) umjesto assemblera iz GNU binutils;
- Infrastruktura emulatora Linux okruženja (Linuxulator) prilagođena je za rad na ARM64 arhitekturi. Implementiran je sistemski poziv „renameat2“. Alat strace je dopunjen za dijagnosticiranje problema u izvršnim datotekama Linuxa koje se pokreću u Linuxulatoru. Riješen je problem s pojavom grešaka prilikom povezivanja izvršnih datoteka s novim glibc-om. Portovi s Linux komponentama za Linuxulator ažurirani su na CentOS 7.7;
- U okviru programa Google Summer of Code, studenti su uspješno izveli šest projekata: pripremljena je implementacija jedinstvenog (IPv4/IPv6) alata ping, razvijeni su alati za testiranje vatrozida i otkrivanje grešaka u jezgru (Kernel sanitizer), predložen je modul mac_ipacl, napisan je kod za kompresiju virtualne memorije i obavljena je izrada procesa građenja portova od lokalne instalacije;
- Projekt fuzzing testiranja jezgre FreeBSD nastavlja se s upotrebom sustava . Tijekom izvještajnog razdoblja, uz pomoć syzkallera, otkriveno je i otklonjeno više od deset grešaka. Za pokretanje syzkallera u virtualnim strojevima na bazi bhyve dodijeljen je poseban poslužitelj, a pomoću
Syzbot je uspostavio provjeru različitih subsustava FreeBSD unutar Googleove infrastrukture. Organizirano je slanje informacija o svim kvarovima u servis backtrace.io radi lakšeg grupiranja i analize; - Rad na ažuriranju implementacije zlib na razini jezgre je u tijeku.
Kod povezan sa kompresijom je prebačen iz zlib 1.0.4, izdanog prije više od 20 godina, na aktuelnu verziju zlib 1.2.11. Kako bi se standardizirao pristup zlib, u jezgru su dodane funkcije compress, compress2 i uncompress. Kod koji omogućava rad protokola PPP iz subsustava netgraph je prebačen na korištenje sistemske implementacije zlib, umjesto vlastite verzije ove biblioteke. Subsustave kern_ctf.c, opencryptodeflate, geom_uzip, subr_compressor su također prebačene na novi zlib,
if_mxge, bxe updated i ng_deflate; - Razvija se novi интерфейс jezgre , koji omogućava pronalaženje elemenata u bazi parametara sysctl, obrađivane u obliku MIB (Management Information Base), i prenošenje informacija o objektima u prostor korisnika.
- Sigurnost
- Razvijen je modul jezgre , temeljen na TrustedBSD MAC Frameworku, koji implementira sustav upravljanja pristupom postavkama mrežnog staka za jail okruženja. Na primjer, pomoću mac_ipacl, administrator host sustava može zabraniti korisniku root u jail okruženju da mijenja ili postavlja IP adrese ili parametre podmreža za određene mrežne sučelje. Predloženi sustav mandatorne kontrole pristupa može postavljati popise IP adresa i podmreža, dopuštenih za jail, zabraniti postavljanje određenih IP adresa i podmreža u jail ili ograničiti promjenu parametara samo za određena mrežna sučelja;
- Tvrtka Intel je predala projektu port programske hrpe (Trusted Platform Module) za interakciju s čipom za sigurne izračune, koji se obično koristi za verifikovano pokretanje firmwarea i pokretača operativnog sustava. Komponente stoga predstavljaju portove security/tpm2-tss, security/tpm2-tools i security/tpm2-abrmd. Port tpm2-tss uključuje biblioteke za korištenje TPM2 API-a, tpm2-tools pruža komandne alate za izvršavanje operacija s TPM-om, dok tpm2-abrmd sadrži pozadinski proces s implementacijom komponenata TPM Access Broker i Resource Manager, koji multiplexiraju zahtjeve od različitih korisnika TPM-a prema jednom uređaju. Osim verifikovanog pokretanja, u FreeBSD TPM može poslužiti za povećanje sigurnosti Strongswan IPsec, SSH i TLS putem izvršavanja kriptografskih operacija na zasebnom čipu;
- Kernel za amd64 arhitekturu prilagođen je za pokretanje korištenjem tehnike zaštite W^X (write XOR execute), što podrazumijeva da stranice memorije ne mogu biti istovremeno dostupne za pisanje i izvršavanje (kernel sada može biti pokrenut s korištenjem izvršnih stranica memorije za koje je pisanje zabranjeno). Nova metoda zaštite kernela uključena je u granu HEAD i bit će dio izdanja FreeBSD 13.0 i 12.2;
- Za sistemske pozive mmap i mprotect makro PROT_MAX(), koji omogućava određivanje dopuštenog skupa oznaka ograničenja pristupa (PROT_READ, PROT_WRITE, PROT_EXEC) prilikom daljnjih izmjena. Pomoću PROT_MAX() programer može zabraniti promjenu područja memorije u izvršno ili zatražiti memoriju koja ne dopušta izvršavanje, ali se može kasnije prebaciti u izvršnu. Na primjer, područje memorije može biti otvoreno za pisanje samo tijekom dinamičkog povezivanja ili generiranja JIT koda, ali nakon završetka pisanja ograničeno je samo na čitanje i izvršavanje, a u slučaju kompromitacije, napadač neće moći omogućenje pisanja za taj blok memorije. Pored PROT_MAX() također je implementiran sysctl vm.imply_prot_max, čijim aktiviranjem skup dopuštenih oznaka određuje se na temelju izvornih parametara prvog poziva mmap;
- Kako bi se povećala zaštita od iskorištavanja ranjivosti, osim tehnike slučajnog raspoređivanja adresa prostora (ASLR), predložen je mehanizam slučajnog raspoređivanja pomaka pokazivača, koji upućuje na početni okvir stoga i strukture s informacijama o okruženju, parametrima pokretanja programa i podacima za izvršne slike u ELF formatu;
- Obavljen je rad na uklanjanju nesigurne funkcije gets iz libc (od standarda C11 ova funkcija je isključena iz specifikacije) i ispravci portova koji još koriste ovu funkciju. Promjena se planira predložiti u FreeBSD 13.0;
- Pokrenut je eksperimentalni projekt za razvijanje sredstava orkestracije jail-okruženja temeljenih na okviru , za izradu i eksportiranje slika, implementiranog po analogiji s Dockerom, i drajvera , koji pruža sučelje za dinamičko pokretanje aplikacija u jail-okruženju. Predloženi model omogućuje odvajanje procesa stvaranja jail-okruženja i raspoređivanja aplikacija u njima. Jedan od ciljeva projekta je pružiti sredstvo za manipulaciju jail-ima kao kontejnerima u stilu Dockera;
- Sustavi pohrane i datotečni sustavi
- Iz NetBSD u utilitu „makefs“ podrška za datotečni sustav FAT (msdosfs). Pripremljene promjene omogućuju izradu slika FS s FAT-om bez korištenja drajvera md i bez privilegija root;
- Završena je izmjena drajvera podsustava FUSE (File system in USErspace), koji omogućuje kreiranje implementacija datotečnih sustava u prostoru korisnika. Izvorno isporučeni drajver imao je mnogo grešaka i bio je temeljen na verziji FUSE 7.8, izdanoj prije 11 godina. U okviru projekta modernizacije drajvera implementirana je podrška za protokol FUSE 7.23, dodan je kod za provjeru prava pristupa na strani jezgre („-o default_permissions“), dodani su pozivi VOP_MKNOD, VOP_BMAP i VOP_ADVLOCK, osigurana je mogućnost prekidanja FUSE operacija, dodana je podrška za nenamednene kanale i unix-sokete u fusefs, omogućeno je korištenje kqueue za \/dev\/fuse, dopušteno je ažuriranje montažnih parametara putem „mount -u“, dodana je podrška za izvoz fusefs preko NFS, implementirano je praćenje RLIMIT_FSIZE, dodane su oznake FOPEN_KEEP_CACHE i FUSE_ASYNC_READ, izvršene su značajne optimizacije performansi i unaprijeđena je organizacija keširanja. Novi drajver uključen je u grane head i stable\/12 (ušao je u sastav FreeBSD 12.1);
- Rad na implementaciji NFSv4.2 (RFC-7862) za FreeBSD je skoro završен. U izvještajnom razdoblju fokus je bio na testiranju. Testovi su završeni za provjeru kompatibilnosti s implementacijom iz Linuxa, ali još uvijek se provjerava rad pNFS servera s NFSv4.2. U globalnom smislu, kod se već smatra spremnim za integraciju u grane FreeBSD head/current. Nova verzija NFS dodaje podršku za funkcije posix_fadvise, posix_fallocate, režime SEEKHOLE/SEEKDATA u lseek, i operacije lokalnog kopiranja dijelova datoteka na serveru (bez prijenosa klijentu);
- Podrška za hardver
- Pokrenut je projekt za poboljšanje rada FreeBSD na prijenosnicima. Prvi uređaj za koji je proveden audita podrške hardvera u FreeBSD je prijenosnik Lenovo X1 Carbon sedme generacije;
- CheriBSD, grana iz FreeBSD za istraživačku procesorsku arhitekturu (Capability Hardware Enhanced RISC Instructions), ažurirano za podršku nadolazećem ARM Morello procesoru, koji će podržavati sustav upravljanja pristupom memoriji CHERI temeljen na zaštitnom modelu projekta Capsicum. Čip Morello treba biti pušten 2021. godine. Razvijači CheriBSD također nastavljaju pratiti razvoj referentnog prototipa CHERI temeljenog na MIPS arhitekturi;
- Proširena podrška za RockChip RK3399 čipove, korištene na RockPro64 i NanoPC-T4 pločama. Najznačajnije poboljšanje bila je podrška za eMMC i razvoj novog drajvera za upravljač eMMC korišten u ploči;
- Nastavljen je rad na podršci za ARM64 SoC Broadcom BCM5871X s ARMv8 Cortex-A57 procesorima, koji su namijenjeni za korištenje u usmjerivačima, prolazima i mrežnim pohranjivačima. U izvještajnom razdoblju
proširena je podrška za iProc PCIe i dodana mogućnost korištenja hardverskih kriptografskih operacija za ubrzavanje rada IPsec.
Integracija koda u HEAD granu očekuje se u četvrtom kvartalu; - Značajni napredak zabilježen je u razvoju FreeBSD porta za powerpc64 platformu. Fokus je na osiguravanju kvalitetnog rada na sustavima s IBM POWER8 i POWER9 procesorima, ali opcionalno se podržava rad i na starijim Apple Power Mac, x500 i Amiga A1222. powerpc*/12 grana i dalje se isporučuje s gcc 4.2.1, dok će powerpc*/13 grana uskoro biti prebačena na llvm90. Od 33306 portova, uspješno se gradi 30514;
- Nastavljeno portiranje FreeBSD za 64-bitni SoC NXP LS1046A temeljen na procesoru ARMv8 Cortex-A72 s integriranim motorom za ubrzanje obrade mrežnih paketa, 10 Gb Ethernet, PCIe 3.0, SATA 3.0 i USB 3.0. Tijekom izvještajnog razdoblja implementirana je podrška za USB 3.0, SD/MMC, I2C, mrežni sučelje DPAA i GPIO. U planu je podrška za QSPI i optimizacija performansi mrežnog sučelja. Završetak rada i uključivanje u HEAD granu očekuje se u 4. kvartalu 2019. godine;
- Ažuriran je driver ena s podrškom za drugu generaciju mrežnih adaptera ENAv2 (Elastic Network Adapter), koji se koriste u infrastrukturi Elastic Compute Cloud (EC2) za organizaciju veze između EC2 čvorova brzinama do 25 Gb/s. U driver ena dodana je i testirana podrška za NETMAP, kao i adaptacija rasporeda memorije za uključivanje LLQ načina u Amazon EC2 A1 okruženjima;
- Aplikacije i sustav portova
- Ažurirane su komponente grafičkog stoga i portovi povezani s xorg. Portovi koji koriste USE_XORG i XORG_CAT prebačeni su na USES framework umjesto pozivanja bsd.xorg.mk putem bsd.port.mk. Takvi portovi sada uključuju flag „USES=xorg“ u make datotekama. Funkcionalnost XORG_CAT izdvojena je iz bsd.xorg.mk i sada se aktivira flagom „USES=xorg-cat“. Dodana su sredstva za direktno oblikovanje xorg portova iz git repozitorija freedesktop.org, što, na primjer, omogućava oblikovanje portova za još neobjavljene verzije. U budućnosti se planira pripremiti sredstva za korištenje sustava za izgradnju meson umjesto autotools za izgradnju xorg portova.
Obavljen je rad na čišćenju starih xorg portova vezanih uz već nepodržavane komponente, kao što je uklonjen port x11/libXp, dok su portovi x11/Xxf86misc, x11-fonts/libXfontcache i graphics/libGLw prebačeni u razred zastarjelih;Obavljen je rad na poboljšanju podrške za Java 11 i novije verzije u FreeBSD, kao i na portiranju nekih promjena u Java 8 granu. Nakon što je za FreeBSD implementirana podrška za nove funkcije Java 11, kao što su Java Flight Recorder, HotSpot Serviceability Agent, HotSpot Debugger, DTrace, Javac Server, Java Sound i SCTP, rad se preusmjerio na osiguranje prolaženja svih kompatibilnih testova. Broj neuspjeha prilikom prolaska testova smanjen je s 50 na 2;
- Radna površina KDE Plasma, KDE Frameworks, KDE Applications i Qt održavaju se ažurnima i ažuriraju na najnovija izdanja;
- Portovi s radnom površinom Xfce ažurirani su na najnovije izdanje
- Порты с рабочим столом Xfce обновлены до выпуск ;
- Drvo paketa FreeBSD prešlo je prag od 38000 paketa, broj nepropuštenih PR-ova lagano nadilazi 2000, od kojih je 400 PR-ova još uvijek nerazjašnjeno. Tijekom izvještajnog razdoblja uneseno je 7340 promjena od 169 developera. Dva nova člana (Santhosh Raju i Dmitri Goutnik) dobila su prava commitera. Objavljeno je novo izdanje paketnog menadžera pkg 1.12 s podrškom za overlay u drvetu paketa i pročišćavanjem bsd.sites.mk. Među značajnim ažuriranjima verzija u paketima nalaze se: Lazarus 2.0.4, LLVM 9.0, Perl 5.30, PostgreSQL 11, Ruby 2.6, Firefox 69.0.1, Firefox-esr 68.1.0, Chromium 76.0;
- Razvoj projekta se nastavlja , je specijalizirani distribucijski paket za postavljanje infrastrukture virtualnih servera. Po rješavanju zadataka, ClonOS podsjeća na sustave poput Proxmox, Triton (Joyent), OpenStack, OpenNebula i Amazon AWS, a glavna razlika je korištenje FreeBSD-a i mogućnost upravljanja, postavljanja i upravljanja Jail-kontejnerima FreeBSD i virtualnim okruženjima temeljenim na hipervizorima Bhyve i Xen. Od nedavnih promjena ističe se podrška
cloud-init za Linux/BSD VM i cloudbase-init za Windows VM, početak prelaska na korištenje vlastitih slika, uključivanje Jenkins CI za testiranje gradnji i novi pkg-repozitorij za instalaciju
ClonOS iz paketa.
- Ažurirane su komponente grafičkog stoga i portovi povezani s xorg. Portovi koji koriste USE_XORG i XORG_CAT prebačeni su na USES framework umjesto pozivanja bsd.xorg.mk putem bsd.port.mk. Takvi portovi sada uključuju flag „USES=xorg“ u make datotekama. Funkcionalnost XORG_CAT izdvojena je iz bsd.xorg.mk i sada se aktivira flagom „USES=xorg-cat“. Dodana su sredstva za direktno oblikovanje xorg portova iz git repozitorija freedesktop.org, što, na primjer, omogućava oblikovanje portova za još neobjavljene verzije. U budućnosti se planira pripremiti sredstva za korištenje sustava za izgradnju meson umjesto autotools za izgradnju xorg portova.
Izvor: opennet.ru
