16 sierpnia Linus Torvalds wydał stabilne jądro Linux 7.2. Pisaliśmy już o tym, co trafiło do drzewa w fazie RC, teraz czas na podsumowanie finalnego wydania. Okno scalania było rekordowe: LWN naliczyło 2138 kontrybutorów (najwięcej w historii pojedynczego okna scalania), w tym 404 debiutantów, i 13412 commitów spoza merge’y. Sam Torvalds przyznał w ogłoszeniu, że nie jest zachwycony rozmiarem wydania, ale nic w nim nie wyglądało na “scary” i nie widział powodu, żeby je opóźniać.

Cache Aware Scheduling trafia do produkcji

Opcja CONFIG_SCHED_CACHE, o której pisaliśmy przy okazji RC, weszła do stabilnego jądra bez większych zmian. Scheduler grupuje powiązane zadania w tej samej domenie L3 zamiast rozrzucać je po całym procesorze, co najbardziej odczują maszyny z wieloma domenami cache (EPYC, duże Xeony). Do tego doszły topologiczne identyfikatory CPU w sched_ext: gęste, uporządkowane numerowanie, w którym rdzenie należące do tego samego rdzenia fizycznego, LLC czy węzła NUMA tworzą ciągłe zakresy liczbowe, co ułatwia pisanie własnych polityk planowania w BPF.

Sprawiedliwszy scheduler dla GPU

Nowość, której nie było jeszcze w RC: “fair(er)” scheduler dla GPU, wzorowany na idei CFS z planisty CPU. Do tej pory kolejka zadań GPU działała na zasadzie FIFO, co przy ciężkim obciążeniu (na przykład renderowaniu czy obliczeniach) potrafiło zagłodzić interaktywne aplikacje. Nowy scheduler ma to poprawić bez utraty przepustowości.

Pamięć: MGLRU i tablica swapu

  • Pętla odzysku pamięci MGLRU i obsługa dirty writeback zostały uporządkowane i zoptymalizowane, dając do około 30% wzrostu wydajności w obciążeniach takich jak MongoDB z benchmarkiem YCSB, przy mniejszej liczbie refaultów.
  • Czwarta faza przebudowy tablicy swapu ujednolica alokację i metadane, sprowadzając statyczny narzut pamięci niemal do zera. Dla urządzenia swap o rozmiarze 1 TB to oszczędność rzędu 512 MB RAM.
  • khugepaged potrafi teraz zwijać anonimowe regiony pamięci do multi-size transparent huge pages (mTHP), nie tylko klasycznych THP.

Koniec strncpy(), tym razem naprawdę

W RC pisaliśmy, że strncpy() zniknęła z drzewa. W 7.2 ta praca formalnie się kończy: to ponad sześć lat wysiłku i 362 commity, z czego 211 napisał sam Justin Stitt. Funkcja była klasycznym źródłem błędów, bo nie gwarantuje zakończenia łańcucha zerem, a jednocześnie bezwarunkowo dopełnia bufor zerami do pełnej długości, co przy dużych buforach kosztuje wydajność i maskuje pomyłki programistów. Jej usunięcie to jeden z większych symbolicznych kroków w wieloletnim hardeningu operacji na łańcuchach w jądrze.

Systemy plików

  • ext4 przebudowany mechanizm fast commit z mniejszą rywalizacją o blokady, a obliczanie hashy katalogów działa teraz na 4-bajtowych porcjach.
  • Btrfs duże folio domyślnie (jak w RC), eksperymentalne folio 2 MB, nowy ioctl GET_CSUMS, a przy okazji ograniczenie rozmiaru BIO przy writeback i usunięcie serializacji dla DIO dają około 59% wzrostu przepustowości przy zapisie sekwencyjnym.
  • NTFS nowy sterownik z 7.1 doczekał się natywnego wsparcia dla dowiązań symbolicznych Windowsa.
  • NFSD delegacje katalogów, automatyczne sprzątanie stanu NFSv4 po odmontowaniu, a domyślny rozmiar bloku rośnie do 4 MB na hostach z co najmniej 16 GB RAM.
  • exFAT przeniesiony na infrastrukturę iomap, doszło wsparcie SEEK_HOLE/SEEK_DATA.
  • SMB/CIFS obsługa skompresowanych plików.

Bezpieczeństwo

  • Na x86 dopracowano mitygację SRSO (Speculative Return Stack Overflow): jądro emuluje sekwencję safe-ret, żeby procesor nigdy nie wykonał bezpośredniego RET w podatnym oknie, co ma znaczenie zwłaszcza przy wstrzykiwaniu przerwań.
  • SELinux dostał nowe sprawdzenia w czasie ładowania polityki, odrzucające niezadeklarowane wartości klas, niezdefiniowane booleany i błędnie sformułowane uprawnienia. Naprawiono też regresję wydajności w kolejkach komunikatów SysV IPC.
  • Nowy target device mapper dm-inlinecrypt, czyli praktyczna alternatywa dla dm-crypt przy szyfrowaniu inline urządzeń blokowych.
  • openat2() dostał flagi OPENAT2_REGULAR (odrzuca wszystko poza zwykłymi plikami) i O_EMPTYPATH (ponowne otwarcie deskryptora O_PATH).
  • Landlock może teraz kontrolować gniazda UDP, a IMA potrafi składować dane pomiarowe poza jądrem.
  • Alokator slab zyskał wsparcie dla partycjonowania cache’y slab wspomaganego przez kompilator, według typu przechowywanych obiektów.
  • Sporo cichego hardeningu w sieci: Open vSwitch (ponad 200 linii poprawek obsługi gniazd i generacji Netlink), IPSet (ponad 300 linii sprawdzania granic), poprawki wyścigów w MPTCP fastopen.

Wirtualizacja

KVM dostał wsparcie dla AMD “guest-mode execution trap” i Intel MBEC (mode-based execution control), a do tego doszło wsparcie dla Intel TDX (Trusted Domain Extensions), czyli sprzętowo izolowanych maszyn wirtualnych chronionych nawet przed hypervisorem.

Sieć

MPTCP potrafi sygnalizować dodatkowe adresy IPv6, PPPoE zyskało GRO/GSO, doszła implementacja TCP Authentication Option (następcy TCP MD5), a sieć przez Thunderbolt dostała kolejną porcję usprawnień.

Sterowniki i sprzęt

GPU:

  • AMDGPU z wstępnym wsparciem HDMI 2.1 FRL (potwierdzone z RC)
  • Szybsze pollowanie i inne usprawnienia dla Intel Arc B390
  • Wstępne wsparcie platformy CRI dla sterownika Intel Xe

CPU i platformy:

  • Rust na s390 (potwierdzone z RC), wsparcie modelu CPU Intel Panther Lake R
  • Nowe hwcaps na AArch64 dla rozszerzeń dpISA z 2025
  • Nowa opcja bootowania tlbi=ipi

Inne:

  • USB4STREAM od Intela: strumieniowanie danych bezpośrednio po kablu USB4 przez /dev/tbstreamX
  • Apple M3 wciąż bootuje tylko do konsoli (jak w RC), ale prace trwają
  • Sterownik AMD ISP4, kontroler PCIe Gen6 Switchtec
  • Rozszerzona konfiguracja dla handheldów OneXPlayer i wsparcie pada HORI Wireless Switch Pad

Drobne, ale odczuwalne

  • Optymalizacja mutexa dla potoków (pipe) zmniejsza rywalizację i daje od 6% do 28% wyższą przepustowość pod obciążeniem.
  • Przyspieszono odczyt /proc/filesystems i /proc/interrupts.
  • BPF: odzysk z page faultów w arenach przez scratch page, ptep_try_set() do bezblokadowej instalacji wpisów na x86/arm64, argumenty na stosie dla funkcji BPF i kfuncs, szybkie podpinanie do wielu funkcji naraz (tracing_multi) i zmienne rozmiarowo hash mapy.
  • Naprawiono wyścig przy odblokowywaniu robust futex.
  • Usunięto CONFIG_READ_ONLY_THP_FOR_FS: transparent huge pages dla plików działają teraz również przy zapisie, nie tylko przy odczycie.

AI jako “nowa normalność”

Największą różnicą w tym cyklu w stosunku do poprzednich nie jest żadna pojedyncza funkcja, tylko sposób, w jaki powstawał. Torvalds opisał skalę poprawek napływających w kolejnych RC jako “nową normalność”, wprost wiążąc to z narzędziami AI, które ciągle skanują kod jądra i wyłapują błędy przeoczone albo odkładane przez ludzi od lat. Szacunkowo około 5% commitów w tym wydaniu nosi tag assisted-by, oznaczający udział narzędzia AI w znalezieniu lub przygotowaniu poprawki. Człowiek wciąż triażuje każde zgłoszenie i zatwierdza zmianę, ale wolumen pracy przeglądowej wyraźnie wzrósł. Torvalds bronił już tego kierunku wcześniej, mówiąc krytykom, że mogą “zforkować jądro albo odejść”, jeśli im to nie pasuje.

Kiedy trafi do dystrybucji

To wydanie non-LTS. Pierwsze dostaną je dystrybucje rolling (Arch, openSUSE Tumbleweed) i Fedora 45, a na Ubuntu 26.10 trafi jako opcjonalne jądro HWE.

Źródła: Phoronix, 9to5Linux, Kernel Newbies, XDA Developers, strncpy, BetaNews, AI review, Slashdot