асинхронный ввод-вывод нового поколения и VPN прямо в ядреnext-generation async I/O and a VPN right in the kernel
Три года без единого драматического взлома безопасности (в отличие от предыдущей ветки) — вместо этого системный пересмотр того, как Linux делает асинхронный I/O, слияние стороннего VPN-протокола в мейнлайн за рекордные сроки и годы публичных обсуждений Rust в ядре, которые так и не завершились мержем внутри самой этой ветки.Three years without a single dramatic security crisis (unlike the previous branch) — instead, a systemic rethink of how Linux does async I/O, a third-party VPN protocol merging into mainline in record time, and years of public debate about Rust in the kernel that never quite closed with a merge within this branch itself.
Ветка 5.x охватывает три с половиной года — с 3 марта 2019 (5.0.0) до 31 июля 2022 (5.19, последний релиз перед сменой номера на 6.0). Модель разработки не менялась четвёртый раз подряд. Главный технический сюжет ветки — io_uring (5.1, май 2019), новый интерфейс асинхронного ввода-вывода, спроектированный так, чтобы наконец закрыть многолетние ограничения POSIX AIO и epoll через общие кольцевые буферы между ядром и userspace. Второй заметный сюжет — WireGuard (5.6, март 2020), VPN-протокол, слившийся в мейнлайн необычно быстро для внешнего проекта такого масштаба. Третий, менее очевидный на момент событий — многолетние публичные обсуждения Rust в ядре, начавшиеся именно в этот период, но фактически завершившиеся мержем инфраструктуры лишь в следующей ветке, 6.1 (декабрь 2022) — за пределами формальных рамок 5.x.The 5.x branch spans three and a half years — from March 3, 2019 (5.0.0) to July 31, 2022 (5.19, the last release before the number changed to 6.0). The development model didn't change for the fourth time running. The branch's main technical story is io_uring (5.1, May 2019), a new asynchronous I/O interface designed to finally close the long-standing limitations of POSIX AIO and epoll via shared ring buffers between kernel and userspace. The second notable story is WireGuard (5.6, March 2020), a VPN protocol that merged into mainline unusually fast for an external project of that scale. The third, less obvious at the time — years of public debate about Rust in the kernel, which began during this period but only actually closed with an infrastructure merge in the next branch, 6.1 (December 2022) — outside 5.x's formal boundaries.
| версияversion | датаdate | что именно изменилосьwhat actually changed |
|---|---|---|
| 5.0.0 | 2019-03-03 | снова чисто нумерационный жест (см. 3.x, 4.x) — минорная цифра 4.20 разрослась; по содержанию прямое продолжение 4.20 без архитектурного разрываagain a purely numerical gesture (see 3.x, 4.x) — the 4.20 minor number had grown unwieldy; content-wise a direct continuation of 4.20 with no architectural break |
| 5.1 | 2019-05-05 | io_uring — новый интерфейс асинхронного ввода-вывода поверх общих кольцевых буферов submission/completion между ядром и userspace, поддержка и буферизованного, и небуферизованного I/O, плюс асинхронный polled I/O; масштабная переработка VFS для снятия ограничений старого дизайна mount(2)io_uring — a new async I/O interface built on shared submission/completion ring buffers between kernel and userspace, supporting both buffered and unbuffered I/O plus async polled I/O; a large-scale VFS rework to remove limitations of the old mount(2) design |
| 5.4 | 2019-11-24 | exFAT входит в staging-область ядра — впервые не через сторонний модуль, а как часть исходников самого ядра (Microsoft передала спецификацию и патчи); последний крупный релиз 2019 годаexFAT lands in the kernel's staging area — for the first time not as a third-party module but as part of the kernel's own source tree (Microsoft contributed the spec and patches); the last major 2019 release |
| 5.6 | 2020-03-29 | WireGuard сливается в мейнлайн — компактный, легко аудируемый VPN-протокол вместо громоздкого IPsec; попутно: time namespaces, начальная поддержка USB4, асинхронный TRIM для SSD в Btrfs, ранний Multipath TCPWireGuard merges into mainline — a compact, easily auditable VPN protocol replacing bulky IPsec; alongside it: time namespaces, initial USB4 support, asynchronous SSD trimming in Btrfs, early Multipath TCP |
| 5.10 | 2020-12-13 | LTS-релиз (запланированная поддержка до 2026 — на год дольше, чем у 5.4): fast commits в ext4 для резкого сокращения задержки при частых файловых операциях, поддержка ARMv8.5 memory tagging, поддержка Amazon Nitro enclavesan LTS release (support planned through 2026 — a year longer than 5.4's): ext4 fast commits sharply reducing latency for frequent file operations, ARMv8.5 memory tagging support, Amazon Nitro enclave support |
| 5.15 | 2021-10-31 | LTS-релиз: новый драйвер NTFS (замена устаревшего, изначально экспериментального), начальная поддержка графики Intel Xe HPG/DG2, IOMMU-драйвер для Apple M1 — первые шаги в сторону поддержки Apple Siliconan LTS release: a new NTFS driver (replacing the older, originally experimental one), initial Intel Xe HPG/DG2 graphics support, an IOMMU driver for the Apple M1 — the first steps toward Apple Silicon support |
| 5.17 | 2022-03-20 | переписанный слой fscache, инструмент RTLA для анализа realtime-свойств ядра, поддержка CO-RE (Compile Once — Run Everywhere) для BPF-программ, переносимых между версиями ядра без перекомпиляцииa rewritten fscache layer, the RTLA tool for analyzing the kernel's realtime properties, CO-RE (Compile Once — Run Everywhere) support letting BPF programs run across kernel versions without recompiling |
| 5.18 | 2022-05-22 | переход с устаревшего стандарта C89 на C11 для сборки самого ядра; продолжение доработки io_uring; RSA-шифрование для virtio-cryptothe kernel's own build switches from the outdated C89 standard to C11; continued io_uring refinement; RSA encryption for virtio-crypto |
| 5.19 | 2022-07-31 | последний релиз ветки — поддержка новых процессоров и GPU; на момент выхода Торвальдс уже публично рассуждал о возможном мерже Rust-инфраструктуры «в одной из ближайших версий», но реальный merge случится только в 6.1the branch's final release — support for new CPUs and GPUs; at release time Torvalds was already publicly discussing a possible Rust-infrastructure merge "in one of the upcoming versions," but the actual merge wouldn't happen until 6.1 |
До io_uring у Linux было два неидеальных инструмента для асинхронного ввода-вывода: POSIX AIO, поддерживавший по сути только небуферизованный (O_DIRECT) файловый I/O с массой оговорок, и epoll, отлично работавший для сетевых сокетов, но не для обычных файловых операций. Автор io_uring, Йенс Аксбое (Jens Axboe), спроектировал принципиально другой механизм: приложение и ядро делят два кольцевых буфера в общей памяти — submission queue (SQ) для отправки запросов и completion queue (CQ) для получения результатов — что позволяет отправлять операции ввода-вывода и забирать их результаты почти без системных вызовов на каждую операцию, резко снижая накладные расходы под высокой нагрузкой. Возможность появилась в 5.1 (5 мая 2019) сразу поддерживающей и буферизованный, и небуферизованный I/O, а также асинхронный polled режим, и с самого начала была спроектирована так, чтобы расширяться далеко за пределы файлового I/O — что в последующие годы и произошло: сеть, таймеры, множество других операций.Before io_uring, Linux had two imperfect tools for async I/O: POSIX AIO, which in practice only really supported unbuffered (O_DIRECT) file I/O with a long list of caveats, and epoll, which worked great for network sockets but not for regular file operations. io_uring's author, Jens Axboe, designed a fundamentally different mechanism: the application and kernel share two ring buffers in shared memory — a submission queue (SQ) for sending requests and a completion queue (CQ) for retrieving results — letting I/O operations be submitted and their results collected with almost no per-operation syscalls, sharply cutting overhead under heavy load. The feature landed in 5.1 (May 5, 2019), supporting both buffered and unbuffered I/O plus an async polled mode right from the start, and was designed from day one to expand well beyond file I/O — which is exactly what happened in the following years: networking, timers, and many other operations.
exFAT — файловая система Microsoft, широко используемая на SD-картах и флешках большого объёма, — годами поддерживалась в Linux только через сторонние модули (FUSE-реализации или неофициальные патчи) из-за патентных опасений. Ситуация изменилась, когда Microsoft сама передала спецификацию и код в сообщество: 5.4 (24 ноября 2019) впервые включила exFAT в staging-область непосредственно исходников ядра — промежуточный этап перед полной интеграцией в основное дерево, пройденный уже в следующих релизах. Это показательный пример того, как патентная политика крупного вендора может годами определять судьбу вполне зрелой технической возможности в open-source ядре.exFAT — Microsoft's filesystem, widely used on large SD cards and flash drives — had for years been supported in Linux only through third-party modules (FUSE implementations or unofficial patches) due to patent concerns. That changed when Microsoft itself contributed the spec and code to the community: 5.4 (November 24, 2019) first included exFAT in the kernel source tree's staging area — an intermediate step before full integration into the main tree, completed in later releases. It's a telling example of how a large vendor's patent policy can determine a perfectly mature technical feature's fate in an open-source kernel for years.
WireGuard разрабатывался Джейсоном Донефилдом (Jason A. Donenfeld) как принципиально более простая альтернатива IPsec и OpenVPN: минималистичный кодбейс, который проще формально верифицировать и аудировать, современная криптография без legacy-опций и режимов согласования, конфигурация в несколько строк вместо страниц настроек. Торвальдс лично хвалил качество кода задолго до мержа, называя его «произведением искусства» на фоне остального сетевого стека. WireGuard попал в дерево network maintainer'а Дэйва Миллера в декабре 2019, а Торвальдс подтянул его в свою ветку уже к 5.6 (29 марта 2020) — необычно быстрый путь для стороннего проекта такого масштаба в мейнлайн, обычно занимающий годы. Этот же релиз принёс менее заметные, но полезные вещи: time namespaces (независимое системное время для контейнеров, полезное, например, для тестирования time-travel сценариев) и асинхронный TRIM для SSD в Btrfs.WireGuard was developed by Jason A. Donenfeld as a fundamentally simpler alternative to IPsec and OpenVPN: a minimal codebase easier to formally verify and audit, modern cryptography with no legacy negotiation modes or options, configuration in a few lines instead of pages of settings. Torvalds personally praised the code's quality well before the merge, calling it "a work of art" against the rest of the networking stack. WireGuard landed in network maintainer Dave Miller's tree in December 2019, and Torvalds pulled it into his own branch already by 5.6 (March 29, 2020) — an unusually fast path to mainline for a third-party project of that scale, which usually takes years. The same release brought less visible but useful additions: time namespaces (independent system time for containers, useful for testing time-travel scenarios, for instance) and asynchronous SSD trimming in Btrfs.
На фоне предыдущей ветки, потратившей почти год на аварийные патчи Meltdown/Spectre, 5.10 (13 декабря 2020) и 5.15 (31 октября 2021) выглядят почти спокойно — плановая инженерная работа без пожаротушения. 5.10 получила расширенный жизненный цикл поддержки (до 2026 года, на год дольше 5.4) и fast commits в ext4, резко сокращающие задержку при частых файловых операциях за счёт упрощённого журналирования небольших изменений. 5.15 принесла новый драйвер NTFS (пришедший на смену старому, изначально помеченному экспериментальным ещё в прошлых десятилетиях) и первые шаги в сторону поддержки Apple Silicon — IOMMU-драйвер для Apple M1, за несколько лет до того, как полноценная поддержка этого железа стала обыденностью для пользователей Asahi Linux и подобных проектов.Against the backdrop of the previous branch, which spent nearly a year on emergency Meltdown/Spectre patches, 5.10 (December 13, 2020) and 5.15 (October 31, 2021) look almost calm — planned engineering work without firefighting. 5.10 got an extended support lifecycle (through 2026, a year longer than 5.4's) and ext4 fast commits, sharply cutting latency for frequent file operations through simplified journaling of small changes. 5.15 brought a new NTFS driver (replacing the old one, originally flagged experimental decades earlier) and the first steps toward Apple Silicon support — an IOMMU driver for the Apple M1, years before full support for that hardware became routine for Asahi Linux users and similar projects.
Разговоры о поддержке Rust в ядре начались задолго до формального мержа: ещё весной Торвальдс упоминал версию 5.14 как возможную цель, срок сдвигался несколько раз. К моменту выхода 5.19 (31 июля 2022, последний релиз ветки) Торвальдс уже открыто говорил, что Rust-инфраструктура может попасть «в одну из ближайших версий» — формулировка, которая на тот момент означала неопределённость, а не близкий финиш. Фактический мерж базовой инфраструктуры (позволяющей писать отдельные драйверы на Rust, не переписывая ядро целиком) состоялся только в 6.1 в декабре 2022 — уже за пределами 5.x. Приписывать эту веху ветке 5.x, как иногда делают задним числом из-за многолетних анонсов внутри неё, — историческая неточность: обсуждения были здесь, реализация — нет.Talk about Rust support in the kernel started well before any formal merge: as early as spring, Torvalds had mentioned 5.14 as a possible target, and the timeline slipped several times. By the time 5.19 shipped (July 31, 2022, the branch's last release), Torvalds was already openly saying Rust infrastructure might land "in one of the upcoming versions" — phrasing that at the time signaled uncertainty, not an imminent finish line. The actual merge of the base infrastructure (letting individual drivers be written in Rust without rewriting the whole kernel) only happened in 6.1 in December 2022 — outside 5.x entirely. Attributing this milestone to the 5.x branch, as sometimes happens retroactively because of the years of announcements made within it, is a historical inaccuracy: the discussions lived here, the implementation didn't.
К 5.19 ядро получило современный интерфейс асинхронного I/O (io_uring), ставший фундаментом для высокопроизводительных приложений (баз данных, event-loop'ов, серверов) в последующие годы, штатный VPN-протокол (WireGuard) вместо необходимости городить IPsec или полагаться на сторонние модули, и файловую систему exFAT прямо в дереве ядра. Модель разработки не изменилась — та же непрерывная схема с 2.6. Rust оставался темой обсуждений, а не реализованной возможностью: инфраструктура появится лишь в следующей ветке. По контрасту с 4.x, где почти год ушёл на аварийное реагирование, 5.x — пример спокойного, планового развития без единого события уровня Meltdown/Spectre.By 5.19 the kernel had a modern async I/O interface (io_uring) that became the foundation for high-performance applications (databases, event loops, servers) in subsequent years, a standard VPN protocol (WireGuard) instead of having to wrangle IPsec or rely on third-party modules, and the exFAT filesystem right in the kernel tree. The development model hadn't changed — the same continuous scheme from 2.6. Rust remained a topic of discussion rather than a shipped feature: the infrastructure would only arrive in the next branch. In contrast to 4.x, where nearly a year went to emergency response, 5.x is an example of calm, planned development without a single Meltdown/Spectre-level event.
Многолетние публичные анонсы Торвальдса о возможном скором мерже Rust создают у многих впечатление, что поддержка появилась ещё в 5.x — старые версии этого самого материала повторяли ту же ошибку. Формальный merge базовой Rust-инфраструктуры состоялся только в 6.1 (декабрь 2022), за пределами формальных границ 5.x, которая закончилась на 5.19 в июле того же года.Torvalds's years of public hints about a possible upcoming Rust merge leave many people with the impression that support arrived already in 5.x — earlier versions of this very material repeated the same mistake. The formal merge of the base Rust infrastructure only happened in 6.1 (December 2022), outside 5.x's formal boundary, which ended at 5.19 in July of that year.
Упрощение «io_uring ускоряет то, что раньше делал epoll» скрывает главное отличие: epoll — это механизм уведомления о готовности (readiness notification), сам ввод-вывод всё равно выполняется отдельными системными вызовами; io_uring — механизм подачи и завершения самих операций через общую память, минимизирующий число системных вызовов как таковых, а не просто ускоряющий цикл уведомлений. Это разные модели, а не два варианта одного и того же API с разной скоростью.The simplification "io_uring speeds up what epoll used to do" hides the key difference: epoll is a readiness-notification mechanism — the actual I/O still happens via separate syscalls; io_uring is a mechanism for submitting and completing the operations themselves through shared memory, minimizing the number of syscalls as such, not just speeding up a notification loop. These are different models, not two speed variants of the same API.
Включение кода exFAT в дерево ядра само по себе не гарантирует, что каждый дистрибутив включит его сборку по умолчанию или что все патентные вопросы сняты во всех юрисдикциях — некоторые сборки и по сей день собирают ядро без этого модуля или держат его опциональным, в зависимости от политики конкретного дистрибутива и региона распространения. Наличие кода в апстриме и его фактическое присутствие в конкретном установленном дистрибутиве — разные вещи.Including exFAT code in the kernel tree doesn't by itself guarantee every distro ships it built in by default, or that every patent question is settled in every jurisdiction — some builds to this day compile the kernel without that module or keep it optional, depending on the specific distro's policy and distribution region. Code being present upstream and its actual presence in a specific installed distro are different things.