Po dwóch miesiącach prac Linus Torvalds przedstawił wydał jądro Linux 6.19. Wśród najbardziej zauważalnych zmian znajduje 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 w celu ochrony przed Spectre, wsparcie dla hashów SHA-3 oraz BLAKE2b, mechanizm Confidential VMBus, optymalizacje TX w podsystemie sieciowym, protokół CAN XL oraz API dla sprzętowego przyspieszenia wyjścia HDR.
W zapowiedzi nowej wersji Linus ogłosił, że następnej wersji jądra przypisany zostanie numer 7.0, gdyż w gałęzi 6.x uzbierało się wystarczającej liczby wydań, aby zmienić pierwszą cyfrę w numerze wersji (w swoim czasie wydanie 6.0 powstało po 5.19). Zmiana numeracji odbywa się z powodów estetycznych i jest formalnym krokiem, który usuwa niepokój związany z nagromadzeniem dużej liczby wydań w serii. Linus zażartował, że mylą go duże liczby, na które brakuje mu palców u rąk i nóg. Przy tym formalnie powód do znacznego zmiany numeru wersji jest, ponieważ począwszy od następnego wydania wprowadzenie wsparcia dla Rust postanowiono przenieść z eksperymentalnych do podstawowych funkcji jądra.
Do nowej wersji wprowadzono 15657 poprawek od 2237 programistów, rozmiar poprawki wynosi 52 MB (zmiany objęły 13682 plików, dodano 794649 linii kodu, usunięto 335498 linii). W poprzednim wydaniu było 15035 poprawek od 2217 programistów, rozmiar poprawki wynosił 45 MB. Około 40% wszystkich zaprezentowanych w zmianach 6.19 dotyczy sterowników urządzeń, około 13% zmian ma związek z aktualizacją kodu specyficznego dla architektur sprzętowych, 12% jest związane z stosem sieciowym, 5% z systemami plików, a 3% z wewnętrznymi podsystemami 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 Btrfs procesy sprawdzania systemu plików (scrub) i wymiany urządzeń już nie blokują przejścia systemu w tryb uśpienia (przed zaśnięciem zapisywany jest stan sprawdzania scrub; po wybudzeniu z uśpienia sprawdzanie scrub jest kontynuowane, a operacja wymiany urządzeń rozpoczyna się od nowa). W implementacji RAID56 dodano wsparcie dla bloków większych niż rozmiar strony pamięci. Przygotowano wsparcie dla fscrypt. Zwiększono wydajność operacji związanych z rezerwacją miejsca. Dodano wsparcie operacji ioctl shutdown, umożliwiającej przekształcenie systemu plików w stan, w którym podejmowane są próby zakończenia już uruchomionych operacji, ale blokowane są wszystkie nowe operacje.
- W systemie plików Ext4 wliczona wsparcie bloków, których rozmiar przekracza wielkość strony pamięci (>4KB w systemach x86). Użycie dużych bloków przekazywanie zwiększa wydajność buforowanych operacji zapisu średnio o 50%, ale obniża wydajność bezpośredniego wejścia/wyjścia z powodu zwiększonego czasu obliczania sum kontrolnych. W nowej wersji również dodano optymalizacje, które zwiększyły przepustowość podczas wykonywania online-defragmentacji.
- W podsystemie FUSE ulepszono wsparcie buforowanego odczytu przy użyciu dużych folio pamięci (large folios). Poprzez iomap wdrożona została możliwość śledzenia częściowo aktualnych foliantów w celu załadowania tylko danych, które brakują w buforze.
- W VFS dodano wsparcie dla odwoływalnej delegacji kontroli katalogu (recallable directory delegation), co pozwala na NFS przekazywanie kontroli katalogu z serwera do klienta, dzięki czemu klient NFS bez odwołań do serwera NFS samodzielnie śledzi stan katalogu na podstawie lokalnej pamięci podręcznej. Jeśli inny klient NFS wprowadzi zmiany związane z tym katalogiem, delegacja kontroli zostanie odwołana u pierwszego klienta.
- Dla NFS dodano wsparcie dla odczytu 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łączaniem buforowania i operacji bezpośredniego wejścia/wyjścia, manipulacja tymi ustawieniami pozwala zmniejszyć narzuty po stronie klienta NFS podczas wykonywania dużych operacji wejścia/wyjścia.
- W NTFS wdrożono wsparcie operacji ioctl shutdown, włączone domyślnie opcje montowania acl i prealloc, dodano wsparcie dla czasu do 1 stycznia 1970 roku.
- Dla urządzeń blokowych i systemów plików włączono domyślnie 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
-
W jądrze wliczona podsystem Live Update Orchestrator (LUO), umożliwiająca pełne ponowne uruchomienie i aktualizację jądra bez zatrzymania pracy oraz bez utraty stanu systemu, urządzeń i procesów. Podsystem LUO opiera się na wcześniej dodanym do jądra mechanizmie KHO (Kexec HandOver) oraz dodatkowo umożliwia uruchomienie nowego jądra ze starego bez utraty stanu systemu, a także rozwiązuje takie problemy, jak zachowanie stanu urządzeń i pamięci operacyjnej oraz zapewnienie ciągłości operacji związanych z DMA i obsługą przerwań. Stan jest zachowywany 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 wykonywanych przez system i aplikacje w przestrzeni użytkownika.
-
Dodano wywołanie systemowe listns() do wyświetlenia listy istniejących w systemie przestrzeni nazw bez potrzeby 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 zgłoszeń (SQE, Submission Queue Entry), na wzór tego, jak w poprzedniej wersji pozwolono na mieszanie rozmiaru zawartości kolejki wyników (CQE, Completion Queue Event). Do tej pory 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 również wsparcie dla mechanizmu zcrx (Zero-Copy Receive) do odbierania danych bez kopiowania między jądrem a przestrzenią użytkownika. Dodano wsparcie dla zapytań o układ pamięci dla kolejek SQ (Submission Queue) i CQ (Completion Queue), które pozwalają uzyskać informacje o rozmiarze bufora pierścieniowego, niezbędne przy użytkowniczym alokowaniu pamięci za pomocą flag IORING_SETUP_NO_MMAP i IORING_MEM_REGION_TYPE_USER.
Dla szybkiego śledzenia 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 powoduje spadku wydajności i, w przeciwieństwie do formatu DWARF, zawiera jedynie minimalny zestaw informacji niezbędnych do śledzenia stosu.
-
Do narzędzia perf dodano wsparcie zharmonizowanych opisów metryk i zdarzeń w formacie JSON, a także opóźnione rozwijanie (deferred unwinding) stosu wywołań w przestrzeni użytkownika.
Dla procesorów AMD wdrożono mechanizm podstawiania danych do cache, pozwalający urządzeniom wejścia/wyjścia bezpośrednio podstawiać dane do L3-cache CPU bez ich wcześniejszego umieszczania w RAM.
Dodano wsparcie dla MPAM (Podział i monitorowanie zasobów systemu pamięci), rozszerzenia architektury zestawu instrukcji ARMv8-A, które oznacza każde odwołanie do pamięci identyfikatorem sekcji (PARTID, Partition ID) oraz identyfikatorem grupy monitorującej (PMG, Monitoring Group ID). W odniesieniu do PARTID można ograniczyć zużycie zasobów, takich jak przepustowość pamięci lub rozmiar cache, aby jakaś grupa zadań nie zajmowała wszystkich zasobów. W kontekście monitorowania, połączenie PMG i PARTID można wykorzystać do śledzenia zużycia zasobów pamięci przy określonych rodzajach obciążenia.
W przypadku awaryjnego zakończenia procesu po otrzymaniu sygnału, inny proces, mający pidfd zakończonego procesu, może teraz określić numer sygnału, który doprowadził do zakończenia procesu.
Przeprojektowano realizację sekwencji, które można ponownie uruchamiać (restartowalne sekwencje), pozwalające aplikacjom zorganizować pseudo-atomowe, nieprzerwane wykonanie grupy instrukcji (w przypadku przerwania przez inny wątek, podejmowana jest ponowna próba wykonania sekwencji). Nowa realizacja charakteryzuje się wyższą wydajnością.
-
Dla Programy BPF wdrożono instrukcje BPF_JMP, BPF_X i BPF_JA do wykonywania pośrednich skoków do określonej pozycji w tabeli skoków. Dodano koncepcję dynamicznych wskaźników (dynptr), które pozwalają na odczyt danych z ustrukturalizowanych plików. Dodano możliwość dołączania do pakietów sieciowych kilku bajtów z metadanymi.
Moduły w języku Python, używane 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.
-
Kontynuowano przenoszenie zmian z gałęzi Rust-for-Linux, związane z używaniem języka Rust jako drugiego języka do tworzenia 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 do budowy jądra). W nowej wersji do jądra wbudowano bibliotekę „syn” z parserem kodu Rust, co ułatwia pisanie skomplikowanych makr. Rozszerzono możliwości 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ślenia parametrów przy ładowaniu modułów jądra napisanych w Rust. Wprowadzono abstrakcje dla podsystemu I2C i PWM (Modulacja szerokości impulsu).
-
Dodano makro at_least (na przykład, param[at_least 7], informujące o minimalnym dozwolonym rozmiarze tablicy przekazywanej do funkcji. Jeśli do funkcji zostanie przekazana tablica z mniejszą liczbą elementów, kompilator wygeneruje ostrzeżenie.
-
W skład włączono skrypt klp-build do generowania modułów jądra, wprowadzających zmiany w działającym jądrze (livepatch), na podstawie pliku z poprawką. Do narzędzia objtool wprowadzono zmiany niezbędne do tworzenia live-poprawek.
-
W User-mode Linux (uruchomienie jądra jako procesu użytkownika) dodano ograniczone wsparcie dla wieloprocesorowości, ale wątki w jednym procesie nie mogą jeszcze działać jednocześnie. Zaczęło się portowanie User-mode Linux na bibliotekę nolibc.
-
Dodano wsparcie architektury LoongArch32 (LA32R, LA32S) obok LoongArch64.
-
Dodano możliwość ustawienia limitów QoS na intensywność wybudzenia procesora w trybie oszczędzania energii s2idle (Suspend-To-Idle), zamrażającego wykonywanie procesów w przestrzeni użytkownika, ale pozostawiającego aktywne niektóre obsługiwacze w jądrze.
-
Dodano wsparcie zarządzania tabelami stron pamięci dla kontrolerów IOMMU (Jednostka zarządzania pamięcią wejścia/wyjścia), wykonujących translację wirtualnych adresów widocznych dla urządzenia sprzętowego na adresy fizyczne, z możliwością filtrowania operacji DMA według wirtualnych adresów 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 strzeżone pamięci(( (guard page), odwołanie do których wywołuje wyjątek i awaryjne zakończenie procesu (SIGSEGV), teraz są oznaczane specjalną etykietą w pliku /proc/PID/smaps.
-
Dodano możliwość zarządzania dużymi stronami pamięci (przezroczysta duża strona) w prywatnej pamięci strefowanych urządzeń.
-
W urządzeniu zram, stosowanym do skompresowanego przechowywania segmentu swap w pamięci, zrealizowano wsparcie wyrzucania wielu struktur „bio” (Block I/O) w trybie wsadowym (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).
-
Znacznie optymalizowane prace podsystemy audytu — odnotowano dwukrotne zmniejszenie obciążenia.
-
- Wirtualizacja i bezpieczeństwo
- Dodano wsparcie dostarczanej przez procesory Intel funkcji podziału linia przestrzeni adresowej (LASS, separacja liniowa przestrzeni adresowej), umożliwiająca sprzętowe rozdzielenie 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 dolna – dla przestrzeni użytkownika. Na wczesnym etapie wykonywania instrukcji (na etapie przed wykonaniem spekulacyjnym) przeprowadzana jest weryfikacja dopuszczalności dostępu z przestrzeni użytkownika do adresów z ustawionym najwyższym bitem i odwrotnie. Tego rodzaju rozdzielenie umożliwia blokowanie wycieków pamięci jądra do przestrzeni użytkownika przez zewnętrzne kanały, nawet przy wykonaniu spekulacyjnym instrukcji, co pozwala na zastosowanie LASS w ochronie przed atakami klasy Meltdown i Spectre, bez wprowadzania dużych nakładów.
- Dodano możliwość włączenia rozszerzeń wzmocnienia bezpieczeństwa magistrali PCI Express – PCIe Link Encryption i PCIe Device Authentication, umożliwiających potwierdzenie autentyczności oraz szyfrowanie kanału komunikacji między urządzeniem PCIe a maszyną wirtualną, chronioną za pomocą mechanizmów Intel TDX (Trusted Domain Extensions) i AMD SEV-SNP (Secure Nested Paging). Wdrożone technologie nie pozwalają na przechwytywanie, analizowanie oraz wstawianie danych do ruchu DMA przy dostępie do systemu gospodarza 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 i BLAKE2b.
- Dla modułów LSM (Linux Security Modules) i, w szczególności dla SELinux, zrealizowano możliwość śledzenia tworzenia deskryptorów memfd w celu stosowania polityk bezpieczeństwa do związanych z nimi obiektów.
- W module LSM IPE (Integrity Policy Enforcement), definiującego ogólną politykę zapewnienia integralności całego systemu, dodano wsparcie dla flagi AT_EXECVE_CHECK w funkcji execveat(), obejmującego weryfikację integralności skryptu przed jego wykonaniem przez interpreter.
- Dodano prymitywy scoped_user_read_access(), scoped_user_write_access i scoped_user_rw_access() dla ograniczonego dostępu do danych w przestrzeni użytkownika z ochroną ataków spekulacyjnych.
- Dodano wsparcie dla mechanizmu Confidential VMBus, używanego w hypervisorze HyperV do zabezpieczonej interakcji pomiędzy systemem gościnnym działającym w trybie poufnym (z szyfrowaniem pamięci i izolacją rejestrów w oparciu o technologie AMD SNP i Intel TDX) a parawizorem odpowiedzialnym za dostęp do urządzeń przetwarzających dane poufne.
- Dodano możliwość przesyłania informacji o procesie, który zakończył się awarią (do generowania coredump) za pośrednictwem mechanizmu pidfd. Identyfikator PIDFD jest powiązany z konkretnym procesem i nie zmienia się, podczas gdy PID może być przypisany do innego procesu po zakończeniu bieżącego procesu powiązanego z tym PID. Użycie pidfd pozwala na blokowanie podejmowania atakami w celu zastąpienia procesu suid, który zakończył się awarią, innym procesem, osiągając stan wyścigu w momencie po rozpoczęciu przetwarzania awarii przez jądro, ale przed sprawdzeniem przez obsługę procesu parametrów w przestrzeni użytkownika.
- Subsystem sieciowy
- W subsystemie sieciowym zostały wprowadzone optymalizacji w celu zwiększenia efektywności transmisji danych (TX). Usunięcie funkcji __dev_queue_xmit() z blokady spin i zastosowanie działającej bez blokad struktury llist pozwoliło czterokrotnie zwiększyć wydajność przy dużym obciążeniu i podwoić intensywność wysyłania pakietów przy zmniejszonym obciążeniu CPU o połowę.
- Dostarczono możliwość odcięcia dla poszczególnych gniazd sieciowych systemowych limitów na wykorzystanie pamięci (w tym przypadku zostaną zastosowane wspólne limity pamięci ustalane dla pojedynczych kontenerów). Do zarządzania wyłączaniem 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, dodającego do komunikatów ICMP Time Exceeded, zwracanych po wygaszeniu 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 wydobywania 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 z danymi został zwiększony do 2048 bajtów w celu zapewnienia integracji z sieciami TCP/IP, zrealizowano możliwość tunelowania ramek Ethernet i dodano wsparcie modulacji szerokoimpulsowej, co pozwalało na przesyłanie danych z prędkością 20 Mbit/s i wyżej.
- Dodano wsparcie dla struktury sockaddr_unsized, wariantu struktury sockaddr, korzystającego z tablicy z elastycznymi elementami zamiast tablicy o stałej wielkości (sa_data[] zamiast sa_data[14], która zasadniczo była używana do wskazywania innych struktur większego rozmiaru).
- Dodano możliwość wykorzystania funkcjonalności getsockname i getpeername przez podsystem io_uring.
- Dodano sysctl net.ipv4.tcp_rcvbuf_low_rtt i net.ipv4.tcp_comp_sack_rtt_percent w celu 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 uniknąć przeprowadzania takich konwersji przez shadery lub wykonywanie kodu na CPU. Dla wyświetlania treści na monitorze HDR złożone konwersje kolorów mogą teraz być realizowane przez kontroler wyświetlania w fazie przed i po mieszaniu warstw (blending), zamiast programowego kompozytowania treści w finalnym buforze wyświetlania. Oprócz zmniejszenia kosztów i zużycia energii przy organizacji wyjścia w HDR, proponowana funkcjonalność może być używana dla poprawnej reprodukcji kolorów w edytorach wideo lub obrazów.
- Dodano sterownik ethosu dla NPU Arm Ethos U65 i U85, przeznaczonych do sprzętowego przyspieszenia realizacji modeli AI.
- W sterowniku i915 dla GPU Lunar Lake i nowszych dodano wsparcie dla sprzętowego zwiększania wyrazistości obrazu (Sharpening).
- Kontynuowano prace nad drm-sterownikiem (Direct Rendering Manager) Xe dla GPU opartych na architekturze Intel Xe, która jest używana w kartach graficznych Intel rodziny Arc oraz w zintegrowanej grafice, począwszy od procesorów Tiger Lake. Dodano wstępne wsparcie architektury Xe3P, wykorzystywanej w GPU Crescent Island i rodzinie procesorów z zintegrowaną grafiką Nova Lake.
- W sterowniku AMDGPU wprowadzono pełne wsparcie dla kart graficznych AMD rodziny GCN 1.0 „Southern Island” i 1.1 „Sea Islands”, dla których wcześniej używano sterownika Radeon. Sterownik AMDGPU doprowadzono do parytetu możliwości z sterownikiem Radeon i aktywowano dla wskazanych GPU domyślnie. Karty GCN 1.x produkowano od 2012 do 2019 roku i obejmują takie modele, 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 i inne karty graficzne rodzin Radeon Rx 200/Rx 300. Oprócz zwiększenia wydajności średnio o 24%, przejście na AMDGPU umożliwiło wdrożenie wsparcia dla API graficznego Vulkan 1.3 dla tych GPU. Ponadto, w AMDGPU dodano wsparcie dla analogowych złączy oraz Video Coding Engine 1.0, a także domyślnie wykorzystano sterownik DC (Display Core) dla GPU opartych na mikroarchitekturze Bonaire (Radeon HD 7790).
- W sterowniku Nouveau zrealizowano wsparcie dla akceleratora sprzętowego NVJPG, obecnego w SoC Tegra210.
- W sterowniku Panthor dodano wsparcie dla GPU Mali-G1 i wstępne wsparcie dla układu MediaTek MT8196.
- Dodano wsparcie dla systemu dźwiękowego układów Intel Nova Lake S, laptopów HP z HDA CS35L41 oraz 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, stosowanych od serii NVIDIA GeForce RTX 2000 opartej na mikroarchitekturze Turing. Sterownik został napisany w języku Rust. W nowej wersji rozpoczęto prace nad RPC i dobiegła końca wdrożeniem ł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 utworzyła wariant całkowicie wolne jądro 6.19 — Linux-libre 6.19-gnu, oczyszczone z elementów firmware i sterowników zawierających komponenty lub fragmenty kodu o ograniczonym zakresie użytkowania przez producenta. W wydaniu 6.19 z systemu dźwiękowego SDCA usunięto kod do ładowania binarnych 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 kodekach dźwiękowych TI tas2783. Wykonano czyszczenie nazw blobów w plikach dts (devicetree) dla chipów ARM. Zaprzestano czyszczenia sterownika STM C8SECTPFE DVB, usuniętego z jądra.
Źródło: linux.org.ru
