Canonical released Ubuntu 20.04 LTS (Focal Fossa) on 23 April 2020. Long Term Support releases are the ones to run servers on: five years of standard security updates (until April 2025), with extended support available beyond that through Ubuntu Advantage.
What this post is. A summary of changes that matter to operations, and an upgrade plan. Nothing here means you must move your 18.04 servers now; 18.04 is supported until April 2023.
What is new for servers
| Area | 18.04 LTS | 20.04 LTS |
|---|---|---|
| Kernel | 4.15 (HWE 5.3) | 5.4, with WireGuard included in the kernel |
| systemd | 237 | 245 |
| OpenSSH | 7.6 | 8.2 (adds FIDO/U2F security-key support) |
| Python | 3.6 (Python 2 still installed) | 3.8; Python 2 is not installed by default |
| OpenSSL | 1.1.1 | 1.1.1f |
| Filesystems | ext4, ZFS as tech preview | ZFS 0.8.3, with ZFS-on-root as an installer option (experimental) |
| Server installer | debian-installer or legacy | New “subiquity” live-server installer with cloud-init support |
Other changes you may notice: python command is absent unless you install python-is-python3; the default /etc/resolv.conf still points to the local systemd-resolved stub; and Netplan remains the network configuration layer.
Should you upgrade, and when?
flowchart TB
S[Existing 18.04 server] --> N{Needs a feature from 20.04?}
N -->|no| STAY[Stay on 18.04 and plan for 2021<br/>supported to April 2023]
N -->|yes| T[Clone into a test VM]
T --> U[Upgrade or rebuild in test]
U --> V[Run application tests]
V --> OK{All passing?}
OK -->|yes| PROD[Schedule production window]
OK -->|no| FIX[Fix compatibility]
FIX --> T
PROD --> RB[Keep snapshot for rollback]
New servers: start on 20.04 now, because it gives the longest support. Existing production servers: wait for 20.04.1, due around August, before using the in-place upgrade; Canonical does not offer the upgrade from 18.04 by default until then. Meanwhile prefer rebuilding servers from automation (Ansible, Terraform, images) rather than upgrading in place, since a fresh build is easier to test and to roll back.
In-place upgrade runbook (for when the time comes)
# 1. Prepare
sudo apt update && sudo apt full-upgrade && sudo apt autoremove
cat /etc/os-release; sudo reboot
# 2. Snapshot or back up the machine (and databases)
# 3. Run it inside tmux or screen so a dropped connection does not interrupt it
tmux new -s upgrade
sudo do-release-upgrade # use -d only on test machines before 20.04.1
# 4. After reboot
lsb_release -a
sudo apt update && sudo apt full-upgrade
Before running it:
- Read the release notes; check third-party repositories (they are disabled during the upgrade and must be re-enabled for
focal). - Check application support: Python 3.8, PHP 7.4, MySQL 8.0 (20.04 ships MySQL 8.0, not 5.7), PostgreSQL 12, OpenSSL behaviour.
- Check disk space (several GB free) and that SSH on port 1022 is available as a fallback; the upgrade tool opens an extra sshd for safety.
Compatibility traps seen in upgrades
- MySQL major version change (5.7 to 8.0): authentication plugin defaults changed to
caching_sha2_password; older clients fail. Test the application connection first. - Python 2 scripts stop working when
pythonis missing: fix shebangs topython3(see the Python 2 end-of-life post). - Docker and iptables behaviour: confirm published ports and firewall rules after the upgrade.
- Config file prompts: during the upgrade, keep your modified config files unless you have reviewed the packaged version.
Recommendation
Use 20.04 for all new servers and images from now. Treat 18.04 as the production baseline until 20.04.1 arrives and your applications pass tests, and schedule the migration before the end of 2021 to avoid a rush near the April 2023 deadline.