Raport o rozwoju projektu FreeBSD od lipca do września 2019 roku. Z uwagą można zauważyć zmiany:
- Ogólne i systemowe pytania
- Zespół core w ogólnym zarysie zatwierdził możliwość włączenia do systemu kodu dostarczanego na zasadach licencji BSD z dodatkową umową o wykorzystaniu patentów (), ale decyzja o włączeniu do systemu każdego komponentu na tej licencji musi być zatwierdzana osobno;
- Odbyło się pierwsze posiedzenie grupy roboczej, stworzonej w celu przeprowadzenia migracji źródeł z centralnego systemu zarządzania wersjami Subversion do zdecentralizowanego systemu Git. Dyskusja na temat celowości migracji wciąż trwa, a wiele kwestii wymaga jeszcze podjęcia decyzji (na przykład, co zrobić z contrib/, czy należy regenerować hashe w obecnym repozytorium git i jak najlepiej zrealizować testowanie commitów);
- Z NetBSD narzędzie KCSAN (Kernel Concurrency Sanitizer), pozwalające na identyfikację stanów wyścigu między wątkami jądra działającymi na różnych CPU;
- Trwają prace nad wykorzystaniem wbudowanego w Clang assemblera (IAS) zamiast assemblera z GNU binutils;
- Infrastruktura emulacji środowiska Linux (Linuxulator) została dostosowana do pracy w architekturze ARM64. Zrealizowano wywołanie systemowe „renameat2“. Narzędzie strace zostało poprawione do diagnostyki problemów w plikach wykonywalnych Linux, uruchamianych w Linuxulator. Rozwiązano problem związany z występowaniem awarii podczas linkowania plików wykonywalnych z nowym glibc. Porty z komponentami Linux dla Linuxulator zostały zaktualizowane do CentOS 7.7;
- W ramach programu Google Summer of Code studenci pomyślnie zrealizowali sześć projektów: przygotowano implementację zintegrowanego narzędzia ping (IPv4/IPv6), opracowano narzędzia do testowania zapór sieciowych i identyfikacji błędów w jądrze (Kernel sanitizer), zaproponowano moduł mac_ipacl, napisano kod do kompresji pamięci wirtualnej oraz przeprowadzono prace nad oddzieleniem procesu budowy portów od lokalnej instalacji;
- Projekt fuzzing-testowania jądra FreeBSD z wykorzystaniem systemu . W sprawozdawanym okresie przy pomocy syzkaller zidentyfikowano i usunięto ponad dziesięć błędów. Utworzono oddzielny serwer do uruchamiania syzkaller w maszynach wirtualnych opartych na bhyve, a za pomocą
W infrastrukturze Google została uruchomiona kontrola różnych podsystemów FreeBSD. Zorganizowano przesyłanie informacji o wszystkich awariach do serwisu backtrace.io w celu uproszczenia ich grupowania i analizy; - Trwa praca nad aktualizacją implementacji zlib na poziomie jądra.
Kod związany ze sprężaniem został przetłumaczony z zlib 1.0.4, wydanego ponad 20 lat temu, na aktualną bazę kodu zlib 1.2.11. Aby ujednolicić dostęp do zlib, do jądra dodano funkcje compress, compress2 i uncompress. Kod odpowiedzialny za działanie protokołu PPP z podsystemu netgraph został przetłumaczony na użycie systemowej implementacji zlib, zamiast własnej wersji tej biblioteki. Na nowy zlib również przetłumaczono podsystemy kern_ctf.c, opencryptodeflate, geom_uzip, subr_compressor,
if_mxge, bxe updated i ng_deflate; - Rozwija się nowy interfejs jądra , umożliwiający znajdowanie elementów w bazie parametrów sysctl, przetwarzanej w formie MIB (Management Information Base), oraz przesyłanie informacji o obiektach do przestrzeni użytkownika.
- Bezpieczeństwo
- Opracowano moduł jądra , oparty na TrustedBSD MAC Framework i realizujący system zarządzania dostępem do ustawień stosu sieciowego dla środowisk jail. Na przykład, za pomocą mac_ipacl administrator systemu gospodarza może zabronić użytkownikowi root w środowisku jail zmiany lub ustalania adresów IP lub parametrów podsieci dla określonych interfejsów sieciowych. Proponowany system mandom tego zarządzania dostępem umożliwia definiowanie list adresów IP i podsieci dozwolonych dla Jail, zakazywanie ustanawiania określonych adresów IP i podsieci w Jail lub ograniczanie zmiany parametrów tylko dla określonych interfejsów sieciowych;
- Firma Intel przekazała projektowi port stosu oprogramowania (Trusted Platform Module) do interakcji z chipem do bezpiecznych obliczeń, który zazwyczaj stosowany jest do weryfikowanego ładowania firmware i bootloadera systemu operacyjnego. Komponenty stosu są dostępne w postaci portów security/tpm2-tss, security/tpm2-tools i security/tpm2-abrmd. Port tpm2-tss zawiera biblioteki do użycia API TPM2, tpm2-tools dostarcza narzędzia wiersza poleceń do wykonywania operacji z TPM, a tpm2-abrmd zawiera proces w tle z implementacją komponentów TPM Access Broker i Resource Manager, multiplexujących zapytania od różnych użytkowników TPM do jednego urządzenia. Oprócz weryfikowanego ładowania, w FreeBSD TPM może być wykorzystywany do zwiększenia bezpieczeństwa Strongswan IPsec, SSH i TLS poprzez wykonywanie operacji kryptograficznych na osobnym chipie;
- Jądro dla architektury amd64 zostało dostosowane do uruchamiania z zastosowaniem techniki ochrony W^X (write XOR execute), co oznacza, że strony pamięci nie mogą być jednocześnie dostępne do zapisu i wykonywania (jądro może teraz ładować się przy użyciu wykonywalnych stron pamięci, dla których zapis jest zabroniony). Nowa metoda ochrony jądra została włączona do gałęzi HEAD i wejdzie w skład wersji FreeBSD 13.0 oraz 12.2;
- Dla wywołań systemowych mmap i mprotect makro PROT_MAX(), które pozwala określić dozwolony w przypadku dalszych zmian zestaw flag ograniczenia dostępu (PROT_READ, PROT_WRITE, PROT_EXEC). Przy pomocy PROT_MAX() programista może zabronić przypisania obszaru pamięci do kategorii wykonywalnej lub zażądać pamięci, która nie dopuszcza wykonywania, ale później może być przekształcona w wykonywalne. Na przykład, obszar pamięci może być otwarty do zapisu tylko na czas dynamicznego wiązania lub generowania kodu JIT, ale po zakończeniu zapisu może być ograniczony tylko do odczytu i wykonywania, a w przypadku kompromitacji, atakujący nie będzie mógł zezwolić na zapis dla danego bloku pamięci. Oprócz PROT_MAX() zrealizowano również sysctl vm.imply_prot_max, przy aktywacji którego zbiór dozwolonych flag jest określany na podstawie początkowych parametrów pierwszego wywołania mmap;
- Aby wzmocnić ochronę przed wykorzystaniem luk, oprócz techniki losowej alokacji adresów (ASLR) zaproponowano mechanizm losowania przesunięć wskaźników, które adresują początkową klatkę stosu oraz struktury z informacjami o środowisku, parametrach uruchamiania programu i danych dla wykonywanych obrazów w formacie ELF;
- Przeprowadzono prace nad usunięciem niebezpiecznej funkcji gets z libcu (od standardu C11 funkcja ta została wykluczona ze specyfikacji) oraz dostosowaniem portów, które jeszcze używają tej funkcji. Zmiana planowana jest do zaproponowania w FreeBSD 13.0;
- Uruchomiono eksperymentalny projekt dotyczący tworzenia narzędzi do orkiestracji środowisk jail opartych na frameworku , do tworzenia i eksportowania obrazów, zrealizowanego na podobieństwo Dockera, oraz sterownika , który zapewnia interfejs do dynamicznego uruchamiania aplikacji w środowisku jail. Proponowany model pozwala rozdzielić procesy tworzenia środowisk jail i wdrażania w nich aplikacji. Jednym z celów projektu jest dostarczenie narzędzia do manipulacji jailami jako kontenerami w stylu Dockera;
- Systemy przechowywania i systemy plików
- Z NetBSD do narzędzia „makefs” wsparcie dla systemu plików FAT (msdosfs). Przygotowane zmiany pozwalają tworzyć obrazy systemu plików FAT bez użycia sterownika md i bez uprawnień roota;
- Zakończono prace nad przeprojektowaniem sterownika podsystemu FUSE (File system in USErspace), który umożliwia tworzenie implementacji systemów plików w przestrzeni użytkownika. Pierwotnie dostarczany sterownik zawierał wiele błędów i był oparty na wersji FUSE 7.8 wydanej 11 lat temu. W ramach projektu modernizacji sterownika zrealizowano wsparcie dla protokołu FUSE 7.23 dodano kod do sprawdzania uprawnień po stronie jądra („-o default_permissions”), dodano wywołania VOP_MKNOD, VOP_BMAP i VOP_ADVLOCK, zapewniono możliwość przerywania operacji FUSE, dodano wsparcie dla anonimizowanych kanałów i gniazd unixowych w fusefs, pojawiła się możliwość użycia kqueue dla /dev/fuse, zezwolono na aktualizację parametrów montowania za pomocą „mount -u”, dodano wsparcie dla eksportu fusefs przez NFS, zrealizowano uwzględnienie RLIMIT_FSIZE, dodano flagi FOPEN_KEEP_CACHE i FUSE_ASYNC_READ, wprowadzono istotne optymalizacje wydajności i poprawiono organizację pamięci podręcznej. Nowy sterownik został uwzględniony w gałęziach head i stable/12 (wniósł wkład w skład FreeBSD 12.1);
- Prace nad realizacją NFSv4.2 (RFC-7862) dla FreeBSD są niemal zakończone. W okresie sprawozdawczym głównie skupiono się na testowaniu. Ukończono testy weryfikujące zgodność z implementacją z systemu Linux, jednak wciąż trwa weryfikacja działania serwera pNFS z NFSv4.2. W ogólnym zarysie kod jest już uznawany za gotowy do integracji z gałęziami FreeBSD head/current. W nowej wersji NFS dodano wsparcie dla funkcji posix_fadvise, posix_fallocate, trybów SEEKHOLE/SEEKDATA w lseek oraz operacji lokalnego kopiowania części pliku na serwerze (bez przesyłania do klienta);
- Wsparcie sprzętowe
- Rozpoczęto projekt mający na celu poprawę działania FreeBSD na laptopach. Pierwszym urządzeniem, dla którego przeprowadzono audyt wsparcia sprzętowego w FreeBSD, był laptop Lenovo X1 Carbon kolejnej, siódmej generacji;
- CheriBSD, rozwidlenie od FreeBSD dla architektury procesorowej do badań (Capability Hardware Enhanced RISC Instructions), zaktualizowano w celu wsparcia nadchodzącego procesora ARM Morello, który będzie obsługiwał system zarządzania dostępem do pamięci CHERI, oparty na modelu ochrony projektu Capsicum. Chip Morello zostanie wydany w 2021 roku. Deweloperzy CheriBSD nadal śledzą rozwój referencyjnego prototypu CHERI bazującego na architekturze MIPS;
- Rozszerzono wsparcie dla chipów RockChip RK3399, używanych w płytach RockPro64 i NanoPC-T4. Największą poprawą było wsparcie dla eMMC i opracowanie nowego sterownika dla kontrolera eMMC używanego na płycie;
- Kontynuowane są prace nad wsparciem ARM64 SoC Broadcom BCM5871X z procesorami ARMv8 Cortex-A57, przeznaczonymi do użycia w routerach, bramkach i sieciowych magazynach danych. W okresie sprawozdawczym
rozszerzono wsparcie dla iProc PCIe oraz dodano możliwość wykorzystania operacji kryptograficznych w sprzęcie do przyspieszenia pracy IPsec.
Integracja kodu do gałęzi HEAD oczekiwana jest w czwartym kwartale; - Osiągnięto znaczące postępy w opracowywaniu portu FreeBSD dla platformy powerpc64. Główna uwaga skupia się na zapewnieniu wysokiej jakości działania na systemach z procesorami IBM POWER8 i POWER9, z opcjonalnym wsparciem dla starszych komputerów Apple Power Mac, x500 i Amiga A1222. Gałąź powerpc*/12 wciąż jest dostarczana z gcc 4.2.1, podczas gdy gałąź powerpc*/13 wkrótce przejdzie na llvm90. Z 33306 portów pomyślnie zbudowano 30514;
- Kontynuacja portowania FreeBSD dla 64-bitowego SoC NXP LS1046A opartego na procesorze ARMv8 Cortex-A72 z wbudowanym mechanizmem przyspieszania przetwarzania pakietów sieciowych, 10 Gb Ethernet, PCIe 3.0, SATA 3.0 i USB 3.0. W okresie sprawozdawczym wdrożono wsparcie dla USB 3.0, SD/MMC, I2C, interfejsu sieciowego DPAA oraz GPIO. W planach wsparcie dla QSPI oraz optymalizacja wydajności interfejsu sieciowego. Zakończenie prac i włączenie do gałęzi HEAD planowane jest na IV kwartał 2019 roku;
- Zaktualizowano sterownik ena z obsługą drugiej generacji adapterów sieciowych ENAv2 (Elastic Network Adapter), używanych w infrastrukturze Elastic Compute Cloud (EC2) do organizacji komunikacji między węzłami EC2 z prędkościami do 25 Gb/s. W sterowniku ena dodano i przetestowano wsparcie dla NETMAP, a także przeprowadzono adaptację układu pamięci w celu włączenia trybu LLQ w środowiskach Amazon EC2 A1;
- Aplikacje i system portów
- Zaktualizowane komponenty stosu graficznego i porty związane z xorg. Porty korzystające z USE_XORG i XORG_CAT zostały przeniesione do frameworka USES zamiast wywoływania bsd.xorg.mk przez bsd.port.mk. Takie porty teraz zawierają flagę „USES=xorg” w plikach make. Funkcjonalność XORG_CAT została wyodrębniona z bsd.xorg.mk i teraz aktywuje się flagą „USES=xorg-cat”. Dodano narzędzia do bezpośredniego tworzenia portów xorg z repozytorium git;
freedesktop.org, co na przykład umożliwia tworzenie portów dla jeszcze nie wydanych wersji. W przyszłości planowane jest przygotowanie narzędzi do wykorzystania systemu budowy meson zamiast autotools do budowy portów xorg.Zrealizowano prace nad oczyszczeniem starych portów xorg, powiązanych z już nieobsługiwanymi komponentami, na przykład usunięto port x11/libXp, a porty x11/Xxf86misc, x11-fonts/libXfontcache oraz graphics/libGLw zostały przeklasyfikowane jako przestarzałe;
- Zrealizowano prace nad poprawą wsparcia dla Java 11 i nowszych wydań w FreeBSD, a także nad portowaniem niektórych zmian do gałęzi Java 8. Po wprowadzeniu wsparcia dla takich nowych funkcji Java 11 jak Java Flight Recorder, HotSpot Serviceability Agent, HotSpot Debugger, DTrace, Javac Server, Java Sound oraz SCTP, prace skoncentrowano na zapewnieniu pełnej zgodności testów. Liczba niepowodzeń podczas testów zmniejszyła się z 50 do 2;
- Pulpit KDE Plasma, KDE Frameworks, KDE Applications oraz Qt są aktualizowane i podtrzymywane na najnowszych wydaniach;
- Porty z pulpitem Xfce zostały zaktualizowane do wydań ;
- Drzewo portów FreeBSD przekroczyło granicę 38000 portów, liczba otwartych PR nieznacznie przekracza 2000, z czego 400 PR nie zostało jeszcze rozpatrzonych. W ciągu tego okresu wprowadzono 7340 zmian od 169 deweloperów. Dwa nowe osoby (Santhosh Raju i Dmitri Goutnik) otrzymały prawa committerskie. Opublikowano nową wersję menedżera pakietów pkg 1.12 z obsługą overlay w drzewie portów i usunięciem bsd.sites.mk. Wśród istotnych aktualizacji wersji w portach wymienia się: 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;
- Rozwój projektu trwa , specjalizowany dystrybucja do wdrażania infrastruktury wirtualnych serwerów. Jeśli chodzi o rozwiązywane zadania, ClonOS przypomina takie systemy jak Proxmox, Triton (Joyent), OpenStack, OpenNebula i Amazon AWS, główną różnicą jest wykorzystanie FreeBSD oraz możliwość zarządzania, wdrażania i administrowania kontenerami Jail FreeBSD oraz środowiskami wirtualnymi opartymi na hypervisorach Bhyve i Xen. Wśród ostatnich zmian zauważono wsparcie
cloud-init dla VM Linux/BSD i cloudbase-init dla VM Windows, rozpoczęcie przejścia na wykorzystanie własnych obrazów, zaangażowanie Jenkins CI do testowania kompilacji oraz nowy repozytorium pkg do instalacji
ClonOS z pakietów.
- Zaktualizowane komponenty stosu graficznego i porty związane z xorg. Porty korzystające z USE_XORG i XORG_CAT zostały przeniesione do frameworka USES zamiast wywoływania bsd.xorg.mk przez bsd.port.mk. Takie porty teraz zawierają flagę „USES=xorg” w plikach make. Funkcjonalność XORG_CAT została wyodrębniona z bsd.xorg.mk i teraz aktywuje się flagą „USES=xorg-cat”. Dodano narzędzia do bezpośredniego tworzenia portów xorg z repozytorium git;
Źródło: opennet.ru
