Free Fedora with Freed-ora
2020 April 19
Context
Fedora is a GNU/Linux distribution. You may know it as the upstream source for Red Hat Enterprise Linux. I personally am a Fedora user. I like how it works and how it feels.
The Fedora Project has strict rules ensuring that all software included in the distro is all free (as in freedom)... but they make an exception for binary firmware. This exception disqualifies Fedora from being endorsed as "Fully Free" by the Free Software Foundation.
Perspective
To give some perspective to the situation, the Fedora Project has strict rules still about which binary firmware may be included in Fedora, and this exception is made to ensure that Fedora can run on as many devices as possible. Your device may require proprietary firmware blobs to function properly. For example, many Wi-Fi adapters will not work with only free software.
The easiest way to test if your computer will work with only free software is to live boot one of the GNU Project-endorsed free distributions like Trisquel and test if the device works properly.
If your current hardware will not run Trisquel, but you do want to use only free software, see the Free Software Foundation's Respects Your Freedom (RYF) page for hardware guaranteed to work with free software.
Now, on to freeing Fedora...
Freed-ora
To address this issue with Fedora and create a fully-free operating system, the Free Software Foundation Latin America (FSFLA) has a project called Freed-ora, which seeks to replace the Linux kernel in Fedora (which contains proprietary components) with GNU Linux-libre, a fully free kernel, and remove all the proprietary bits of Fedora.
Update from 2020 November 21: Since writing this post, I have learned that Linux is free software. It went through a phase of not being free software, but new versions of the kernel, like Fedora uses, are free again, as the nonfree firmware has been moved to the linux-firmware package. That said, the way Fedora packages the kernel, it requires the nonfree linux-firmware package, and installing the FSFLA's kernel-libre package is still probably the easiest way to avoid nonfree software in Fedora. Furthermore, some people prefer the Linux-libre kernel because of what it represents or because they have concerns that the Linux kernel will again include nonfree software.
Freeing Fedora with Freed-ora
(For more information and the full instructions for use, see the FSFLA page on Freed-ora. Note that this page uses yum, which has been deprecated in favor of dnf in Fedora. I thus used dnf instead here.
Basically the process of freeing Fedora is this: Try to install freed-ora-freedom. It will indicate conflicting (proprietary) packages, which must be removed before it can be installed. Once you have installed it, you will know that you have successfully removed all these problematic packages.
1: Add the RPM
sudo rpm --import https://linux-libre.fsfla.org/pub/linux-libre/SIGNING-KEY.linux-libre
sudo rpm -i https://linux-libre.fsfla.org/pub/linux-libre/freed-ora/freed-ora-release.noarch.rpm
2: Try to install freed-ora-freedom
sudo dnf install freed-ora-freedom
This will tell you what packages conflict. Revisit this step as needed to identify conflicts.
3: Remove conflicting firmware and microcode
Remove the conflicting firmware as well as microcode_ctl. The easiest way is to try to install freed-ora-freedom with the --allowerasing argument to remove conflicting packages:
sudo dnf install --allowerasing freed-ora-freedom
4: Install libre version of conflicting kernel
Add the libre kernel and boot using it before removing the old one. For each kernel package (kernel-...) marked as a conflict by step 2 (which you may need to repeat), install that with "libre" after the word kernel (kernel-libre-...). In my case, I found that installing kernel-libre was sufficient because it also installed the other two packages, kernel-libre-core and kernel-libre-modules.
sudo dnf install kernel-libre
If you have other kernel packages, make sure to handle them similarly as well. The guide says to do the same with perf-... packages, installing perf-libre-... instead. I did not have any perf conflicts to replace, but if you do, then do that now.
5: Set the libre kernel as the default
sudo grubby --set-default=`ls -t /boot/vmlinuz-*libre* | sed 1q`
6: Reboot
Reboot, using the new libre kernel (it should now be the default option).
7: Remove the old kernel
Now, assuming your device still works properly with the libre kernel, remove the non-free kernel.
sudo dnf remove kernel kernel-core kernel-modules
Those were the packages I needed to remove. If you also had to replace perf-..., remove the non-free versions of those as well.
8: Try to install freed-ora-freedom
sudo dnf install freed-ora-freedom
This is the same as step 2, but it should work this time because you have removed all the proprietary components.