The True Minimalistic Window Manager, "Simply" Doesn't Exist
Window managers; many people use them to increase the efficiency of their workflows or to show how “cool” they are to their colleagues or friends. Window managers are among bachelor’s and even master’s thesis topics these days. As the title states, in my view, a minimalistic window manager that truly follows the UNIX philosophy doesn’t exist yet. Let me show you why and how by discussing current window managers (that are possible candidates of being simple) and how the design of the true minimalistic window manager should be in my view.
DWM and BSPWM
DWM, window manager (WM, for short) maintained by the Suckless community, which claims to be minimal, but miserably tries to accomplish tasks that are beyond the window manager program such as drawing a status bar or mapping keys which directly violates the rule of composition and rule of modularity of the UNIX philosophy. Window manager, like any other program, should only provide output to other programs for other aspects of a complete desktop environment (e.g., status bar) while performing the task that the window manager program is only meant to perform; managing windows.
This design choice of DWM brings many ugly complexities like dwmblocks or slstatus programs that don’t draw a status bar but only sets the status text in the bar that DWM somehow felt responsible to draw. You need to hand-patch dwmblocks and the DWM’s source code to make that ugly pile of code compatible with already applied patches of yours and at the same time you should try not the bang your head on walls for hours, only to have a fully functional simple status bar. This complexity could have been prevented if the whole bar would be a different X11 program that can communicate with the WM through UNIX domain sockets.
Suckless programs always try to comprise fewer lines of code (even in disfavor of clarity which violates rule of clarity) and expect you to hand-hack source code by creating patches or applying existing patches created by the community at the different versions of the DWM, while the source code barely includes any comments for hackers. I like the idea that “everyone should get what they actually need”, although the way the Suckless community tries to handle it makes the DWM the most time-consuming WM to maintain so far. There are many ways to create modular software that allows people to get what they actually need right before compiling the software (e.g., Linux Kernel), although they picked the most complex, chaotic, and time-consuming one for a community that aims to create “simple” and “minimalistic” programs.
There’s a project dwm-flexipatch that houses almost all the patches created by the community and uses preprocessor directives for applying patches without a headache but even this doesn’t make me forgive other sins this WM and the Suckless community committed so far in the name of simplicity.
On the other hand, BSPWM’s design is modular and doesn’t involve key-mapping, handling pointer inputs, and drawing a status bar. I predict that BSPWM’s architecture should be pretty similar to our imaginary (yet) TTMWM’s architecture as can be seen in the diagram below.
Still, BSPWM still falls short for me. It isn’t as expandable as DWM and is too specific (its binary layout, for example). That’s why, despite my dislike for it, I’ve been using DWM for years. However, this whole writing made me work on my own window manager, TTMWM.
Last modification on