Fedora

Fedora 45 vs Ubuntu 26.04: Detailed Comparison

You are choosing between a distro that moves every six months and one that promises to stay put until 2031. On a fresh VM that choice shows up in specific places: Fedora 45 boots about 1.3 seconds slower, carries a compiler and an OpenSSL that are a full major version ahead, and ships Podman in the base image. Ubuntu 26.04 LTS boots faster, runs a Rust sudo and Rust coreutils by default, and its Python build finished a pure Python benchmark in about 30% less time in our runs. Everything else is closer than the version numbers suggest.

Original content from computingforgeeks.com - post 171965

This Fedora 45 vs Ubuntu 26.04 comparison was measured, not collected from release notes. Two cloud VMs with identical vCPU, RAM and disk ran on the same Proxmox host, each fully updated, and we timed boots, metadata refreshes and the same package install on both. The sections below cover the changes Fedora 45 brings, support lifecycles, package management, toolchains, security defaults, containers and the desktop. If you are still on the previous pair, the Fedora 44 vs Ubuntu 26.04 comparison covers that matchup. The Fedora side is Fedora 45, and Ubuntu is the 26.04.1 point release.

Fedora 45 vs Ubuntu 26.04 at a glance

Every row in this table comes from the two lab VMs unless it says otherwise. Ubuntu is the 26.04.1 point release.

AreaFedora 45 (cloud image)Ubuntu 26.04.1 LTS (cloud image)
Kernel after updates7.2.7-300.fc457.0.0-34-generic
Boot time, systemd-analyze total (median of 3)7.57 s6.22 s
RAM used at idle497 MiB457 MiB
Packages in the base image541 rpm693 deb
Root filesystemBtrfs, zstd:1 compressionext4
Disk used after first boot1.1 GiB2.9 GiB
Package managerdnf5 5.4.5apt 3.2.0
Cold metadata refresh (3 runs)10.7 to 12.1 s8.8 to 15.0 s
Mandatory access controlSELinux, EnforcingAppArmor, 180 profiles (104 enforcing)
Firewall running in the cloud imageNone (firewalld not installed)None (ufw inactive)
sudo and coreutilsGNU sudo, GNU coreutilssudo-rs, uutils coreutils (Rust)
Containers in the base imagePodman 6.1.2 preinstalledNothing; Podman 5.7.0 in the archive
Swapzram, 3.8 GiBNone
Support endsNovember 24, 2027 (scheduled)May 2031 standard, 2036 with Ubuntu Pro

How the two VMs were set up

Both guests got 2 vCPUs with cpu: host, 4 GiB of RAM and a 20 GiB disk on the same ZFS pool, on a host with an 11th Gen Intel Core i7. The Fedora VM came from the official Fedora 45 Cloud Base image, the Ubuntu VM from the 26.04 server cloud image, and cloud-init finished its first-boot work on both before anything was measured. Each got a full dnf upgrade or apt full-upgrade, then three reboots for the boot numbers.

Two differences are baked into the images and could not be equalized. The Fedora template boots UEFI on a q35 machine with Secure Boot keys enrolled, while the Ubuntu template boots SeaBIOS on i440fx. The host was also shared with other lab VMs during the run, so the CPU benchmarks further down report the best of several runs and should be read as directional. Boot, memory, package and version data are not affected by that noise.

The Fedora VM after updates:

Fedora 45 cloud VM showing fastfetch, systemd-analyze boot time, SELinux enforcing and Podman version

And the Ubuntu 26.04 VM with the same commands, where the AppArmor and sudo-rs lines replace the SELinux and Podman ones:

Ubuntu 26.04 LTS cloud VM showing fastfetch, systemd-analyze boot time, AppArmor profiles and sudo-rs version

Package counts and disk usage in those two captures are higher than in the table because they were taken after the benchmark packages were installed.

1. Release cadence and support lifecycle

This is the row that decides most server deployments before any benchmark does. Fedora releases every six months and supports each release until about four weeks after the second release that follows it. For Fedora 45 the schedule puts that on November 24, 2027, which matches the SUPPORT_END field in its os-release. Running Fedora means one major upgrade a year at minimum.

Canonical gives the LTS release five years of standard security maintenance for the main archive, then Expanded Security Maintenance through Ubuntu Pro for another five, and a paid Legacy add-on on top. Canonical’s release cycle page lists the dates:

CoverageFedora 45Ubuntu 26.04 LTS
ReleaseOctober 20, 2026 (scheduled)April 23, 2026
Standard security updates endNovember 24, 2027May 2031
Extended coverageNone; upgrade to Fedora 46 or 47ESM to May 2036 (Ubuntu Pro, free on 5 machines)
Longest possible coverageAbout 13 monthsMay 2041 with the Legacy add-on
Upgrade tooldnf system-upgradedo-release-upgrade

Fedora upgrades are the less scary of the two in practice, because each jump is small. An in-place Fedora 44 to 45 upgrade on our lab worked with the stock commands. Ubuntu LTS upgrades cross two years of changes at once, as the 24.04 to 26.04 upgrade shows.

2. Kernel, boot time and memory

Fedora tracks the upstream kernel closely, so its updated VM ran a 7.2 kernel while Ubuntu stays on its 7.0 series for the life of the release (hardware enablement kernels arrive later through the HWE stack). Boot time was collected with systemd-analyze after each of three reboots:

systemd-analyze

The three Fedora 45 boots, one line each:

Startup finished in 920ms (kernel) + 2.368s (initrd) + 4.278s (userspace) = 7.567s
Startup finished in 1.126s (kernel) + 2.394s (initrd) + 4.066s (userspace) = 7.586s
Startup finished in 897ms (kernel) + 2.335s (initrd) + 4.047s (userspace) = 7.281s

On the same host, Ubuntu was faster in the kernel and initrd stages on every boot and faster overall on the last two. Its first boot came straight after the kernel update:

Startup finished in 593ms (kernel) + 2.038s (initrd) + 5.425s (userspace) = 8.058s
Startup finished in 579ms (kernel) + 2.039s (initrd) + 3.605s (userspace) = 6.224s
Startup finished in 517ms (kernel) + 1.994s (initrd) + 3.290s (userspace) = 5.803s

The medians are 7.57 s for Fedora and 6.22 s for Ubuntu. At the median Ubuntu is ahead by about 0.34 s in the kernel stage, 0.33 s in the initrd and 0.46 s in userspace (each stage taken as its own median). systemd-analyze reports no firmware stage on either VM, so UEFI firmware time is not in these totals. The Fedora template boots UEFI with Secure Boot on q35 and the Ubuntu one boots SeaBIOS on i440fx, so some effect on the kernel stage is possible but unproven. The initrd gap is a distro difference too, since Fedora builds its initramfs with dracut and Ubuntu with initramfs-tools.

Memory was read two minutes after the third boot with only each image’s default services running, which is 16 running service units on Fedora and 21 on Ubuntu:

free -m | sed -n 2p
grep -E 'MemAvailable|Unevictable' /proc/meminfo

Fedora 45 first, then Ubuntu:

Mem:            3880         497        3408           0         282        3383
MemAvailable:    3464360 kB
Unevictable:       97756 kB

Mem:            3910         457        3394           0         275        3453
MemAvailable:    3536260 kB
Unevictable:        9580 kB

A 40 MiB idle difference does not matter on any real machine. The Unevictable line is the interesting one: Fedora 45 pins about 95 MiB that the kernel cannot reclaim, against about 9 MiB on Ubuntu. We saw the same pinned memory when comparing Fedora 44 and Fedora 45 directly, so it is a Fedora 45 trait and not a quirk of this VM. Fedora also enables zram swap (a compressed swap device sized to RAM, 3.8 GiB here) while the Ubuntu cloud image runs with no swap at all.

3. Package management: dnf5 vs apt 3

Both package managers are fast now. The cold metadata test deletes the local cache and refreshes every enabled repository:

sudo dnf clean all && time sudo dnf makecache
sudo rm -rf /var/lib/apt/lists/* && time sudo apt-get update

Fedora took 12.1, 11.3 and 10.7 seconds and Ubuntu 13.1, 8.8 and 15.0 seconds. Both depend far more on the mirror than on the tool, and neither is consistently ahead. The on-disk cache differs more: 80 MiB of dnf5 metadata against 150 MiB of apt lists.

The install test used the same nine packages on both (a compiler, make, git, vim, tmux, htop, jq, pip and nginx), only the vim package name differs:

sudo dnf -y install gcc make git vim-enhanced tmux htop jq python3-pip nginx
sudo apt-get -y install gcc make git vim tmux htop jq python3-pip nginx

Fedora pulled fewer dependencies for the same request:

Same 9-package installFedora 45Ubuntu 26.04
Packages installed1849
Download size73 MiB82.3 MB
Disk added225 MiB291 MB
Wall time14.8 s15.2 s

Two behaviours are worth knowing before you script against either. Ubuntu phases updates: right after our full upgrade, apt list --upgradable still showed four packages being held back for a staged rollout. Our Fedora 45 VM came up with updates-testing enabled, so check dnf repo list before you script updates against it. Fedora also moved its stock repo files out of /etc/yum.repos.d/, which ships empty on Fedora 45; the dnf5 cheat sheet covers the commands that replace the old habits.

Third-party repos are where the release timing bites. On the day we tested, Docker published a repository for Ubuntu 26.04 (resolute) but returned 404 for Fedora 45, and VirtualBox had no Fedora 45 repo either. Third-party vendors often publish Fedora repos some time after the release, so curl the repo URL before building automation on it. Fedora’s own moby-engine package covers Docker in the meantime.

4. Toolchains and language runtimes

Fedora is a full year ahead on most of the stack. Versions below were read from the installed binaries where the package was installed, and from dnf repoquery or apt-cache policy otherwise:

ComponentFedora 45Ubuntu 26.04
GCC16.2.115.2.0
LLVM / Clang23.1.221.1.6
glibc2.442.43
systemd262259
OpenSSL4.0.2 (openssl3-libs 3.5.8 for compatibility)3.5.5
Python (default)3.15.0rc23.14.4
Other Python versions3.10 to 3.14 packaged in parallelDefault only (deadsnakes PPA for others)
Go1.27.11.26
Rust1.98.11.93.1
Node.js22 default, 24 and 26 as nodejs24 / nodejs2622.22.1
OpenJDK25.0.425.0.4
PHP8.5.118.5.4
PostgreSQL18.318.6
MariaDB12.3.211.8.6
nginx1.30.51.28.3
Apache httpd2.4.682.4.66
Perl5.44.05.40.1
Git2.55.02.53.0
ansible-core2.22.0 beta 12.20.1

The OpenSSL row is the one that breaks things. OpenSSL 4 removes deprecated APIs, so software built against 3.x needs a rebuild or the openssl3-libs compatibility package that Fedora 45 ships alongside it. Ubuntu stays on the 3.5 LTS branch for the whole release. The Python row is worth checking on your own machine: our Fedora 45 VM had a 3.15 release candidate, so run python3 --version before you rely on it. Fedora’s parallel Python packages (python3.12, python3.13 and so on from the main repo) are a real advantage for anyone testing across versions without pyenv, and the Fedora dev environment guide uses them.

We also built the same zstd source release with each distro’s compiler, three runs each. Best times were 15.3 s on both, with the spread (up to 17.7 s) driven by the shared host, so GCC 16 against GCC 15 is a draw for build speed. The resulting zstd binaries differed by 560 bytes.

The surprise came from Python. A pure Python n-body simulation (500,000 steps, CPU bound, no C extensions) ran noticeably faster on Ubuntu. To separate the interpreter build from the OS, each VM also ran the other distro’s Python inside a Podman container on the same kernel:

n-body, 500,000 steps (best of 6)On the Fedora 45 VMOn the Ubuntu 26.04 VM
Fedora’s Python build2.25 s (3.15rc2, host)2.40 s (3.14, fedora:45 container)
Ubuntu’s Python build1.63 s (3.14, ubuntu:26.04 container)1.57 s (3.14, host)

The gap follows the Python build, not the kernel or the distro around it: Ubuntu’s interpreter finished in 27 to 34% less time on both VMs. Fedora’s own python3.14 package was just as slow as its 3.15 release candidate, so the release candidate is not the cause. The visible build difference is linkage. Fedora’s /usr/bin/python3 is an 11 KB stub linked against a shared libpython, while Ubuntu’s is a 7.4 MB binary with the interpreter linked in:

ldd "$(readlink -f /usr/bin/python3)" | grep libpython
ls -l "$(readlink -f /usr/bin/python3)"

On Fedora 45 the interpreter pulls in the shared library:

	libpython3.15.so.1.0 => /lib64/libpython3.15.so.1.0 (0x00007f0d13e00000)
-rwxr-xr-x. 1 root root 11560 Sep  3 00:00 /usr/bin/python3.15

Ubuntu’s ldd prints no libpython line, and the file itself is the whole interpreter:

-rwxr-xr-x 1 root root 7477160 Aug 20 10:41 /usr/bin/python3.14

Fedora’s build flags also include extra hardening such as _GLIBCXX_ASSERTIONS, though we did not isolate what that costs. One benchmark on a shared host does not make a verdict on real workloads (web apps spend most of their time in C extensions and I/O), but if you run CPU-heavy pure Python, test it on both.

5. Security defaults

Fedora confines services with SELinux in enforcing mode, Ubuntu with AppArmor, and both work without the reader touching anything. The practical difference is in troubleshooting: SELinux denials show up in the audit log and need ausearch and booleans (the SELinux survival guide covers the common ones), while AppArmor problems are usually a profile in complain or enforce mode (see AppArmor on Ubuntu 26.04).

DefaultFedora 45 cloudUbuntu 26.04 cloud
MAC frameworkSELinux EnforcingAppArmor, 104 of 180 profiles enforcing
Host firewallNot installed (Fedora Server installs firewalld)ufw installed, inactive
nftables ruleset at bootEmptyEmpty
SSH password loginOff (50-cloud-init.conf drop-in)Off (60-cloudimg-settings.conf drop-in)
Root SSHprohibit-passwordprohibit-password
Listening beyond SSH and DNS stubLLMNR on TCP/UDP 5355Nothing
ptrace_scope11
sudoGNU sudo 1.9.17p2sudo-rs 0.2.13 (GNU sudo kept as sudo.ws)
Package signaturesrpm refuses unsigned or NOKEY packagesapt refuses unsigned repos

The LLMNR listener is the one finding worth acting on. Fedora’s systemd-resolved answers LLMNR name queries on port 5355 on all interfaces, and with no firewall in the cloud image that port is reachable from the network. Ubuntu ships resolved with LLMNR off. Before the fix, ss shows systemd-resolved on 5355 over TCP and UDP for IPv4 and IPv6:

sudo ss -tulnp | grep 5355

Four sockets, all bound to every address:

udp   UNCONN 0      0            0.0.0.0:5355      0.0.0.0:*    users:(("systemd-resolve",pid=538,fd=12))
udp   UNCONN 0      0               [::]:5355         [::]:*    users:(("systemd-resolve",pid=538,fd=14))
tcp   LISTEN 0      4096         0.0.0.0:5355      0.0.0.0:*    users:(("systemd-resolve",pid=538,fd=13))
tcp   LISTEN 0      4096            [::]:5355         [::]:*    users:(("systemd-resolve",pid=538,fd=15))

A resolved drop-in turns it off without touching the main config file. Create it and restart the service:

sudo mkdir -p /etc/systemd/resolved.conf.d
printf "[Resolve]\nLLMNR=no\n" | sudo tee /etc/systemd/resolved.conf.d/no-llmnr.conf
sudo systemctl restart systemd-resolved

Run the same ss check again and it prints nothing. resolved itself confirms the protocol is off:

resolvectl status | grep -m1 Protocols

The minus sign in front of LLMNR is the part that matters:

       Protocols: -LLMNR -mDNS -DNSOverTLS DNSSEC=no/unsupported

Installing firewalld is the other route, and the firewalld zones guide walks through it. Fedora Server (the ISO install, not the cloud image) already ships firewalld with only SSH, Cockpit and DHCPv6 client open.

The signature row is new with Fedora 45: a plain rpm -i on a package whose signing key is not imported now fails instead of printing a warning. Ubuntu’s move to Rust userland is the other side of the same coin. sudo is sudo-rs (GNU sudo stays installed as /usr/bin/sudo.ws behind the alternatives system) and ls, cp and friends come from uutils coreutils, which reduces memory safety risk in setuid code but occasionally differs from GNU behaviour in edge-case flags. Scripts that parse sudo -V output or rely on obscure GNU options are the ones to test.

6. Containers and virtualization

Fedora puts Podman in the cloud image itself, and Fedora 45 moves it to the Podman 6 series. Ubuntu leaves the container runtime to you and packages the Podman 5 series. Underneath, the stack is identical on both: netavark networking, crun, cgroup v2 and overlay storage, as reported by podman info.

PackageFedora 45Ubuntu 26.04
Podman6.1.2 (installed)5.7.0
Docker engine (distro package)moby-engine 29.7.2docker.io 29.1.3
podman-compose1.6.01.5.0
Buildah1.45.11.42.1
containerd2.3.52.2.2
Docker CE upstream repoNot published for Fedora 45 yet (404)Published for resolute

Podman 6 drops slirp4netns, so older rootless setups that still pin it fail on Fedora 45 until they move to pasta. Rootless containers ran on both with no extra setup; both VMs pulled and ran Alpine, Ubuntu and Fedora images for the Python test above. One thing caught us on the Ubuntu VM: a rootless container started from an SSH session died when that session closed. For long-running rootless containers on either distro, enable linger with sudo loginctl enable-linger $USER or run them as Quadlet units. For Compose workflows on Fedora, the podman-compose guide applies unchanged.

7. Desktop editions

We measured the cloud images, not the desktops, so this section sticks to what each project ships and what we saw on our own Fedora 45 Workstation install. Both desktops are GNOME on Wayland only; neither offers a GNOME on Xorg session any more.

Desktop defaultFedora 45 WorkstationUbuntu 26.04 Desktop
GNOMEGNOME 51GNOME 50 with Ubuntu’s dock and Yaru theme
FilesystemBtrfs with zstd:1 for / and /home, ext4 /bootext4
App store formatsRPM plus Flatpak (Flathub through the third-party repositories switch)deb plus Snap in App Center
TerminalPtyxisPtyxis
CodecsPatent-free set; full codecs via RPM FusionOptional third-party codecs at install time

Fedora ships each new GNOME release within weeks of upstream, and Fedora 45 Workstation also switches the virtual consoles to kmscon and replaces gnome-keyring with oo7. The Fedora 45 install guide shows both installers screen by screen. Ubuntu’s advantage is proprietary software: Snap packages and Canonical’s NVIDIA driver handling mean less setup for Steam, Spotify or CUDA, where Fedora needs RPM Fusion.

Where each one falls short

Fedora 45 falls short on time. Thirteen months of support means an upgrade every year, and third-party repos can trail a new release: Docker and VirtualBox had no Fedora 45 repos when we tested. Its cloud image also leaves LLMNR exposed with no firewall, and its Python build was the slower one in our tests. If you need a box that nobody touches until 2031, Fedora is the wrong tool.

Ubuntu 26.04 falls short on freshness. Its compiler, LLVM, OpenSSL, MariaDB and systemd are a year or more behind Fedora and will stay there, so anything that needs GCC 16, OpenSSL 4 or current Rust means PPAs, Snap or containers. The Rust sudo and coreutils are a bet that most scripts will never notice, and the ones that do will notice at a bad time. Phased updates also mean two identical servers can briefly run different package versions.

For most people the split is simple. Pick Ubuntu 26.04 for servers, fleets and anything with a support contract. Pick Fedora 45 for developer workstations and homelab machines where current toolchains and a new GNOME matter more than a five-year freeze.

Keep reading

Enable RPM Fusion and Install Multimedia Codecs on Fedora 45 / 44 / 43 Fedora Enable RPM Fusion and Install Multimedia Codecs on Fedora 45 / 44 / 43 Harden Fedora 45 / 44 for Desktop and Server: Complete Guide Fedora Harden Fedora 45 / 44 for Desktop and Server: Complete Guide Things to Do After Installing Fedora 44 Workstation Fedora Things to Do After Installing Fedora 44 Workstation Fix ptrace Operation not permitted for gdb and strace on Fedora Fedora Fix ptrace Operation not permitted for gdb and strace on Fedora Fedora 45 vs Bazzite for Gaming: Steam, Updates and NVIDIA Fedora Fedora 45 vs Bazzite for Gaming: Steam, Updates and NVIDIA Install OpenProject on RHEL 10 / Rocky Linux 10 / AlmaLinux 10 CentOS Install OpenProject on RHEL 10 / Rocky Linux 10 / AlmaLinux 10

Leave a Comment

Press ESC to close