Why I cleared the weekend
I have been quietly dreading this release. The September 15, 2026 Fedora 45 Beta is the first one in years where the jump underneath the surface felt big enough that I wanted a full test cycle before touching anything I depend on. The Python default moves two majors. The compiler toolchain moves three at once. There are quiet security changes and a console refactor that nobody outside server operations will ever touch. None of those are dramatic on their own. Together they are the kind of upgrade where something always breaks somewhere.
Fedora labels this build a “code-complete preview,” meaning almost everything works and bug reports still count. Production boxes should sit this one out. If you keep a spare laptop, a VM, or a test container, this is the right weekend to install it. Stable release is weeks out.
What I want to walk through is what I tested across two days, what surprised me, and which parts of the upgrade I would not push to my fleet in a single weekend.
What the weekend actually looked like
I ran the upgrade on a test box I keep around for this kind of work, plus a VM with the full Fedora Workstation image. Both ended up at the same Python 3.15 default and the same GCC 16.2 binary, with the same set of new warnings I had not seen on the prior Fedora.
The two surprises were the time cost and the warning count. The rebuild itself took about two hours on a beefy box. I had budgeted thirty minutes and was wrong by an order of magnitude. The warnings on the rebuilt artifacts were useful signal but I wanted them isolated from the system-upgrade signal so I could tell which change broke what.
Next time I would run the rebuild and the system upgrade in separate sessions. They have different failure modes and should be debugged separately. If you only have a short window, run the rebuild on a small representative binary first, not the whole codebase.
Python moves two majors forward in a single jump
The release jumps the system Python interpreter from 3.13 to 3.15 in one step. Most of us rely on Python every day without really thinking about it. The cron jobs, the editor’s language server, the build scripts we forgot we had, the CLI utilities that wrap real work. When the default skips two majors at once, anything that quietly depended on the older default breaks in subtle ways that show up weeks later, not days.
The break patterns I have watched before in jumps like this: type hints that were optional become required, deprecation warnings from the previous release turn into errors, third-party packages lag behind because their maintainers did not have time.
Steps I would actually take, in the order I would take them:
- Stand up a separate CI job against 3.15 before the release goes stable.
- Keep one machine on the prior Fedora until your stack is verified.
- Scan dependencies for anything that pinned
<=3.14and update or replace. - If you use pyenv or uv, pin 3.15.0 specifically.
If you only touch Python occasionally, you will not notice for months. The break shows up as some script from 2024 quietly failing in a way nobody can reproduce. That is the cost of skipping the test cycle.
The compiler toolchain changes more than the headline suggests
GCC 16.2, GNU Binutils 2.47, and LLVM 23 all move together, and that combination matters more than any single version number would tell you. A toolchain bump changes how your code compiles, what warnings show up, what defaults get applied to your CFLAGS (the compiler flags that control optimization), and occasionally what hidden assumptions your code accidentally made about the optimizer. The new compiler is more aggressive about flagging pointer aliasing (whether two pointers can refer to the same memory) and signed-overflow issues that older compilers ignored.
For most users this is invisible. For anyone shipping C, C++, Rust that uses system libraries, or anything that targets WebAssembly, this is the upgrade to actually pay attention to.
What I would do, in order:
- Rebuild hot-path binaries from scratch and compare timings. New toolchains often hand back free speed.
- Recompile on a fresh box rather than reusing cached artifacts from the prior release.
- Skim the GCC 16 release notes for the languages you compile against.
- If you cross-compile for older distros, double-check your
-staticand-marchflags.
One more thing I would add to that list: run your fuzzers (programs that throw random inputs at your code to find crashes) on the new toolchain. The new compiler will catch issues you did not know you had.
Credential handling gets a real upgrade
Two changes do not show up in headlines but matter. Stricter RPM signature verification means a tampered package refuses to install instead of silently installing. The DNF5 protections close transaction-handling holes that I would rather not enumerate because smaller attack surface is the goal.
There is also a standardization push around desktop credential storage. If you have ever had your credential store break because the format changed, this is the kind of fix you want. Apps stop inventing their own stores and start using a single shared one.
What I would change in my workflow:
- Audit your package mirror list. Third-party repos tend to be the weak link in most setups.
- Confirm unattended upgrades honor your exclude list.
- Back up the keyring before the upgrade.
If you maintain a desktop app that stores credentials and you have been rolling your own store, the new secret service is the API you should target. Custom stores are about to become a security smell.
The console subsystem gets a quiet refactor
This is the change most people will never touch, and that is fine. The release ships kmscon as the new virtual console layer, moving that work out of the kernel and into a process. The in-kernel console has been there forever, and there are reasons to leave it. With the work in userspace, Fedora can ship font and internationalization updates without asking anyone to recompile a kernel. Bugs in console rendering also become patchable without a reboot.
For most readers, you almost never see a virtual console unless something has gone sideways. Booting, recovery mode, a graphical environment that refuses to start. If you end up in that situation, kmscon should feel more responsive than what you remember.
For server maintainers and rescue-image builders, a few things matter:
- Stock recovery ISOs may need updates if you built them on the older Fedora.
- Headless systems get the most out of this change because you spend more time at the console.
- Custom initramfs scripts that touched /dev/console directly may want re-testing.
- Document your team’s recovery steps because the layout is different.
Trade-offs
Fedora 45 is a real upgrade. The Python jump will break some workflows. The toolchain jump will surface new warnings. The console change is invisible until you need it. Each of those is a trade I would make, but I would not make them all at once on a box I depend on.
If you only have one machine to spare, run the beta in a VM. Filing a real bug against a beta gets more attention than filing a real bug against stable.
If you maintain a fleet, stagger the rollout. Pick a test box, let it sit on the new release for a week, then walk the rest through. I have watched too many teams ship every server to a new release in the same weekend and then spend the next weekend rolling back.
Kmscon is the one most teams will not plan for. Document your recovery steps before you need them.
What I would tell past me
If I could send a message back to the version of me running Fedora 42 last September, I would say three things.
- Pin your Python runtime before you trust the system upgrade. Your CI matrix should have 3.15 in it by the end of October.
- The compiler bump will surface warnings you did not know existed. Budget an afternoon to fix them.
- Back up your keyring before any upgrade. The format may not survive the new tools.
Install it on something you can break, run your real tests against it, and write down what breaks. That is the shape open-source betas usually take.