Wydanie jądra Linux 6.19. Następne jądro otrzyma numer 7.0

Po dwóch miesiącach prac Linus Torvalds zaprezentował wydanie jądra Linux 6.19. Wśród najbardziej zauważalnych zmian znajdują się: podsystem Live Update Orchestrator, wsparcie dla PCIe Link Encryption, wywołanie systemowe listns, tryb Zero-Copy Receive w io_uring, wsparcie dla rozszerzenia ARM MPAM, klp-build do generowania poprawek na żywo, wsparcie dla architektury LoongArch32, QoS dla s2idle, optymalizacja podsystemu audytu, Intel LASS do ochrony przed Spectre, wsparcie dla hashy SHA-3 i BLAKE2b, mechanizm Confidential VMBus, optymalizacje TX w podsystemie sieciowym oraz protokół CAN XL, API do sprzętowego przyspieszenia wyjścia HDR.

W zapowiedzi nowej wersji Linus ogłosił, że następnemu wydaniu jądra zostanie nadany numer 7.0, ponieważ w gałęzi 6.x zgromadziło się wystarczająco dużo wydań, aby zmienić pierwszą cyfrę w numerze wersji (wydanie 6.0 powstało po 5.19). Zmiana numeracji odbywa się ze względów estetycznych i jest formalnym krokiem, który eliminuje dyskomfort związany z dużą liczbą wydań w serii. Linus żartował, że mylą go duże liczby, na które brakuje mu palców u rąk i nóg. Jednocześnie formalnie istnieje powód do znacznej zmiany numeru wersji, ponieważ począwszy od następnego wydania zdecydowano się przekształcić wsparcie dla Rust z eksperymentalnego w podstawowe możliwości jądra.

Do nowej wersji wprowadzono 15657 poprawek od 2237 rozwijających, rozmiar łatki wynosi 52 MB (zmiany obejmowały 13682 plików, dodano 794649 linii kodu, usunięto 335498 linii). W poprzednim wydaniu wprowadzono 15035 poprawek od 2217 rozwijających, rozmiar łatki wynosił 45 MB. Około 40% wszystkich przedstawionych zmian w 6.19 dotyczy sterowników urządzeń, około 13% zmian ma związek z aktualizacją kodu specyficznego dla architektur sprzętowych, 12% dotyczy stosu sieciowego, 5% z systemów plików, a 3% z wewnętrznych podsystemów jądra.

Główne nowości w jądrze 6.19 (1, 2, 3):

  • Podsystem dyskowy, wejście/wyjście i systemy plików
    • W systemie Btrfs procesy sprawdzania systemu plików (scrub) i wymiany urządzeń nie blokują już przejścia systemu w tryb uśpienia (przed uśpieniem zapisywane jest stanie sprawdzania scrub; po wznowieniu systemu sprawdzanie scrub jest kontynuowane, a operacja wymiany urządzeń jest uruchamiana ponownie). Do realizacji RAID56 dodano wsparcie dla bloków, których rozmiar przekracza rozmiar strony pamięci. Przygotowano wprowadzenie wsparcia dla fscrypt. Zwiększona została wydajność operacji z blokadami podczas wykonywania działań związanych z rezerwacją miejsca. Dodano wsparcie dla operacji ioctl „shutdown”, umożliwiającej przejście systemu plików w stan, w którym podejmowana jest próba zakończenia już uruchomionych operacji, zablokowano jednak wszystkie nowe operacje.
    • W systemie plików Ext4 wprowadzono wsparcie dla bloków, których rozmiar przekracza rozmiar strony pamięci (>4KB w systemach x86). Użycie dużych bloków pozwala zwiększyć wydajność buforowanych operacji zapisu średnio o 50%, ale zmniejsza wydajność bezpośredniego wejścia/wyjścia z powodu wydłużenia czasu obliczania sum kontrolnych. W nowej wersji dodano także optymalizacje, które zwiększyły przepustowość podczas wykonywania online-defragmentacji.
    • W podsystemie FUSE poprawiono wsparcie dla buforowanego odczytu przy użyciu dużych foliów pamięci (large folios). Poprzez iomap wprowadzono możliwość śledzenia częściowo aktualnych foliów w celu załadowania tylko danych, które brakują w buforze.
    • W VFS dodano wsparcie dla odwoływalnego delegowania zarządzania katalogiem (recallable directory delegation), które umożliwia wdrożenie w NFS przekazania zarządzania katalogiem z serwera klienta, aby klient NFS bez kontaktów z serwerem NFS mógł samodzielnie śledzić stan katalogu na podstawie lokalnej pamięci podręcznej. Jeśli inny klient NFS dokona zmian związanych z tym katalogiem, delegowanie zarządzania zostanie cofnięte dla pierwszego klienta.
    • Dodano wsparcie dla NFS do czytania w trybie bezpośredniego wejścia/wyjścia (direct I/O). Zrealizowano ustawienia /sys/kernel/debug/nfsd/io_cache_read i /sys/kernel/debug/nfsd/io_cache_write do zarządzania włączeniem buforowania i operacji bezpośredniego wejścia/wyjścia, manipulacja tymi ustawieniami pozwala na zmniejszenie narzutów po stronie klienta NFS podczas wykonywania dużych operacji wejścia/wyjścia.
    • W NTFS zaimplementowano wsparcie dla operacji ioctl shutdown, włączono domyślnie opcje montowania „acl” i „prealloc”, dodano wsparcie dla czasu sprzed 1 stycznia 1970 roku.
    • Dla urządzeń blokowych i FS domyślnie włączono oddzielne dla każdego CPU buforowanie obiektów „bio” (Block I/O), definiujących aktywne operacje wejścia-wyjścia.
  • Pamięć i usługi systemowe
    • Do jądra dodano podsystem Live Update Orchestrator (LUO), który umożliwia pełne ponowne uruchomienie i aktualizację jądra bez zatrzymywania pracy i bez utraty stanu systemu, urządzeń i procesów. Podsystem LUO oparty jest na wcześniej dodanym do jądra mechanizmie KHO (Kexec HandOver) i oprócz możliwości uruchamiania nowego jądra z starego bez utraty stanu systemu rozwiązuje takie problemy, jak zachowanie stanu urządzeń i pamięci operacyjnej, a także zapewnienie ciągłości operacji związanych z DMA i obsługą przerwań. Stan jest przechowywany do momentu przełączenia na nowe jądro i przywracany po aktywowaniu nowego jądra, bez zakłócania ciągłych operacji z urządzeniami, realizowanych przez system i aplikacje w przestrzeni użytkownika.
    • Dodano wywołanie systemowe listns() do wyświetlenia listy istniejących w systemie przestrzeni nazw bez konieczności przeszukiwania /proc//ns/ dla wszystkich procesów.
    • W systemie asynchronicznego wejścia/wyjścia io_uring dodano wsparcie dla umieszczania elementów o różnej wielkości w kolejce wysyłania (SQE, Submission Queue Entry), analogicznie do tego, jak w poprzedniej wersji zezwolono na mieszanie rozmiarów zawartości kolejki wyników (CQE, Completion Queue Event). Przed tym wszystkie elementy w kolejce musiały mieć ten sam rozmiar, co prowadziło do nadmiernego zużycia pamięci z powodu konieczności używania maksymalnego rozmiaru dla wszystkich elementów w kolejce.

      W io_uring dodano wsparcie dla mechanizmu zcrx (Zero-Copy Receive), który umożliwia odbieranie danych bez kopiowania między jądrem a przestrzenią użytkownika. Wprowadzono również wsparcie dla zapytań dotyczących układu pamięci dla kolejek SQ (Submission Queue) i CQ (Completion Queue), co pozwala na uzyskanie informacji o rozmiarze bufora pierścieniowego, potrzebnego przy użytkownikowskim przydzielaniu pamięci za pomocą flag IORING_SETUP_NO_MMAP i IORING_MEM_REGION_TYPE_USER.

    • Aby umożliwić szybkie śledzenie stosu przy użyciu narzędzi takich jak perf, dodano wsparcie dla formatu SFrame z informacjami o rozwijaniu stosu wywołań (unwind). SFrame jest już wspierany w GCC i binutils, nie obniża wydajności i, w przeciwieństwie do formatu DWARF, zawiera tylko minimalny zestaw informacji potrzebnych do śledzenia stosu.
    • W narzędziu perf dodano wsparcie dla zunifikowanego opisu metryk i wydarzeń w formacie JSON, a także opóźnionego rozwijania (deferred unwinding) stosu wywołań w przestrzeni użytkownika.
    • Dla procesorów AMD wdrożono mechanizm podmiany danych w pamięci podręcznej, który pozwala urządzeniom wejścia/wyjścia na bezpośrednie wstawianie danych do pamięci podręcznej L3 CPU bez ich wcześniejszego umieszczania w RAM.
    • Dodano wsparcie dla MPAM (Memory System Resource Partitioning and Monitoring), rozszerzenia architektury zestawu instrukcji ARMv8-A, które pozwala na oznaczanie każdego dostępu do pamięci identyfikatorem sekcji (PARTID, Partition ID) oraz identyfikatorem grupy monitorującej (PMG, Monitoring Group ID). W odniesieniu do PARTID można ograniczyć konsumpcję zasobów, takich jak przepustowość pamięci czy rozmiar pamięci podręcznej, aby żadna grupa zadań nie zajmowała wszystkich zasobów. W kontekście monitorowania kombinacja PMG i PARTID może być używana do śledzenia zużycia zasobów pamięci podczas określonych rodzajów obciążenia.
    • W przypadku awaryjnego zakończenia procesu po otrzymaniu sygnału inny proces, który posiada pidfd zakończonego procesu, teraz może określić numer sygnału, który doprowadził do zakończenia procesu.
    • Przeprojektowano implementację restartowalnych sekwencji (restartable sequences), które umożliwiają aplikacjom organizowanie pseudo-atomowego, nieprzerwanego wykonywania grupy instrukcji (w przypadku przerwania przez inny wątek podejmowana jest próba ponownego wykonania sekwencji). Nowa implementacja różni się większą wysoką wydajnością.
    • W programach BPF zaimplementowano instrukcje BPF_JMP, BPF_X i BPF_JA do wykonywania skoków pośrednich do określonej pozycji w tabeli skoków. Dodano koncepcję dynamicznych wskaźników (dynptr), umożliwiających odczyt danych z ustrukturyzowanych plików. Wprowadzono możliwość dołączania kilku bajtów z metadanymi do pakietów sieciowych.
    • Moduły w języku Python wykorzystywane do przetwarzania dokumentacji jądra przeniesiono do oddzielnego katalogu tools/lib/python.
    • Dodano funkcję mempool_alloc_bulk() do bezpiecznego przydzielania elementów z puli pamięci dla wielu obiektów jednocześnie.
    • Kontynuowane jest przenoszenie zmian z gałęzi Rust-for-Linux dotyczących użycia języka Rust jako drugiego języka do rozwoju sterowników i modułów jądra (wsparcie dla Rust nie jest domyślnie aktywne i nie prowadzi do uwzględnienia Rust wśród obowiązkowych zależności budowlanych jądra). W nowej wersji do jądra dodano bibliotekę „syn” z parserem kodu Rust, co ułatwia pisanie złożonych makr. Rozszerzono funkcjonalność bibliotek kernel, pin-init i rbtree. Dodano bibliotekę ‘num’ z typem Integer do manipulacji liczbami całkowitymi. W makrze „module!” dodano wsparcie dla parametrów całkowitych. Wprowadzono możliwość określania parametrów przy ładowaniu modułów jądra napisanych w Rust. Zrealizowano abstrakcje dla podsystemów I2C i PWM (modulacja szerokości impulsu).
    • Dodano makro „at_least” (np. „param[at_least 7]”), informujące o minimalnie dopuszczalnym rozmiarze tablicy przekazanej do funkcji. Jeśli do funkcji zostanie przekazana tablica z mniejszą liczbą elementów, kompilator wyświetli ostrzeżenie.
    • Do pakietu dodano skrypt klp-build do generowania modułów jądra wprowadzających zmiany w działającym jądrze (livepatch) na podstawie pliku z łatką. W narzędziu objtool wprowadzono zmiany niezbędne do tworzenia live-łat.
    • W User-mode Linux (uruchamianie jądra jako procesu użytkownika) dodano ograniczone wsparcie dla wieloprocesowości, ale wątki w obrębie jednego procesu nadal nie mogą być wykonywane jednocześnie. Rozpoczęto portowanie User-mode Linux na bibliotekę nolibc.
    • Dodano wsparcie dla architektury LoongArch32 (LA32R, LA32S) oprócz LoongArch64.
    • Dodano wsparcie dla ustawiania limitów QoS na intensywność budzenia procesora w trybie oszczędzania energii s2idle (Suspend-To-Idle), zamrażającego wykonanie procesów w przestrzeni użytkownika, ale pozostawiającego aktywne niektóre obsługiwacze w jądrze.
    • Dodano wsparcie dla zarządzania tabelami stron pamięci dla kontrolerów IOMMU (Input-Output Memory Management Unit), które wykonują translację adresów wirtualnych widocznych dla urządzenia sprzętowego na adresy fizyczne, z możliwością filtrowania operacji DMA po adresach wirtualnych oraz ograniczania i izolowania operacji wejścia-wyjścia.
    • W zdarzeniach śledzenia wywołań systemowych zaimplementowano możliwość odczytu buforów z przestrzeni użytkownika i włączenia ich zawartości (na przykład, nazw plików) do wyników śledzenia.
    • Strony strzegące pamięci (guard page), do których dostęp powoduje wyjątek i awaryjne zakończenie procesu (SIGSEGV), są teraz oznaczane specjalną etykietą w pliku /proc/PID/smaps.
    • Dodano możliwość zarządzania dużymi stronami pamięci (transparent huge page) w prywatnej pamięci urządzeń strefowanych.
    • W urządzeniu zram, używanym do skompresowanego przechowywania partycji wymiany w pamięci, wprowadzono wsparcie dla wypychania wielu struktur „bio” (Block I/O) w trybie pakietowym (writeback batching).
    • W skład wchodzi czcionka „Terminus 10×18”, poprawiająca czytelność informacji z konsoli na ekranach laptopów o średniej rozdzielczości (1440×900).
    • Została znacznie zoptymalizowana praca podsystemu audytu — zauważono zmniejszenie overheadu o połowę.
  • Wirtualizacja i bezpieczeństwo
    • Dodano wsparcie dla funkcji rozdzielania liniowej przestrzeni adresów (LASS, linear address-space separation) oferowanej przez procesory Intel, która pozwala na sprzętowe oddzielenie zakresów adresów przestrzeni użytkownika i jądra dla zwiększenia bezpieczeństwa. Przestrzeń adresowa jest dzielona według najwyższego bitu adresu — połowa przestrzeni adresowej z ustawionym najwyższym bitem jest używana dla jądra, a niższa — dla przestrzeni użytkownika. Na wczesnym etapie wykonywania instrukcji (przed spekulatywnym wykonaniem) sprawdzana jest poprawność dostępu z przestrzeni użytkownika do adresów z ustawionym najwyższym bitem i odwrotnie. Takie podział pozwala zablokować wycieki pamięci jądra do przestrzeni użytkownika za pomocą bocznych kanałów, nawet podczas spekulatywnego wykonania instrukcji, co umożliwia stosowanie LASS w celu ochrony przed atakami typu Meltdown i Spectre, nie generując dużych kosztów.
    • Dodano możliwość włączenia rozszerzeń zwiększających bezpieczeństwo magistrali PCI Express — PCIe Link Encryption i PCIe Device Authentication, które pozwalają na potwierdzanie autentyczności i szyfrowanie kanału komunikacyjnego między urządzeniem PCIe a maszyną wirtualną, chronioną mechanizmami Intel TDX (Trusted Domain Extensions) oraz AMD SEV-SNP (Secure Nested Paging). Zrealizowane technologie uniemożliwiają przechwytywanie, analizowanie oraz modyfikowanie danych w ruchu DMA w przypadku dostępu do systemu hosta lub innych urządzeń.
    • Do wbudowanej biblioteki kryptograficznej dodano wsparcie dla algorytmów SHA-3 (SHA3-224, SHA3-256, SHA3-384, SHA3-512), SHAKE128, SHAKE256 oraz BLAKE2b.
    • Dla modułów LSM (Linux Security Modules), a w szczególności dla SELinux, zrealizowano możliwość śledzenia tworzenia deskryptorów memfd w celu stosowania polityk bezpieczeństwa do powiązanych z nimi obiektów.
    • W module LSM IPE (Integrity Policy Enforcement), który definiuje ogólną politykę zapewniania integralności dla całego systemu, dodano wsparcie dla flagi AT_EXECVE_CHECK w funkcji execveat(), włączającą sprawdzanie integralności skryptu przed jego wykonaniem przez interpreter.
    • Dodano prymitywy scoped_user_read_access(), scoped_user_write_access oraz scoped_user_rw_access() do ograniczonego dostępu do danych w przestrzeni użytkownika z zabezpieczeniami przed spekulatywnymi atakami.
    • Dodano wsparcie dla mechanizmu Confidential VMBus, wykorzystywanego w hipernadzorcze HyperV do bezpiecznej interakcji między systemem gościnnym działającym w trybie poufnym (z szyfrowaniem pamięci i izolacją rejestrów opartą na technologiach AMD SNP i Intel TDX) a parawizorem odpowiedzialnym za dostęp do urządzeń przetwarzających poufne dane.
    • Dodano możliwość przesyłania informacji o procesie awaryjnie zakończonym (do generowania coredump) przez mechanizm pidfd. Identyfikator PIDFD jest powiązany z konkretnym procesem i nie zmienia się, podczas gdy PID może być powiązany z innym procesem po zakończeniu aktualnego procesu, z którym związany jest ten PID. Użycie pidfd pozwala zablokować ataki polegające na podmianie awaryjnie zakończonego procesu suid na inny proces, osiągając stan wyścigu w momencie po rozpoczęciu obsługi awaryjnego zakończenia przez jądro, ale przed sprawdzeniem przez handlera w przestrzeni użytkownika parametrów procesu.
  • Subsystem sieciowy
    • W subsystemie sieciowym wprowadzono optymalizacje w celu zwiększenia wydajności przesyłania danych (TX). Zredukowanie funkcji __dev_queue_xmit() z blokady spinowej oraz wykorzystanie struktury llist działającej bez blokad pozwoliło na czterokrotne zwiększenie wydajności przy dużym obciążeniu oraz podwojenie intensywności wysyłania pakietów przy zmniejszeniu obciążenia CPU o połowę.
    • Zaoferowano możliwość wyłączenia dla poszczególnych gniazd sieciowych ograniczeń systemowych na wykorzystanie pamięci (w takim przypadku zostaną zastosowane ogólne limity pamięci ustalone dla poszczególnych kontenerów). Do zarządzania wyłączeniem limitów zaproponowano sysctl net.core.bypass_prot_mem oraz flagę SK_BPF_BYPASS_PROT_MEM w funkcji bpf_setsockopt.
    • Dodano wsparcie dla rozszerzenia RFC 5837, które dodaje do komunikatów ICMP 'Time Exceeded' zwracanych przy wygaśnięciu czasu życia (TTL) pakietu dane o przychodzących interfejsach sieciowych w celu uzyskania bardziej szczegółowych informacji podczas śledzenia tras narzędziem traceroute.
    • Dodano wsparcie dla ciągłego aktywnego pollingu (busy polling) w osobnym wątku jądra w celu wydobycia deskryptorów z kolejek RX/TX dla aplikacji wymagających minimalnych opóźnień.
    • Dodano wsparcie dla protokołu CAN XL (Controller Area Network eXtended Length), w którym rozmiar pola danych został zwiększony do 2048 bajtów, aby umożliwić integrację z sieciami TCP/IP, wprowadzono możliwość tunelowania ramek Ethernet oraz dodano wsparcie dla modulacji szerokości impulsów, co pozwoliło na przesyłanie danych z prędkościami 20 Mb/s i wyższymi.
    • Dodano wsparcie dla struktury sockaddr_unsized, wariantu struktury sockaddr, wykorzystującego tablicę z elastycznymi elementami zamiast tablicy o stałym rozmiarze (sa_data[] zamiast sa_data[14], która w zasadzie była używana do odniesień do innych struktur większego rozmiaru).
    • Dodano możliwość korzystania z funkcji getsockname i getpeername za pośrednictwem podsystemu io_uring.
    • Dodano sysctl net.ipv4.tcp_rcvbuf_low_rtt oraz net.ipv4.tcp_comp_sack_rtt_percent dla optymalizacji TCP.
    • Dodano wsparcie dla połączeń o przepustowości 1600 Gbps (1.6T).
  • Sprzęt
    • Do podsystemu DRM (Direct Rendering Manager) dodano API do wykorzystania możliwości sprzętowych konwersji kolorów, co pozwala na pominięcie takich konwersji przez shadery lub realizację kodu na CPU. Dla wyjścia treści na monitor HDR skomplikowane konwersje kolorów mogą być teraz realizowane przez kontroler wyświetlacza na etapie przed i po mieszaniu warstw (blending), zamiast programowego kompozytowania treści w finalnym buforze wyświetlania. Oprócz obniżenia kosztów związanych z wydajnością i zużyciem energii przy organizacji wyjścia w HDR, zaproponowana funkcjonalność może być wykorzystywana do poprawnej reprodukcji kolorów w edytorach wideo lub obrazów.
    • Dodano sterownik „ethosu” dla NPU Arm Ethos U65 i U85, zaprojektowanych do sprzętowego przyspieszania wykonywania modeli AI.
    • W sterowniku i915 dla GPU Lunar Lake i nowszych dodano wsparcie dla sprzętowego zwiększania wyrazistości obrazu (Sharpening).
    • Kontynuowane prace nad sterownikiem drm (Direct Rendering Manager) Xe dla GPU opartych na architekturze Intel Xe, które są wykorzystywane w kartach graficznych Intel z rodziny Arc oraz w grafice zintegrowanej, począwszy od procesorów Tiger Lake. Dodano początkowe wsparcie dla architektury Xe3P, używanej w GPU Crescent Island oraz w rodzinach procesorów z zintegrowaną grafiką Nova Lake.
    • W sterowniku AMDGPU zaimplementowano pełne wsparcie dla kart graficznych AMD z rodziny GCN 1.0 „Southern Island” oraz 1.1 „Sea Islands”, dla których wcześniej używano sterownika Radeon. Sterownik AMDGPU został doprowadzony do parytetu możliwości z sterownikiem Radeon i jest domyślnie aktywowany dla wymienionych GPU. Karty GCN 1.x były wydawane w latach 2012-2019 i obejmują modele takie jak Radeon HD 77xx/78xx/79xx/87xx/88xx/89xx, Radeon R9 280, FirePro W4000-W9000, Radeon Sky 700/900, Radeon R9 265/270/370, Radeon R9 290/390, HD 7790/8870 oraz inne karty graficzne z rodzin Radeon Rx 200/Rx 300. Oprócz średniego wzrostu wydajności o 24%, przejście na AMDGPU umożliwiło wsparcie dla graficznego API Vulkan 1.3 na tych GPU. Ponadto, w AMDGPU dodano wsparcie dla analogowych złącz oraz Video Coding Engine 1.0, a także domyślnie wykorzystano stos DC (Display Core) dla GPU opartych na mikroarchitekturze Bonaire (Radeon HD 7700).
    • W sterowniku Nouveau zaimplementowano wsparcie dla sprzętowego akceleratora NVJPG, obecnego w SoC Tegra210.
    • W sterowniku Panthor dodano wsparcie dla GPU Mali-G1 oraz początkowe wsparcie dla chipu MediaTek MT8196.
    • Dodano wsparcie dla systemu dźwiękowego chipów Intel Nova Lake S, laptopów HP z HDA CS35L41, a także interfejsów dźwiękowych CIX IPBLOQ HD i Onkyo SE-300PCIE.
    • Kontynuowano integrację komponentów sterownika Nova dla GPU NVIDIA, wyposażonych w firmware GSP, używanym od serii NVIDIA GeForce RTX 2000 na bazie mikroarchitektury Turing. Sterownik jest napisany w języku Rust. W nowej wersji rozpoczęto prace nad RPC oraz zakończono implementację ładowania współprocesora GSP (GPU System Processor).
    • Dodano wsparcie dla platform ARM, SoC i urządzeń: Bananapi r4 pro, LinkEase EasePi R1, Qualcomm MSM8937 (Snapdragon 430), Renesas R-Car X5H, FriendlyElec NanoPi R76S, TI AM62L, Black Sesame Technologies C1200, Aspeed AST2600, Genio 1200 EVK, grinn geniosbc-510/700, Tanix TX9 Pro, Radxa Dragon Q6A, Tinker Board 3/3S, Aquila AM69, phyBOARD-Segin-i.MX91, i.MX 95 Verdin Evaluation Kit, Toradex SMARC iMX95, VIDIA Jetson Nano 2GB, Renesas rz/g3s, Indiedroid Nova, 24 warianty płyt Enclustra Mercury.
    • dodano wsparcie dla smartfonów i tabletów opartych na SoC Mediatek MT6582 (Alcatel yarisxl), Nvidia Tegra124 (Xiaomi Mi Pad) oraz Qualcomm MSM8939 (ASUS ZenFone 2). Dodano wsparcie dla laptopów na SoC Qualcomm sdm850, takich jak Huawei MateBook E 2019.
    • Dodano wsparcie dla SoC i płyt opartych na architekturze RISC-V: OrangePi R2S, OrangePi RV, Anlogic dr1v90, Tenstorrent Blackhole.

Jednocześnie latynoamerykański Fundusz Wolnego Oprogramowania stworzył wersję całkowicie wolnego jądra 6.19 – Linux-libre 6.19-gnu, oczyszczoną z elementów firmware i sterowników, które zawierają nieliczne komponenty lub fragmenty kodu, których użycie jest ograniczone przez producenta. W wydaniu 6.19 z podsystemu dźwiękowego SDCA usunięto kod do ładowania binarnego firmware. Zaktualizowano kod oczyszczania blobów w sterownikach Intel XE, Nova-Core, Qualcomm Iris, Venus i Q6V5, TI PRUeth, Intel iwlwifi, Marvell mwifiex, FourSemi fs210x, Realtek rt1320 oraz w kodekach dźwiękowych TI tas2783. Oczyszczono nazwy blobów w plikach dts (devicetree) dla chipów ARM. Zakończono oczyszczanie sterownika STM C8SECTPFE DVB, usuniętego z jądra.

Źródło: opennet.ru

Kup solidny hosting stron z ochroną przed DDoS, serwery VPS VDS 🔥 Kup solidny hosting stron z ochroną przed DDoS, serwery VPS VDS | ProHoster