How To

Ubuntu 26.04 vs 24.04 LTS: Should You Upgrade Now?

The 24.04 to 26.04 upgrade prompt is open now. Ubuntu 26.04.1 LTS shipped in late August 2026, and Canonical switched the release upgrader on for 24.04 machines with it. The question behind every Ubuntu 26.04 vs 24.04 search has not changed, though: does your box gain enough from the new kernel line, the Rust userland, the cgroup v1 cutoff and the Wayland-only desktop to be worth the move, or should it sit on 24.04 until 2029?

Original content from computingforgeeks.com - post 166620

We compare kernel, toolchain, desktop, core defaults, APT, server runtimes, security and upgrade traps, then look at what 26.10 shows about the road ahead. The version tables came off a live 24.04.4 box and a live 26.04 box four months after launch, with the 26.04 side re-checked on a 26.04 server that was a few updates behind, which turned out to be useful. I re-read the LTS upgrade feed and the Canonical support table in October 2026, and the feed now lists 26.04.1 and 24.04.5 as the current point releases. Our Ubuntu 26.04 LTS features guide has the feature-by-feature tour.

Ubuntu 26 vs 24: the 30-second answer

Most readers fit one of five situations, and the right move for each one is different. The evidence for every row follows further down, so read the table first and then jump to the sections that match your setup:

Your situationDo thisWhy
Desktop power user on 24.04 who wants GNOME 50 polish and newer userlandUpgrade now26.04.1 is out and do-release-upgrade offers 26.04 to 24.04 boxes on the default Prompt=lts. The first point release has already absorbed the launch regressions.
Production server, stable workload, no compelling new featureStay on 24.04 until May 2029, or longer with Ubuntu Pro24.04 has standard support to May 2029, ESM to May 2034 and the Legacy add-on to May 2039. Nothing in 26.04 forces a move.
Container host running Docker < 20.10, LXC with cgroup v1, or anything that pins to the v1 hierarchyDo not upgrade yet. Migrate to cgroup v2 first, then upgrade on your schedule26.04 will not run cgroup v1 workloads. The kernel parameters that used to force the legacy hierarchy no longer do anything, and this is the most common upgrade blocker.
Fresh install for a new server, workstation, or labGo straight to 26.04Standard support to May 2031 and the Legacy add-on to May 2041, a newer toolchain, post-quantum OpenSSL and SSH. There is no reason to install a two-year-old LTS on new hardware.
Tempted by 26.10 for 100% Rust coreutils or GNOME 51Stay on an LTS26.10 is an interim release supported until July 2027, and TPM-backed FDE systems cannot upgrade from 26.04 to it at release.

The upgrade decision is now about your workload, not the calendar. If none of the blockers in the cgroup, dracut and sudo sections apply to you, the remaining reasons to hold back on a desktop are thin.

Side-by-side: the versions that actually change

These numbers were captured from running VMs, not copied from release notes. Both columns are apt-cache policy candidates pulled four months after launch from a 24.04.4 box and a 26.04 box. The archive keeps moving on both sides through stable release updates, so treat the patch digits as a floor and the major and minor versions as the comparison that matters.

ComponentUbuntu 24.04.4 LTS (HWE as of capture)Ubuntu 26.04 LTSPractical impact
CodenameNoble NumbatResolute RaccoonAPT source line changes: noble → resolute
Linux kernel (GA)6.8.07.0.0First LTS on the 7.x line; enables Intel Nova Lake, AMD Zen 6
Linux kernel (HWE)7.0.0n/a (base kernel is 7.0)24.04’s HWE stack has rolled forward to the same 7.0 kernel 26.04 ships. Desktop installs track HWE by default, server installs track GA
systemd255.4259.5cgroup v1 support is gone (upstream dropped it in 258, and Canonical notes it as removed in 26.04’s 259); v1-pinned workloads break, though the host itself still boots on v2
GNOME4650Four major versions jumped. X11 session removed from Ubuntu Desktop (other flavours keep X.org)
APT2.8.33.2.0New solver, apt-key removed, deb822 sources are the default
sudoGNU sudo 1.9.15p5sudo-rs 0.2.13 (Rust)Memory-safe rewrite; roughly drop-in but edge cases differ
coreutilsGNU coreutils 9.4rust-coreutils 0.8.0 (uutils) at capture, 0.10.0 now in the archive; GNU still installablecp, mv and rm are still GNU builds on 26.04. See our uutils vs GNU coreutils benchmarks
initramfs generatorinitramfs-tools 0.142dracut 110Custom hooks under /etc/initramfs-tools/ do not run under dracut; port them, or switch back to initramfs-tools, which stays supported
NTP clientsystemd-timesyncdchrony 4.8Only new installs get chrony. An upgraded host keeps timesyncd until you run apt-mark auto systemd-timesyncd then apt install chrony
Python (default)3.12.33.14.3Two minor jumps. distutils fully gone, type-parameter syntax mature
OpenSSH9.6p110.2p1Adds ML-KEM post-quantum hybrid KEX; DSA keys removed
OpenSSL3.0.13 (Jan 2024)3.5.5 (Jan 2026)26.04 ships with post-quantum algorithms and the legacy provider for old ciphers
GCC13.215.2Same C23/C++26 progression most distros tracked through 2025
glibc2.392.43Minor ABI changes; recompiling is rarely required
Rust (toolchain)1.751.93 (1.91 / 1.92 parallel)Cargo resolver v3, edition 2024 stable
Go1.221.26Range-over-func stable, new testing/synctest
OpenJDK (default)21 LTS25 LTSPattern matching for switch finalized, Virtual threads mature
LLVM / Clang1821Affects eBPF toolchains and any project using clang-tidy
.NET (default)810Major jump; .NET 9 was STS only
PHP8.3.68.5Backtick operator deprecated; non-canonical cast names removed
PostgreSQL1618Canonical cites up to 3× when reading from storage, thanks to PG 18’s new async I/O
MySQL8.08.4 LTSFirst LTS version of MySQL since the series was introduced
MariaDB10.1111.8.6 LTSMoved into main; full support, not universe
Samba4.19.54.23.6VFS modules consolidated; transitional packages removable
LibreOffice24.226.2Major UI and performance refresh
Firefox / Thunderbirdsnap (tracks latest)snap (tracks latest)Both are snap-installer stubs in the archive on either release, so the snap channel decides your version, not the distro
GIMP2.10 (if installed)3.2GTK3, non-destructive editing, multi-threaded paint
Default terminalGNOME TerminalPtyxis (GTK4, container-aware)Reads .container metadata; tabs can pin to specific podman/toolbx containers
Default PDF viewerEvincePapers (GTK4, Rust)Faster cold start, HiDPI fixes
Default image viewerEye of GNOMELoupe (GTK4, Rust)Memory-safe, smoother pan/zoom
Default video playerTotemShowtimeCaveat: NVIDIA driver 580 crashes Showtime; 595+ required
Minimum desktop RAM4 GB6 GBTight on older laptops. The 26.04 release notes put Ubuntu Server as low as 1.5 GB
ARM64 desktop ISOCommunity-onlyOfficial (Snapdragon X Elite supported)First LTS with an official ARM64 desktop image
TPM-backed FDEExperimentalGeneral availabilityProductionized, with passphrase management UI

To see how far the 26.04 column has drifted since that capture, we asked a 26.04 server for its identity and the current archive candidates of the packages that matter most in this comparison:

grep -E "PRETTY|VERSION=" /etc/os-release; uname -r
apt-cache policy linux-generic systemd sudo-rs rust-coreutils python3 openssh-server openssl apt | grep -E "^[a-z]|Candidate"

Two things stand out in the output. The release string still reads 26.04 LTS with no point number, because that server had not taken every pending update yet. The kernel and coreutils lines have moved the most, with the GA kernel package at 7.0.0-38 and rust-coreutils at 0.10.0, while Python, OpenSSL, OpenSSH and APT stayed on the same upstream versions with Ubuntu patch bumps:

PRETTY_NAME="Ubuntu 26.04 LTS"
VERSION="26.04 LTS (Resolute Raccoon)"
7.0.0-27-generic
linux-generic:
  Candidate: 7.0.0-38.38
systemd:
  Candidate: 259.9-0ubuntu0.1
sudo-rs:
  Candidate: 0.2.13-0ubuntu1.2
rust-coreutils:
  Candidate: 0.10.0-1ubuntu2~26.04.1
python3:
  Candidate: 3.14.3-0ubuntu2
openssh-server:
  Candidate: 1:10.2p1-2ubuntu3.8
openssl:
  Candidate: 3.5.5-1ubuntu3.7
apt:
  Candidate: 3.2.0

On that server the running kernel (7.0.0-27) sits behind the 7.0.0-38 candidate because the box had not rebooted into its latest kernel update, which is normal on a server between maintenance windows. The point-release string lives in base-files: the 26.04.1 changelog bumps /etc/os-release to 26.04.1 (LP: #2164885), and this box still had the older package installed:

apt-cache policy base-files | head -3

The installed and candidate lines tell the story, so after a full upgrade /etc/os-release is the place to confirm 26.04.1:

base-files:
  Installed: 14ubuntu6.1
  Candidate: 14ubuntu6.2

The four terminal captures below come from the comparison VMs on an early 26.04 development build with kernel 7.0.0-10 and APT 3.1.16. The GA release shipped kernel 7.0.0-14 and APT 3.2.0, so read the screenshots for the shape of the change, not the patch numbers. Replicate any of them with uname -r, sudo --version, systemctl --version and apt --version. Start with the release and kernel identity on each box:

Ubuntu 26.04 vs 24.04 kernel and release version comparison

The sudo binary is the clearest one-command tell between the two releases, since 26.04 answers with the Rust implementation:

sudo-rs 0.2.13 on Ubuntu 26.04 vs GNU sudo 1.9.15p5 on Ubuntu 24.04

The sudo-rs package has only taken Ubuntu patch updates since launch, so the version in that capture is still the upstream version you get today.

Support end dates for 24.04, 26.04 and 26.10

Both LTS releases get the same 5 + 5 + 5 shape, so moving to 26.04 buys you exactly two extra years at every tier and nothing more. The dates below are the ones Canonical lists on its Ubuntu release cycle page:

Support tierUbuntu 24.04 LTS endsUbuntu 26.04 LTS ends
Standard security maintenanceMay 2029May 2031
Expanded Security Maintenance (Ubuntu Pro)May 2034May 2036
Break/bug support (Ubuntu Pro + Support)May 2034May 2036
Legacy add-onMay 2039May 2041

The 26.04 release notes word the standard window as “supported until April 2031”, one month earlier than the release cycle table, so plan your own migration deadline against April and you are covered either way. Ubuntu Pro is free for personal use on up to five machines, which makes the ESM years a real option for a homelab that wants to stay on 24.04 well past 2029.

26.10 is a different animal. The release notes from Canonical give it 9 months of support, from its 15 October 2026 release until July 2027, with no ESM or Legacy tier. That is fine for a test box or a laptop you reinstall often, and the wrong choice for anything you expect to leave alone.

The upgrade prompt is open: what 26.04.1 changed

Ubuntu holds the do-release-upgrade prompt for LTS-to-LTS jumps until the first point release, and that gate opened with 26.04.1. The gate itself is the Supported field in the LTS meta-release feed shown below. The 26.04.1 changelog rolls up every security update published through 25 August 2026, and it also switches 26.04’s own upgrade policy to Prompt=lts (LP: #2154602), which matters for 26.04 machines now that 26.10 is out. On the 24.04 side, the current point release is 24.04.5.

The upgrader decides what to offer from a meta-release feed, and you can read the same feed from any machine to see what your boxes will be told:

curl -s https://changelogs.ubuntu.com/meta-release-lts | grep -A4 -E "Dist: (noble|resolute)"

The Supported: 1 line under resolute is the gate. Before the point release that field read 0 (an archived copy of the feed from 26 August still shows it), and that single field is why a fully patched 24.04 machine refused to offer 26.04 all summer:

Dist: noble
Name: Noble Numbat
Version: 24.04.5 LTS
Date: Thu, 25 April 2024 00:24:04 UTC
Supported: 1
--
Dist: resolute
Name: Resolute Raccoon
Version: 26.04.1 LTS
Date: Thu, 23 April 2026 00:26:04 UTC
Supported: 1

Ignore the Date lines when you read this feed. They carry the original release date of each series (April 2024 and April 2026), not the date of the point release named in the Version line.

Your own machine only follows that feed if its upgrade policy allows LTS jumps. Check the policy line before you assume the upgrader is broken:

grep ^Prompt /etc/update-manager/release-upgrades

On our 26.04 server it answers with the LTS policy, and a stock 24.04 install should show the same value, which is the one that lets a 24.04 box see 26.04:

Prompt=lts

With Prompt=lts in place, do-release-upgrade -c on a patched 24.04 machine is the quick way to confirm the offer before you schedule anything. If the file says Prompt=never, someone turned release upgrades off on purpose, often an image builder or a config-management role, so find out why before you change it. On a 26.04 machine the same line decides whether you get offered 26.10: Prompt=normal follows interim releases, and because the file is a conffile, a copy someone edited locally keeps its old value after 26.04.1. Set it to Prompt=lts on any 26.04 box that must stay on the LTS, especially one with TPM-backed encryption.

Older releases still have to hop. Canonical’s 26.04 release notes say that from 22.04 LTS or 25.04 you must first upgrade to either 24.04 LTS or 25.10 before you can go to 26.04, so a 22.04 server faces two separate upgrades and two reboots.

Kernel 6.8 versus kernel 7.0

The version bump from 6.x to 7.0 is Linus Torvalds following his “bump major when we hit X.19” convention, not a single architectural rewrite. The substantive wins over the 6.8 GA kernel that 24.04 servers run by default are still meaningful:

  • Hardware enablement: Intel Nova Lake (late-2026 consumer), AMD Zen 6 / Venice server chips, better Battlemage (Arc B580/B570) support, Snapdragon X Elite graphics
  • Extensible scheduling (sched_ext): the BPF-backed scheduler hooks are in the kernel, though the scx scheduler tools are not packaged in the 26.04 archive, so you build them yourself
  • Kdump default: crash dumps enabled by default on both desktop and server installs
  • NVIDIA driver improvements: Dynamic Boost on by default, suspend/resume finally works reliably on laptops with Optimus

For 24.04 users, this matters less than it sounds because the HWE stack on 24.04 has already rolled forward to the 7.0 line. Users who kept the GA kernel (6.8) stayed on 2024-vintage hardware support. Users who follow HWE are on the same kernel line as 26.04 and gain nothing here by upgrading the distro.

GNOME 46 versus GNOME 50: Wayland-only is the real story

The four-version GNOME jump brings real polish: variable refresh rate on by default, smoother fractional scaling, a heavily improved Files app, a new parental controls panel, and Sysprof installed by default for quick desktop profiling. The headline change is that GDM no longer offers an X11 login session on Ubuntu Desktop. The entire session runs on Wayland. XWayland remains, so legacy X11 clients still work.

This is the single biggest breaking change for desktop users:

  • If you rely on xdotool, wmctrl, or global input hooks, many will silently fail. Port to ydotool or the compositor-specific equivalents
  • Screen recording and screen sharing in video calls now go through the PipeWire portal. Older Electron apps that shipped before 2023 may need updates
  • NVIDIA users are fine. Explicit Sync landed in NVIDIA 555 and has been stable since. Drivers 580 and newer (excluding the one Showtime regression) are solid
  • The memory ceiling moved. The desktop ISO now lists 6 GB as the minimum. It will boot on 4 GB, but heavy web apps and Electron stacks push into swap immediately
Ubuntu 26.04 LTS Resolute Raccoon GNOME 50 desktop

The desktop above is 26.04 on the stock GNOME 50 session. Same Ubuntu yaru theme and dock, noticeably crisper fractional scaling, and the default terminal icon in the Activities overview now launches Ptyxis instead of GNOME Terminal.

The default apps swap

A lot of the old GTK3 GNOME apps were replaced in 26.04. The new defaults are GTK4 or Rust rewrites, and most of them are notably snappier on cold start.

Role24.04 default26.04 defaultNotes
Terminal emulatorGNOME TerminalPtyxis (GTK4)Container-aware tabs, better theming; keybindings compatible with GNOME Terminal muscle memory
PDF viewerEvincePapersRust backend, HiDPI fixes, much faster on large PDFs
Image viewerEye of GNOMELoupeSmooth pan/zoom, memory-safe; raw-format support improved
Video playerTotemShowtimeKnown issue: crashes on NVIDIA driver 580. Use 595+ or swap for mpv
File managerFiles (Nautilus 46)Files (Nautilus 50)Same app, redesigned sidebar and path bar; network sessions persist properly
Document processorLibreOffice 24.2LibreOffice 26.2UI refresh, theme support, faster Calc recalculation
Image editorGIMP 2.10 (if installed)GIMP 3.2Non-destructive layers, multi-threaded paint, GTK3
Mail clientThunderbird (snap)Thunderbird (snap)26.04 launched on the 140 “Eclipse” ESR, but the deb is a ~20 KB transitional stub on both releases and the snap has since rolled well past it, so this is not an upgrade win
Resource monitorGNOME System MonitorResourcesNew GPU, battery, and sensor panels; faster refresh

If you depend on an old app, everything above is still installable via apt on 26.04. Evince, Eye of GNOME, Totem, GNOME Terminal, and System Monitor all remain in the archive. They are just not the default.

The Rust userland: sudo-rs and uutils coreutils

Ubuntu 26.04 is the first LTS where Rust is not experimental, optional, or isolated to a corner. Two long-standing C binaries get swapped for Rust rewrites on fresh installs:

  • sudo-rs replaces GNU sudo at /usr/bin/sudo. GNU sudo stays in the archive as the sudo package and installs its binary at /usr/bin/sudo.ws, so both are selectable through update-alternatives
  • rust-coreutils (uutils) ships in parallel with GNU coreutils. A fresh install prefers the Rust builds for most tools, but cp, mv and rm deliberately stay GNU on 26.04 because the Rust replacements still had open bugs at release. 26.10 moved those three as well, so this split is a 26.04 detail rather than the end state

List what the 26.04 VM actually has installed, because the shim packages decide which implementation answers when you type ls:

dpkg -l | grep -E 'coreutils|sudo-rs' | awk '{print $1,$2,$3}'

Returns a mix of rust-coreutils, coreutils-from-uutils (the symlinks shim), gnu-coreutils (fallback), and sudo-rs. This is the full picture:

ii coreutils 9.5-1ubuntu2+0.0.0~ubuntu25
ii coreutils-from-uutils 0.0.0~ubuntu25
ii gnu-coreutils 9.7-3ubuntu2
ii rust-coreutils 0.8.0-0ubuntu3
ii sudo-rs 0.2.13-0ubuntu1

That capture shows the version 26.04 released with. The archive has since moved rust-coreutils to 0.10.0 through a stable release update, so run a full upgrade before you judge compatibility on an older install.

For operators, behavior is close enough that common shell scripts just work. The catch is real: if you rely on GNU-specific long-option spellings or obscure ls --format flags, you may hit a error: unexpected argument instead of the quiet compatibility you had on 24.04. The GNU binaries are already on disk under a gnu prefix, so gnuls, gnudate and friends give you the old behavior one call at a time. To flip the whole system back, swap the provider package. Both providers Conflict on the virtual coreutils-from package and APT will not pick a winner on its own, so the removal is named explicitly with a trailing hyphen, the same form the Canonical summary for LTS users prints.

The first line below moves the system to GNU, the second brings the Rust set back. Add -s to either one first if you want to read the plan before APT touches an Essential package.

sudo apt install coreutils-from-gnu coreutils-from-uutils- --allow-remove-essential
sudo apt install coreutils-from-uutils coreutils-from-gnu- --allow-remove-essential

APT reports the trade as one removal and one install. The Essential-package warning is expected here, and the Summary line is the part to read before you confirm:

Installing:
  coreutils-from-gnu

REMOVING:
  coreutils-from-uutils

WARNING: The following essential packages will be removed.
This should NOT be done unless you know exactly what you are doing!
  coreutils-from-uutils

Summary:
  Upgrading: 0, Installing: 1, Removing: 1, Not Upgrading: 4

For sudo, the list of traps is shorter. sudo-rs implements the sudoers parser plus the most common flag set, but it does not implement the full plugin API that GNU sudo exposes. If your environment uses sudo_noexec.so or custom sudoers_policy plugins, select GNU sudo instead. LDAP-backed sudoers has no equivalent escape hatch: the sudo-ldap package is gone from 26.04 entirely, and the Canonical answer is LDAP authentication through PAM. Two more things bite automation: the password prompt changed to [sudo: authenticate], which breaks Expect-style scripts, and sudoreplay I/O logging is not implemented in sudo-rs. That last one is worth checking before you panic: the sudo package is a dependency of ubuntu-minimal, so GNU sudo is already on every 26.04 box as /usr/bin/sudo.ws alongside /usr/bin/sudoreplay.ws. You do not install anything, you just repoint the alternative:

sudo update-alternatives --set sudo /usr/bin/sudo.ws

The init system and cgroup story is the other userland change that shifts behavior in places you might not expect. The terminal capture below shows both boxes side by side so the deltas are obvious before you run the commands yourself.

Ubuntu 26.04 systemd 259 and cgroup v2 output compared with 24.04 systemd 255

Both boxes report cgroup2fs in that capture, which is why a stock 24.04 host has nothing to migrate. The cgroup section below covers the hosts that do.

Dracut replaces initramfs-tools

24.04 still builds its initramfs with initramfs-tools, the Debian-lineage generator Ubuntu has used for more than a decade. 26.04 switches to dracut, the RHEL-family tool. The feature set is richer (systemd inside the initrd, network booting, better encrypted-root handling), but any custom hooks you dropped into /etc/initramfs-tools/hooks/ or scripts/ simply will not run.

If you maintain a custom initramfs (encrypted root with a non-default unlock, network-boot tweaks, special storage drivers), budget a morning to port them. The dracut module format is different:

ls /usr/lib/dracut/modules.d/
# Each module is a directory with a module-setup.sh and optional scripts
# Your hooks become dracut modules with a well-defined API

You do not have to port on day one. The Canonical summary for LTS users says the original initramfs-tools remains supported and you can switch between the two implementations if required, so a host with hooks you cannot rewrite yet can stay on initramfs-tools while you port them.

The cgroup v1 cliff (this is the upgrade blocker)

24.04 defaults to cgroup v2 (“unified”) but keeps v1 support compiled in for compatibility. 26.04 will not drive it: the kernel still carries the v1 controllers, but upstream systemd deleted the legacy and hybrid hierarchies in 258, so v2 is always mounted at boot. Setting systemd.unified_cgroup_hierarchy=0 or systemd.legacy_systemd_cgroup_controller=1 no longer buys you anything, because there is no v1 left to fall back to. The host still boots. Your v1-dependent workloads are what break.

Check your current hierarchy before upgrading:

stat -fc %T /sys/fs/cgroup
cat /proc/1/cgroup | head -3
mount | grep cgroup

If you see cgroup2fs and a single unified hierarchy, you are already on v2 and the upgrade is safe. If you see tmpfs at /sys/fs/cgroup with separate per-controller mounts, you are on v1 and anything relying on that hierarchy will break on 26.04. The fix is to first move to v2 on 24.04 (remove the kernel parameter, reboot), verify your containers still work, and then upgrade to 26.04.

Who is actually on v1 in 2026? Rare, but it happens:

  • Docker older than 20.10 (Docker on modern Ubuntu is already fine)
  • LXC containers with lxc.cgroup.* rules instead of lxc.cgroup2.*
  • Legacy Kubernetes nodes with custom --cgroup-driver=cgroupfs setups from before 2022
  • Anything pinning v1 in /etc/default/grub for a specific workload

If any of the above describes your fleet, treat this as the real migration. The kernel and the desktop can wait.

APT 3.2, the new solver, and apt-key

APT jumped from the 2.8 line on 24.04 to the 3.2 line on 26.04. The headline change is the new solver. Dependency resolution is noticeably faster on large upgrades, and the conflict-explanation output is easier to read. Two smaller changes bite in automation:

  • apt-key was deprecated in 21.10 and is fully removed in 26.04. Third-party repos must use keyring files under /etc/apt/keyrings/ and reference them in the sources file’s Signed-By: field. If your cloud-init or Ansible still runs apt-key add, update it before the upgrade
  • deb822 .sources files are the default for the main archive. The classic /etc/apt/sources.list works, but the upgrade converts the main list to /etc/apt/sources.list.d/ubuntu.sources
Python, OpenSSL, OpenSSH and APT version deltas between Ubuntu 24.04 and 26.04

Our APT capture comes from that early development build, which still had APT 3.1.16; the GA release shipped APT 3.2.0, which is also the current candidate in the policy output near the top. Python, OpenSSL and OpenSSH change underneath you on the upgrade, but the apt-key removal is the change that breaks a playbook on its first run.

Server runtimes and databases

This is the table admins care about most. All versions are what comes out of apt install on a freshly minted VM from each release.

Stack24.0426.04Why it matters
PostgreSQL16.x18.xUp to 3× on storage reads per Canonical; incremental backup, async I/O
MySQL8.08.4 LTSOracle’s first explicit MySQL LTS release. mysql_native_password is deprecated and accounts that use it are locked out unless you enable the plugin, so move those accounts to caching_sha2_password before upgrading (re-enabling the old plugin is a stopgap that MySQL 9.7 removes)
MariaDB10.11 (universe)11.8.6 LTS (main)Canonical moved MariaDB into main with full support, not community
Redis / ValkeyRedis 7.0 (universe)Valkey 9.0.4 (main), Redis 8.0.5 (universe)Valkey moved into main and is the supported option. Redis did not go away, it stayed in universe and is actually newer than 24.04’s
Samba4.19.54.23.6VFS module consolidation; review vfs objects stanzas before upgrading
OpenSSH9.6p110.2p1ML-KEM-768×25519 hybrid KEX by default; DSA keys removed; PerSourcePenalties on by default, which can lock out CI runners and monitoring probes that fail auth repeatedly. Exempt them with PerSourcePenaltyExemptList (default none)
Nginx (archive)1.241.28.3nginx.org’s mainline repo now publishes resolute, so the noble-repo workaround from launch week is no longer needed
Apache2.4.582.4.66TLS 1.0/1.1 disabled in the default conf per RFC 8996
Docker (containerd)containerd.io 1.7 (Docker’s repo)containerd.io 2.0 (Docker’s repo); archive ships containerd 2.2.2Fresh Docker installs now use the containerd image store; existing systems keep the classic store on upgrade

The PostgreSQL 16 → 18 jump is not a simple apt upgrade. Run pg_upgrade with a dump and restore plan. Our Install PostgreSQL 18 on Ubuntu 26.04 guide covers the upgrade path in detail.

Security posture: what changed

  • Post-quantum cryptography: OpenSSL 3.5.5 ships with ML-KEM and ML-DSA algorithms. OpenSSH 10.2p1 enables the sntrup761x25519-sha512 and mlkem768x25519-sha256 hybrid KEX by default. Existing SSH sessions downgrade gracefully; new handshakes negotiate PQ hybrid when both ends support it
  • DSA key removal: OpenSSH 10.2 no longer accepts DSA keys. If you have ancient keys, rotate before upgrading
  • TLS 1.0 and 1.1 disabled in Apache: aligns with RFC 8996 and current browser defaults
  • TPM-backed FDE out of experimental: the installer exposes TPM-backed disk encryption as a supported option, with passphrase rotation from the UI. 24.04 shipped this as experimental
  • AppArmor permission prompting: the Security Center app prompts users for snap permission grants (camera, microphone, location). 24.04 had the same plumbing but no UI
  • SSSD now runs as non-root: the daemon drops to the sssd user at start. Directory permissions on /var/lib/sss change

None of this individually forces an upgrade. Together they make 26.04 the correct base for any new compliance-driven deployment in 2026 and beyond.

Breaking-change cheat sheet

Everything below worked on 24.04 and either fails or behaves differently on 26.04. Skim this table before you point any automation at a fresh 26.04 host, because most of these surface as a silent change in behavior rather than a clear error:

ChangeWhat breaksFix
apt-key removedAny cloud-init or Ansible playbook running apt-key addWrite keyrings to /etc/apt/keyrings/*.gpg and reference via Signed-By:
cgroup v1 removedDocker < 20.10, LXC with v1 rules, kernel param overridesMove to v2 on 24.04 first, verify, then upgrade
X11 session removed from Ubuntu Desktop (other flavours keep X.org)xdotool, some Electron apps pre-2023, screen sharing in old video-call clientsUse Wayland-native equivalents; update Electron apps to 2024+ builds
Postfix chroot default offHardening guides that assumed the chroot directory existsThere is no smtpd_chroot setting. Chroot is the 5th column of each service line in /etc/postfix/master.cf, and 26.04 supports it only partially now
/tmp is now tmpfsAnything parking large files or state in /tmp and expecting it to survive a reboot or exceed RAMUbuntu now ships upstream’s tmp.mount. Move durable scratch to /var/tmp, or mask the unit
System V init scripts deprecatedVendor-supplied SysV scripts that predate systemd26.04 still runs them. 26.10 removed systemd-sysv-generator, so port them to native units before you move past 26.04
DSA SSH keys removedAncient keys from pre-2015 deploymentsssh-keygen fresh ed25519 keys before upgrade

The SysV row is the one that changed since launch. It was a warning for “some future release” in April, and 26.10 has now made it real, so any vendor package that still ships only an /etc/init.d script has a fixed shelf life on Ubuntu.

Performance: what benchmarks actually show

One caveat before the numbers: the most-cited Phoronix comparisons were published in February and March 2026, against development snapshots rather than the shipped release, so treat them as directional rather than final. Broad strokes:

  • AMD Strix Point with RDNA 3.5 graphics: substantial lift for 3D workloads and compute, primarily driven by the newer Mesa stack rather than the kernel bump alone
  • Timed Linux kernel compile: modestly faster on 26.04 with GCC 15.2 and LTO tuning, in the single-digit percent range on high-core-count desktop parts
  • PostgreSQL pgbench: Canonical’s up to 3× figure is specifically about reads from storage, not mixed OLTP. Published pgbench 17 to 18 comparisons land nearer 20 to 30%, so size expectations off your own read/write mix
  • Network throughput: unchanged. This stack has been mature for years

Where 24.04 still has an edge: workloads that sit on the 24.04 HWE kernel and stress already-mature subsystems. The delta is noise-level for most web, API, and database hosts. If you care about real numbers, benchmark your own workload, not a published chart.

Upgrade 24.04 to 26.04 now, step by step

With the prompt open, the order of the checks matters more than the upgrade command itself, because the upgrader can only work with what the old system hands it. One check is new since launch, and it is worth running on every 24.04 machine that has been upgraded from an older release:

test -L /lib32 && ! test -e /lib32 && echo "dangling /lib32 symlink"

No output means /lib32 is either a working link or not there at all, which is what we got on our 26.04 server, and you can carry on. If it prints the warning, read the next section before you start, because that leftover link is what stops the base-files package in the middle of a release upgrade. With that out of the way, the sequence is:

  1. Back up, and confirm the host is on cgroup v2 with stat -fc %T /sys/fs/cgroup (it should say cgroup2fs)
  2. Run sudo apt update && sudo apt full-upgrade on 24.04, reboot, and confirm nothing is held back
  3. Remove every PPA that does not already publish resolute packages (check with apt policy); re-enable after the upgrade
  4. Confirm the offer with do-release-upgrade -c, then run sudo do-release-upgrade and answer the config-file prompts with N unless you know you need the new defaults
  5. Reboot, run sudo apt autoremove, and re-enable the PPAs that now publish for 26.04
  6. Verify your application stack end to end: systemd unit states, database connectivity, cron jobs, user logins

Our 24.04 to 26.04 upgrade walkthrough runs that sequence on a real server with every prompt shown, including the third-party repositories the upgrader disables and the Python virtualenvs that need rebuilding afterwards. Building fresh is the easier path if the box is mostly configuration: the step-by-step 26.04 install guide covers the installer, and initial server setup plus the post-install checklist cover what to do before the box faces the internet.

Error: “The base-files package cannot be installed because /lib32 is a dangling symbolic link”

This is Launchpad bug 2131303. The base-files pre-install script refuses to continue when one of the optional multilib alias links (/lib32, /libo32, /libx32) points at a /usr directory that no longer exists, which happens when the last package that shipped files in /usr/lib32 was removed. Reports on the bug include 24.04 to 26.04 upgrades that stopped at this point, and at least one that left the machine unbootable. The fix described in the bug makes the script remove a dangling alias link instead of aborting, and base-files recreates the link later if /usr/lib32 comes back. Until that fix reaches the package your upgrade installs, remove the dangling link yourself with sudo rm /lib32 (it is only a symlink, so nothing else goes with it) before you run do-release-upgrade. Run the same test against /libx32 and /libo32, because the bug covers all three, and follow the bug for the release-upgrader change that is meant to catch it up front.

What 26.10 shows about the road after 26.04

Ubuntu 26.10 (Stonking Stingray) was released on 15 October 2026, and it does not change the LTS decision on this page. It is still worth reading as a preview, because interim releases are where Ubuntu tries the defaults the next LTS is likely to ship, and several of them land on things 26.04 only went halfway on. The figures below come from the Canonical 26.10 release notes:

AreaUbuntu 26.04 LTSUbuntu 26.10What it means for a 26.04 box
Kernel7.07.3 (release images ship 7.3.0-9.9, based on 7.3-rc6)26.04 stays on 7.0 GA; newer kernels reach it through HWE, not through 26.10
GNOME5051Desktop polish only; no reason to leave an LTS for it
systemd259261.3SysV generator removed in 26.10
coreutilsuutils, with GNU cp, mv, rm100% Rust uutilsTest scripts that move or delete files under uutils before 28.04
D-Busdbus-daemondbus-broker for system and session busesWatch for tools that parse dbus-daemon logs or flags
Python3.14.33.14.7Same minor version; virtualenvs carry over
LLVM2122.1.8Matters for eBPF and clang-built projects
Rust / Go1.93 / 1.261.97.1 / 1.27Toolchain users can get these from upstream on 26.04 instead
OpenSSL3.54 (through 4.0.3)OpenSSL 4 drops engines; the PKCS#11 engine is gone in favor of the provider
OpenSSH10.2p110.5, split into openssh and openssh-gssapiFresh 26.10 installs have no GSSAPI/Kerberos in sshd unless you pick the -gssapi packages
MySQL8.4 LTS9.7 LTSThe next MySQL LTS jump to plan for

Two changes do not fit a version column. Ubuntu 26.10 adopts the Rust-based Sequoia PGP into the main archive, with sq and sqv as counterparts to gpg and gpgv, and the stated goal is for Sequoia to become the default OpenPGP toolchain. The same release notes are explicit that gpg and gpgv are still available in main as of 26.10, so nothing you script around GnuPG breaks yet. The second is that legacy System V script support is gone, which is the cheat-sheet row above coming due.

If you want to try 26.10 anyway, do it on a spare machine, and note these upgrade limits first:

  • Systems running TPM-backed full-disk encryption cannot upgrade from 26.04 to 26.10 at release; Canonical expects to enable it during the 26.10 lifecycle
  • On TPM-backed FDE systems, running update-grub after conventional GRUB customizations can leave the machine unable to boot (LP: #2157702)
  • The /lib32 fix in LP 2131303 targets the 26.10 series as well as 26.04, so run the same dangling-link check before that upgrade too

We have not run a 26.04 to 26.10 upgrade for this comparison. The 26.04 to 26.10 upgrade guide covers that path, and the Ubuntu 26.10 install guide is the cleaner way to get a test box.

Launch-window issues, and which ones are fixed

These are the problems that dominated the first weeks after release. Most of them only hit specific hardware, so check the list against your own machine before you read any of them as a reason to wait:

  • NVIDIA 580 + Showtime crash: the default video player segfaults on NVIDIA driver 580. Upgrade to driver 595 or install mpv
  • Intel iGPU regression in some GNOME apps: Arc and older Iris Xe users reported frame hitching in Resources and GNOME Weather. A fix was queued for a later 7.0 kernel update, and the 26.04 kernel has moved well past the 7.0.0-14 it shipped with, so re-test before assuming it still bites
  • Nginx mainline repo gap (fixed): nginx.org had no resolute suite at launch, which forced a noble-repo workaround. Upstream publishes resolute now, and the archive build has moved to the 1.28 line, so neither workaround is needed
  • snap-confine conflicts on upgrade from 25.10: rare but reported. Clean up with sudo apt install --reinstall snapd after the upgrade finishes
  • EFI System Partition weirdness: some UEFI boards (notably early AM5 and B460 boards) show the installer complaining about an unrecognized ESP. Creating the ESP manually before the installer runs works around it

None of these is a blocker for a server. The NVIDIA and Intel items are desktop problems, and the ESP one only matters on a fresh install.

Recommendation, by role

Collapsing everything above into a one-line answer for common roles:

RoleVerdictReasoning
Desktop power user with recent hardwareUpgrade nowReal wins in GNOME 50, GIMP 3.2, and the Ptyxis terminal. No kernel win: a 24.04 desktop already tracks HWE, so it is on 7.0 too
Desktop user on pre-2019 hardware with 4 GB RAMStay on 24.046 GB is the new minimum; GNOME 50 will be painful on older laptops
Production web / database server, stableStay on 24.04, plan the move before 2029No forcing function; 24.04 standard support runs to May 2029
Kubernetes / container hostAudit cgroup v1 first; upgrade after confirmationv1 is the blocker; everything else is cosmetic
New server, no legacyInstall 26.04Longer support, newer everything, PQ-ready SSH and TLS
Developer workstationUpgrade nowPython 3.14, Go 1.26, Rust 1.93, OpenJDK 25, LLVM 21 all matter for modern toolchains
Ubuntu MATE / Unity userCheck your flavor’s own support statement firstFlavors are community-maintained and their support periods can differ from Ubuntu’s, so confirm the 26.04 status on the flavor’s site
Someone who wants the newest of everythingRun 26.10 on a spare box, keep the main machine on 26.049 months of support, until July 2027

If you are on the fence about a server, the conservative answer is still the right one. 24.04 is a stable LTS with standard support to May 2029, and the only real mistake is upgrading a production host in a hurry and learning about cgroup v1 or a dangling /lib32 at 3 a.m. On a desktop, the point release removed the last good reason to wait.

Frequently asked questions

Is Ubuntu 26.04 stable enough for production now?

Yes for new builds, and yes for upgrades once you have cleared the checks above. 26.04.1 shipped in late August 2026 and Canonical opened the upgrade prompt with it, which is how the project signals that the LTS-to-LTS path is ready. Still give the upgrade a run on a staging host that matches production, because the blockers on this page are about your workload, not about the release.

Can I skip 24.04 and upgrade directly from 22.04 to 26.04?

No. Canonical’s 26.04 release notes say that from 22.04 LTS or 25.04 you first upgrade to 24.04 LTS or 25.10, then to 26.04. On a 22.04 server that means two release upgrades, so budget two maintenance windows or build a fresh 26.04 machine instead.

Will my Docker containers break after the upgrade?

Only if your Docker is ancient (older than 20.10) or if you have manually pinned cgroup v1 in /etc/default/grub. Docker 20.10 and newer runs on cgroup v2 without any changes. Check your host with stat -fc %T /sys/fs/cgroup; if it reports cgroup2fs, Docker will survive the upgrade unchanged.

How long is 24.04 supported if I do not upgrade?

Standard security maintenance for 24.04 runs until May 2029. With Ubuntu Pro, Expanded Security Maintenance extends that to May 2034, and the Legacy add-on reaches May 2039. There is no security-coverage reason to leave 24.04 before 2029.

Should I move to 26.10 instead of 26.04?

Not on a machine you depend on. 26.10 is supported until July 2027, so you sign up for another upgrade within nine months, and TPM-backed FDE systems cannot take the 26.04 to 26.10 upgrade at release. Use it on a spare box if you want to see 100% Rust coreutils and dbus-broker before they reach an LTS.

Does 26.04 break my existing Python virtualenvs?

Yes. The default Python moved from 3.12 to 3.14, and existing venvs are pinned to the interpreter they were created against. Recreate venvs after the upgrade: rm -rf .venv && python3 -m venv .venv && source .venv/bin/activate && pip install -r requirements.txt. If a project genuinely needs 3.12, the archive will not save you: 26.04 ships python3.14 and nothing older. Use the deadsnakes PPA, uv python install 3.12, or pyenv.

Both releases keep moving through stable release updates, so re-run the apt-cache policy check above against your own boxes before you fix a migration window. Canonical’s summary for LTS users is the authoritative list of what changed between the two LTS releases.

Keep reading

Upgrade Ubuntu 24.04 to Ubuntu 26.04 LTS (Step by Step) Ubuntu Upgrade Ubuntu 24.04 to Ubuntu 26.04 LTS (Step by Step) UFW Firewall Commands with Examples on Ubuntu 26.04 / 24.04 Security UFW Firewall Commands with Examples on Ubuntu 26.04 / 24.04 Backup and Restore Linux Systems with Timeshift Debian Backup and Restore Linux Systems with Timeshift Install Zen Browser on Ubuntu 26.04 / 24.04 Ubuntu Install Zen Browser on Ubuntu 26.04 / 24.04 Linux Terminal Shortcuts Cheat Sheet (Bash and zsh) Cheat Sheets Linux Terminal Shortcuts Cheat Sheet (Bash and zsh) How To Install PHP 8.2 on Ubuntu 24.04 / 22.04 Php How To Install PHP 8.2 on Ubuntu 24.04 / 22.04

Leave a Comment

Press ESC to close