Below my research into choosing a Linux distro.
I've used Crunchbang, which is based on Debian with a customized OpenBox. Crunchbang folded when Debian transitioned to systemd. The userbase resurrected as Bunsenlabs and Crunchbang Plus Plus.
My experience with Windows 98, xp, and 7 was a focus on streamlining the following, which I am looking for parallels in Linux:
Operating System:
Hardware:
Windows Shell:
Software:
I want to choose a barebones Linux distro to which I can add and customize. Barebones file system, barebones init, barebones window environment.
I could start with Slackware which makes you do everything manually so I can learn basics and then better understand the strategies different distros employ to achieve being barebones.
I would like to have portable applications: AppImage instead of a package manager. People are running virtual machines just to get some functionality with a lot of dependencies, so AppImage is the lesser sin. Doesn't hurt to start with software that isn't bloated.
I can start with a full fledged desktop environment (DE), then install window managers (WM) to play with in different sessions until I get them running like I want.
I can have the WMs as portable applications, or at least as modules/containers so I can quickly add and remove them, along with their dependencies, from the system.
Thread about MX Linux and Devuan Linux on debian.net
Linux purists, are saying that Systemd is bloated software. The Linux philosophy includes having singular tools that do one job well. Systemd should be a collection of independent tools, not a conglomerate mass that does everything that most won't need. The outcome is a heavy, inefficient, overly complex mess.
Even worse is that because Systemd is being used by so many distros, some programs are being written that are dependent on it. These programs won't run on distros without Systemd. Linux software should be modular/portable, without dependencies on huge sets of libraries like systemd.
Systemd is a takeover of Linux by power seeking individuals.
It happens over and over again in history, and the sheep are blind to it. Is being conscious of reality too much of a burden?
The complexity will increase until an individual is not able to grasp it all and organize it. Then there is chaos. It won't matter that Linux is open source. The wrong people will take advantage of the chaos for their own ends.
“ Because after systemd, no one will be able to work on their own system any more. They will just pull down systemd, and accept whatever it is - because it is a massive, deeply interconnected rat's nest, and no one but its very small group of creators will ever be able to extend or maintain it. ” Jim Lynch, infoworld.com 2017
Perhaps what is needed is a systemd alternative. A modular approach that keeps the init simple, while providing systemd libraries that can be downloaded as dependencies or included in apps like with AppImage. Specifically ONLY for those apps that actually need functionality from systemd.
I think MX Linux uses a systemd shim, in order to be more compatible with software, while retaining an independent init system.
I searched for “systemd modularity” and could only find this page, which is by a developer of systemd, stating the myths surrounding the controversy surrounding systemd. Despite all of what he may say, which I am not necessarily disagreeing with, the KISS philosophy is usually the safe bet.
Runit’s size makes it much faster than most inits and especially suitable for older hardware. Its size also makes it easy to understand and learn. In fact, a few hours is all that is needed to learn runit. The fact that it was developed on Debian may make it especialy suitable for Debian derivatives. init Alternatives, linux-magazine.net
Does not matter that last update was 2015: Why is the init system still Runit despite it no longer being developed? Reddit
BusyBox provides many common UNIX utilities in a single small executable for embedded systems. The package includes runit… archlinux.org
musl is a C standard library implementation for Linux. This is a wiki maintained by the enthusiastic user community of musl. Some of musl's major advantages over glibc and uClibc/uClibc-ng are its size, correctness, static linking support, and clean code. https://wiki.musl-libc.org
Distrowatch poll results for: Does your distribution run the musl C library?
I run a distro that uses musl C: 90 (9%)
I do not run a distro that uses musl C: 623 (62%)
I do not know if my distro uses musl C: 284 (28%)
The only distro I know that runs musl by default is alpine. Void and gentoo have musl or glibc as separate options. Projects using musl, musl-libc.org
Firefox has glibc as a requirement. Firefox on musl compiling error (gentoo) with proposed patch.
Fortunately, Alpine has a ready made build of Firefox.
Most of the software will work fine, as mentioned, rust is a pain, but look into Alpine Linux packages (and patches) whenever you have troubles. Not tested recently, but qtwebengine should work.
Forget systemd, it won't compile, go for openrc or something else. Some GNU stuff have issues with musl, (e.g. Gnupg)
If you get packages that don't compile, often it is just a missing include, easy to fix. Any Musl LibC users? r/Gentoo reddit
Compiling firefox from scratch would take maybe 20 minutes on my 2011 laptop.
I like to customize, and I need things under the hood to be stable. The only person making changes needs to be me, otherwise when things go wrong there will be too many variables to deal with. A rolling distro placates creativity and drives complacency. You end up accepting what's given to you, because it's too hard to do otherwise.
Any distro will do because updates aren't mandatory.
Compiling from source vs using package managers, Reddit
Ubuntu and Debian combined have the largest repository base.
Just because you don't have access to all the software in the two largest repositories, isn't the end of the world. Usually, the stuff that may not be compatible, is that way because it's a bloated piece of junk. Good software is integrated to have fewer dependencies.
When software is written, developers will often use existing libraries for certain functions. Existing functions and API's make programming easier because the developer doesn't have to reinvent the wheel.
“In an ideal world, libraries would be fully backward compatible, so that a program that depends on one version of a library, would work with any newer version of that library. But library developers don't do that, and I don't know why. Linux wants to be ideal, and take up less hard drive space and resources (like RAM), and therefore use only one version of each library. So sometimes you want to install two programs that both use the same library, but different versions, and this makes for dependency hell. The portable theology, says “lets bundle the library into the program itself, so that it doesn't use the one that comes with the system”. This is contrary to the Linux ideal, but makes things much easier for the end user.” 2018: Portable Software
Since the amount of RAM available in current hardware is usually more than sufficient, one solution would be that each program load its own library versions.
Needing additional libraries means that the developer didn't take the time to extract the parts used within a library and add those to the main program, reducing the overall footprint. This requires more work: software developers are usually not interested in taking this step.
Modular software is easier to take with you when you move from one system to another. Or when you boot from a different OS on the same machine.
There are groups like https://appimage.org, that package program dependencies and make a singular module. Also see AppImage page on github.
There is also Flatpak and Snap packages. These articles covers all three:
https://ostechnix.com/linux-package-managers-compared-appimage-vs-snap-vs-flatpak
https://linuxhint.com/snap_vs_flatpak_vs_appimage
https://www.orbital-apps.com/ ?
“I ran Slackware for a few years and then switched over because lots of Linux software is now targeted for RedHat-based or Debian-based systems and to get it running on Slackware you basically have to set up enough stuff on Slackware to fool the software you want to run into thinking it's on either a RedHat or Debian system. Think startup scripts, config files, things like that.” What's the deal with Slackware? supenguin on Reddit
“I'd just like to mention that using programs distributed as appimages on slackware is a wonderful desktop experience.” What's the deal with Slackware? Silver on Reddit
Some here describe how to achieve the following: Why can't Linux executables first look in the path from which it was launched for any dependencies? quora.com
The only current file system capable of larger partitions and which does not have journaling or user permissions is exFat. Also it is supported by Windows. denabre on Reddit veprof.com
“exFAT isn't supported for booting on UEFI systems but for BIOS systems it should work.” porteus.org
Comparison & List of Desktop Environments, eylenburg
A full desktop environment is a complete graphical user interface (GUI) that includes not only a window manager, but also a range of other applications and utilities, such as a taskbar, a system tray, a compositor for transparency, a file manager, app launcher, wallpaper setter, theme engine, and much more. The Ultimate Guide to Building Your Own Desktop Environment, Michael Neuper
Not to mention hardware interfaces like for audio and bluetooth, and gpu.
OpenBox Addons Collection, github
OpenBox Themes Collection, github
Data from Distrowatch:
environment/manager | # of distros |
---|---|
openbox | 41 |
fluxbox | 29 |
jwm | 15 |
awesome | 15 |
bspwm | 4 |
icewm | 22 |
i3 | 13 |
lxqt | 34 |
lxde | 36 |
enlightenment | 18 |
gnome | 76 |
kde | 86 |
kde plasma | 67 |
mate | 54 |
cinnamon | 35 |
Top Linux Environments for Theming:
The Phenomenon of r/unixporn, by Reluctant Anarchist on YouTube. Widget in video is fly pie.
Despite openbox only having a little over a third of the unixporn userbase of i3 or bspwm, it has the same number of rices in the top 100. Openbox is on par with awesomeWM in top 100 rices per userbase.
Openbox: Floating, minimal
i3: Manual tiler, minimal
Awesome: Dynamic (both ways), not minimal
RAM Usage of small window managers - a comparison, reddit:
Window Manager | RAM Usage |
---|---|
mcwm - not maintained | 303.0K |
2bwm | 342.0K |
frankenwm - *not maintained?* | 411.0K |
monsterwm-xinerama | 588.0K |
evilwm | 800.0K |
musca - not maintained | 949.0K |
herbstluftwm | 1.4M |
dwm | 2.3M |
ratpoison | 2.5M |
cwm | 2.6M |
notion | 2.9M |
fluxbox | 4.4M |
i3 | 5.5M |
icewm | 6.2M |
openbox | 8.3M |
awesome | 26.9M |
You can keep using KDE as your main desktop, and then in your login screen just change session to Awesome or i3 and start working on them until you are comfortable to move, that way you will always have KDE as something to fallback on incase you need a desktop to just work. hearthreddit on Reddit
I am head-over-heels in love with OpenBox. Was using it exclusively for years, and would happily continue doing so if only it worked on HiDPI screens. As it stands, it's completely and utterly unusable on my 4K screen 😓 I'm cautiously hopeful about labwc providing a future-compatible version of OpenBox. kaqqao on Reddit
Comparison of Linux Distributions, wikipedia
Comparison of Linux Distributions, eylenburg
What is the core difference between the Linux distros? reddit
5 tiny Linux distros to try before you die, opensource.com
Artix is a good option for old / underpowered hardware, Chaeska on reddit
Void vs Artix, r/voidlinux reddit
Void vs Artix, r/antixlinux reddit
Enter the Void "Linux", reddit
Slackware is the original KISS Linux. Is a new model needed? If it is, an independent distro will create a new model from scratch with a philosophy that better handles a changing technology landscape.
Arch is described as being similar to Slackware in the KISS department, but the article above “Why Not Arch Linux” has convinced me to skip over Arch. I hope it was written honestly.
Why Slackware is not like Debian: a guide for new slackers, hazel on linuxquestions.org 2024
Have any of you tried Slackware? How does it compare to Gentoo? jecxjo on Reddit
Can slackware be as small and secure as alpine? reddit
You can rank by different methods at distrowatch, including by average rating, page hits, etc.
Click to expand Google Trends Ranking
Click to expand Google Trends History
The following do not use systemd. List of “Not SystemD” on Distrowatch.
Having their own portable software may not be important because AppImage makes truly portable software across different Linux distros.
Having full hardware support may not be important because some DriverPacks for Linux may exist?
Which desktop environment has the most diverse library of plugins/extensions/addons?
Key: indep: independent, alternativeto.net hearts, distrowatch page hit rank, distrowatch rating, google trend
distro | init system | package manager | desktop environment | forked from | hearts | rank | rating | trend | founded | updated |
---|---|---|---|---|---|---|---|---|---|---|
artix | runit & openrc | pacman | many | arch-manjaro | 9 | 69 | 9.2 | 53 | 2017 | 2023-08 |
void | runit | containers + xbps | xfce | indep | 10 | 93 | 9.21 | 35 | 2008 | 2023-07 |
antix | runit | apt | icewm > fluxbox > jwm | mepis | 16 | 15 | 8.15 | 38 | 2007 | 2024-02 |
devuan | runit | apt | many | debian | 8 | 33 | 9.14 | 59 | 2016 | 2024-02 |
alpine | openrc | apk-tools | openbox, now many | indep | 25 | 27 | 9.06 | 11 | 2005 | 2024-01 |
slax | sysvinit | modules + apt | fluxbox | slackware or debian | 26 | 79 | 6.75 | 42 | 2006 | 2023-10 |
porteus | sysvinit | modules + slpkg | many | slax | 13 | 106 | 9.07 | - | 2011 | 2023-09 |
puppy | busybox | ppm + many | jwm | indep | 98 | 19 | 7.51 | 31 | 2003 | 2022-12 |
slitaz | busybox | tazpkg | openbox | indep | 50 | 150 | 6.29 | - | 2008 | 2014-05 |
easyos | sysvinit | many | jwm | puppy | 3 | 29 | 8.86 | - | 2017 | 2024-02 |
pclinuxos | sysvinit | apt | many | indep-mandrake | 25 | 24 | 8.18 | 70 | 2007 | 2023-07 |
tiny core | busybox | tce-load | flwm, many | indep | 19 | 75 | 6.7 | - | 2009 | 2024-02 |
dcore | busybox | sce self contained extension | flwm | tiny core | - | - | - | - | 2023 | 2024-02 |
damn small linux | runit | apt | fluxbox & jwm | antix | 2005 | 2012-09 |
Data above as of February 2024.
“Alpine Linux was designed with security in mind. All userland binaries are compiled as Position Independent Executables (PIE) with stack smashing protection. These proactive security features prevent exploitation of entire classes of zero-day and other vulnerabilities.”
Pros and cons of PIE, fedoraproject.org
Why not always use fpic (Position Independent Code)? stackoverflow.com
KDE under musl is incredibly lightweight, C4H8N8O8 on Reddit
glibc support needed for AppImage:
Because AppImages do not bundle glibc or musl:
https://github.com/AppImage/AppImageKit/issues/877
Must add glibc support:
https://github.com/sgerrand/alpine-pkg-glibc
https://wiki.alpinelinux.org/wiki/Running_glibc_programs
Alpine Linux Review: Ultimate Distro for Power Users, Nitish 2021
The Most Prolific Packager For Alpine Linux Is Stepping Away
Is there something like DriverPacks for Linux? This question was asked on Linux Mint forum in 2009.
There doesn't seem to be anything equivalent to Snappy Drivers on Linux: alternativeto.net.
But at least I would like a distro to have automatic hardware detection.
There is an easy and quick method to check all hardware devices on the motherboard for Linux-compatibility with the help of recently added hw-probe package in Edge/Testing. The tool checks operability of hardware devices by analysis of logs and tries to find missed drivers with the help of LKDDb. https://wiki.alpinelinux.org/wiki/Check_hardware_compatibility
How do drivers differ between Windows and Linux?
Comparison of the driver architectures used by the two operating systems has shown that the Windows operating system has a more developed architecture than Linux. This does not mean that the Windows architecture offers better functionality than that of Linux, rather it has a more formally defined driver model, which driver developers are encouraged to follow. Although driver writers can ignore the Windows driver model and construct their own monolithic drivers, it was found that most driver writers did not take this route. No formally defined driver model exists for the Linux operating system. Linux driver writers produce drivers based on their own personal designs. Unless two groups of driver developers cooperate and produce drivers that work together, drivers from different developers cannot operate together under the Linux operating system. Under Windows, drivers from two or more sets of developers can be made to work together, provided the developers have followed the Windows Driver Model (WDM) to construct their drivers. The Windows driver architecture supports PnP (Plug and Play) and Power management, by dispatching messages at appropriate times to device drivers which have been implemented to handle these messages. No such facility is offered by the current Linux driver architecture. A Comparison of the Linux and Windows Device Driver Architectures, Tsegaye and Foss, Rhodes University 2004
On Linux some drivers are built into the kernel and stay permanently loaded. Non-essential ones are built as kernel modules, which are usually stored in the /lib/modules/kernel-version directory. This directory also contains various configuration files, like modules.dep describing dependencies between kernel modules.
While Linux kernel can load some of the modules at boot time itself, generally module loading is supervised by user-space applications. For example, init process may load some modules during system initialization, and the udev daemon is responsible for tracking the newly plugged devices and loading appropriate modules for them.
…
The most prominent differences stem from the fact that Windows is a closed-source operating system developed by a commercial corporation. This is what makes good, documented, stable driver ABI and formal frameworks a requirement for Windows while on Linux it would be more of a nice addition to the source code. Documentation support is also much more developed in Windows environment as Microsoft has resources necessary to maintain it.
On the other hand, Linux does not constrain device driver developers with frameworks and the source code of the kernel and production device drivers can be just as helpful in the right hands. The lack of interface stability also has an implications as it means that up-to-date device drivers are always using the latest interfaces and the kernel itself carries lesser burden of backwards compatibility, which results in even cleaner code. Linux vs. Windows device driver model: architecture, APIs and build environment comparison, Dan Nanni 2020
Those are not drivers.
They are firmware packages for the WiFi chips themselves. The WiFi chips don't generally have persistent flash memory for the firmware, so the driver (in this case, the open-source iwlwifi driver for essentially all modern Intel WiFi chips) needs the correct chip-model-specific firmware file for loading into the chip as part of initializing the chip for use.
Typically the kernel does not need to understand the contents of a firmware file at all; it just needs to stuff the contents of the file into the hardware in question in an appropriate way.
These firmware files can be installed on any Linux distribution: they typically go into /lib/firmware/. But the actual driver needs to be of a new enough version to know how to actually communicate with the chip to make use of them: the webpage documents the kernel version at which point the support for a particular WiFi chip was added into the driver in the “mainline” Linux kernel.
So any Linux distribution whose kernel version is at or above the level specified for a particular WiFi chip is essentially guaranteed to support that chip.
However, sometimes some distributions (especially the “enterprise” or Long Term Support distributions) use an older kernel, but backport newer versions of drivers into it. In such cases, you might find that the distribution supports some piece of hardware, even though its kernel version doesn't seem quite new enough for it according to this list.
Sometimes, other people produce PPAs of newer drivers for older kernels, or otherwise produce more or less easily installable additional or upgraded drivers, if the hardware in question is popular/important enough.
Compatibility of third-party drivers to kernel versions can be more complicated: a driver can be too old for a particular kernel version (e.g. it attempts to do something that needs to be done a bit differently with newer kernels), or too new (e.g. it relies on a kernel feature that was implemented in a particular kernel version, and just can't work with kernels older than that).
For example, trying to use a driver module that was compiled before the implementation of the major Spectre/Meltdown workarounds with a kernel compiled after it, or vice versa, may easily cause the system to hang or crash.
Drivers that are available in source code format and must be compiled for your specific kernel version can be somewhat more flexible than drivers provided in pre-compiled form, but both can have version compatibility limits in both directions. Will two different Linux Distros support the same device drivers given that they use the same kernel? telcoM on stackexchange.com
The kernel is shipped with an enormous number of drivers.
You can compile drivers into the kernel so they are “built-in”, and some drivers simply must be “built-in” (for chicken-and-egg reasons); but almost all Linux distributions instead distribute drivers as kernel modules as much as possible.
With drivers as kernel modules, what happens is that, during boot, the kernel probes all devices, and whenever it finds a device, it generates uevents for that device with the device parameters (product id and vendor id).
Then, udev picks up those events and calls modprobe.
Then modprobe figures out what module is needed for that device, given those parameters, and loads it into the kernel.
If you're curious, on Debian, the mapping that modprobe uses of vendor ID / product ID tuples to kernel modules exists as a simple text file in /lib/modules/$(uname -r)/modules.alias. unstablevacuum on Reddit
Everything hardware is supposed to be supported by the linux kernel. As the kernel gets updated, more hardware is supported out of the box. However, too often there is a lot of “patches” that need to be applied specifically to get the most from your computer's hardware. Devices prepackaged with an operating system, such as Windows, Macos, or Android, have all this taken care of for you. Such is an advantage of buying from System76 or Purism: see 12 Places Where You Can Buy Linux Computers.
Linux has advanced in the ability to fully support a laptop or desktop without the need for hunting for additional drivers, etc. Chances are, whatever distro you try out won't need additional drivers. However, having support for hardware doesn't mean the driver is optimized for a particular device.
Something like power management can be very device specific. Linux isn't necessarily optimized for your particular hardware. Although the same can be said about Windows OS, where manufacturers provide custom drivers as addons.
This page gives lengthy details on configuring linux power management: https://wiki.archlinux.org/index.php/Power_management
I would like to find some benchmarks, showing battery life of linux vs manufacturer OS.
It occurred to me, to look up what it would take to connect a bluetooth mouse with a distro like Slitaz, which is even smaller than Antix.
http://doc.slitaz.org/en:guides:bluetooth
It's complicated. Computers are supposed to automate human processes. That's why we have them. So perhaps the smallest, leanest distro is not for me? I can spend hours trying to figure out which distro is right for me. It is a rabbit hole.
Something as ubiquitous as a Macbook, should have plenty of support, right? See that the 2016 and 2017 models are not 100% supported, and battery life is poor:
State of Linux on the MacBook Pro 2016 & 2017
There are instructions on tweaking the Macbooks on the following distros:
User's experience with both MacOS and Linux on a Macbook Air:
https://medium.com/@alex_nekrasov/installing-linux-on-macbook-air-838f9b087338
User's experience switching to Linux on a 2015 Macbook Pro:
https://medium.com/swlh/running-linux-on-my-macbook-9738b3b4f84d
This article compares power consumption between MacOS and Linux. However, he used Linux with no power optimizations (like from PowerTop):
https://www.phoronix.com/scan.php?page=news_item&px=MTE2Njk
July 2019: Linux 5.3 Will Surprisingly Support The Newest Keyboard/Trackpads Of Apple MacBooks, phoronix.com. The drivers had to be reverse engineered, because Apple purposely tries to avoid Linux progress.
Booting without ReFit/ReFind: https://glandium.org/blog/?p=2830
Android is linux with Google on top.
People use whatever they are given. If they were given computers with linux (laptop, desktop, phones), they would use linux. They can't be bothered to install something else unless it's super easy, such as installing a web browser like Chrome.
Perhaps if linux was given out as a usb drive and just worked right out of the box with the option to dual boot the original operating system, then more people would try it out.
However, sometimes it doesn't fully work, requiring additional drivers one must go out and look for. This is mostly not the fault of Linux, but of industry with no incentive to make Linux work on their devices. Industry actually works against linux becoming mainstream, because they make money by having proprietary operating systems. Cough, microsoft, cough.
In the case of Google and Android, Google took the free and added a proprietary layer on top which makes them money.
Trying to make sure I'm not missing any other controversial aspects of Linux, I found in the Wikipedia article:
“ Some security professionals say that the rise in prominence of operating system-level virtualization using Linux has raised the profile of attacks against the kernel, and that Linus Torvalds is reticent to add mitigations against kernel-level attacks in official releases. “
I read this as: The establishment wants to complicate something simple, so that it can later use the complexity to leverage power. History repeats itself over and over. They want to add complexity to the kernel in the name of “security”.
https://www.vice.com/en_us/article/3km9qb/linus-torvalds-is-back-with-linux
Article about news sources criticizing Linus Torvalds, and Linus Torvalds being influenced by the criticism. This could be good, and this could be bad. Good if the meritocracy continues; good if people treat each other well. Bad if this is an underhanded way of controlling the developers.
Discussion