Competitive & collaborative interfaces

— About the openess of Unix tools


The sad part about the professional UIs of today is the illusion of simplicity.

If one would identify differences between Unix Open Source applications and other applications one would speak about philosophical differences, differences in aims.

Since text wisely, in the Unix philosophy, is considered to be a universal interface, the input and output of an application should be text. This means that input-output can be piped to other applications. Since the aim of one single application is to do one thing and do it well, a single application could be considered dumb. Smartness rise from the compositions of different applications using pipes.

What’s not as often emphasized is a larger take on the environment.

As one understands, Unix tools are by nature collaborative. This is an important, under-stressed difference to other environments and philosophies, closed source, business as well as open-source applications. An application such as Atom or VS Code is meant to be used in singularity; they contain no or few open interfaces to ‘external’ applications. And in their core, they are not build to be collaborative — by nature such applications are competitive.

Unix applications are hackable by default, and connecting applications is an everyday practice. But using Bash is also something you arranging configurations. The other day I decided to use X-Monad on my Desktop and wanted to configure, so I could change the keyboard layout from English to Swedish (and back). I made a simple Bash script to resolve this,

#!/usr/bin/env bash

current=$(setxkbmap -query | awk '$0 ~ /layout/ {print $2}')

if [[ "$current" == "us" ]]; then
  echo "Switching keyboard layout to SE"
  setxkbmap se -option caps:escape
  echo "Switching keyboard layout to US"
  setxkbmap us -option caps:escape

and spawned a binding in the X-monad config.

Taking advantage of the Unix environment is simple. In this example, I combined a shell script using the applications setxkbmap and awk, simply created a binding to this script in the X-monad configuration. In In the end, five very different applications collaborated with full openness, allowing me to customize things according to my preferences.

New tools should follow these simple philosophical principles, and if so, they can without issues connect to old programs (programs working just fine since they were made for tasks still relevant and were created to solve specific tasks).

The collaborative nature of Unix tools provides an accumulative effect.

Against the Unix philosophy, we have mainstream applications in which the quality of UX is assessed by how easy an application is to use for the the first time, not how easy it is to use to solve real problems under the the presumption that you would have to spend some time to learn the application.

The openness of Unix interfaces stands against closed, mainstream applications. Just as one should think about the stuff, s/he buys and prefer qualitative things (even if they sometimes in the short run are more expensive), we should with greater strength criticize the ecology of modern applications.

It may sound like this is a political critique, but it's not. It would be possible to make money and do business even if an application was not closed and locked in; having no meaningful contact with the rest of the environment.

This collaborative approach of Unix applications seems to have been evolutionary successful, since Unix tools, unlike “modern” mainstream applications are not replaced every fifth year by a new competitor. Or perhaps they are (ripgrep instead of grep, i.e.) but on the other hand, in an open system, every application is replaceable.

About | Archive