Answering questions on free distro IRC channels I find two main reasons for people to not use these distros: hardware depending on nonfree software and specific nonfree applications that they ‘need’. (There are other reasons, like other free distros being better for the purposes of the user or having newer software. These should become more common.) This article discusses some potential ways to solve the first problem. It is inspired by the LibrePlanet 2013 talk of Richard Stallman discussing also other important current issues like mobile operating systems, DRM and privacy on mobile phones.
Most computers need some nonfree software for some functionality. My previous article discussed three common kinds of such software: boot firmware, graphics drivers and wifi drivers. Here we aim to run an operating system that doesn’t ship nonfree device firmware or drivers while nonfree boot firmware might be used. This leaves most issues with graphics other than VGA ROMs (which are shipped on the card and on Intel systems already did their work, while drivers for other cards use them) and all problems with wifi drivers and firmware.
One of the ways to improve the situation mentioned in that article is to support vendors that do contribute to free drivers and public specifications for their hardware. While this does help, there are also technical solutions with known good results.
Since vendors usually don’t support free drivers nor specifications for their devices, we need to make ours via reverse engineering. There are several projects making free drivers with great progress using specifications obtained from reverse engineering, Nouveau might be one of the most well-known (it’s the only project not supported by the vendor that replaced some of nonfree firmware removed in Linux-libre). More recently Lima and other projects for most popular mobile GPUs were started.
I know no general documentation of reverse engineering as used in these projects. This might be a useful area to improve: there are many people interested in helping such projects or starting new ones for other devices.
Porting software to completely free non-x86 systems
Since all x86 processors use nonfree microcode usually provided by boot firmware and most have vendors not supporting free drivers for parts of their systems, supporting other CPU architectures might help support free boot firmware in longer term. Of such devices only Lemote Yeeloong laptops with MIPS-compatible CPUs run completely free boot firmware and operating systems.
Not all important free software works on MIPS and many optimizations are missing: assembly using SIMD instructions for video decoding and JIT compilers might be the most important ones. More software is missing on faster 64-bit ABIs.
Removing software dependency on hardware-accelerated graphics
Graphics cards usually work without their nonfree drivers with much worse performance (since all rendering is done on the CPU) and sometimes worse resolution support which is usually solved in future driver releases. This makes the nonfree drivers unnecessary unless using compositing desktop environments or games that need 3D acceleration. (3D modeling or design are less common uses for such hardware.)
While replacing the drivers is difficult, replacing the software depending on them might be easier. Trisquel’s default desktop environment does it well: GNOME Fallback is used instead of GNOME Shell to support systems with AMD or NVIDIA graphics.
There might be more opportunities for such improvements on mobile systems: while GNU/Linux traditionally worked without OpenGL hardware, Android normally depends on it, with nearly no phone supporting free drivers for it. Replicant works without accelerated graphics on all supported phones while some useful free applications for it need accelerated graphics.
Documenting compatibility of used hardware
Many systems will have parts not working with free software or will ‘accidentally’ work. Documenting this will make buying working hardware easier for other users. H-node contains reports of hardware compatibility with free distros that are used for this purpose. Improving h-node itself would also help, by e.g. making device submission easier.
This could also support free driver projects by showing which devices are popular and which ones need possibly easy improvements in distros.