Leapdragon 2016 - Aron Hsiao Was Here

The UNIX way  §

used to be a kind of gold standard for computing and its flexibility, power, rapid development properties, and stability. It was based on three basic concepts:

(1) Modularity

(2) Transparency

(3) Control

Modularity (1) meant that systems and networks were built out of little, simple building blocks with standard input and output methods and basic functions and properties that could forever be quickly and simply reused and recombined in new and novel ways, ensuring a startling level of efficiency and an unmatched ability to adapt and master novel complex tasks over time. Transparency (2) made this not only possible but practical, by ensuring that every part of the system—even the tiniest component, configuration file, interface, or current system status—was well-documented and accessible with information easily searchable and readable online at any time. Total control (3) was always left in the hands of the system administrator (root) who, it was assumed, as the owner of the system, should be in total control; the administrator was always right and all aspects of the system were accessible to him or her. This kept developers’ assumptions from limiting the ways and contexts in which UNIX could be used, and made it one of the best systems around for trying to solve problems, whether radical or no.

I have had a hell of a week or two with computer operating systems. And the thing is, all of this has been lost. The UNIX way is no more, so far as I can tell.

I’ve been a die-hard Linux user since 1993. Before that, it was SunOS. I’ve flirted with and been comfortable with BSDs over the years as well. More and more, these are all trending toward the Windows model:

(1) No modularity, just giant, monolithic, purpose-specific applications

(2) No transparency or consistency for anything below the user interface

(3) The sense of an almost total lack of control

I’m frustrated with the direction that Linux distributions and the UNIX world in general have taken. More and more on Linux, one does not feel as though one is the administrator of one’s own system, in total control with documentation that falls readily to hand and modular tools at the ready. Instead what’s there is that creeping feeling (so common amongst Windows users) that it’s not entirely clear how the system is making decisions, what subsystems are at work in them, where failures might be occurring, how to fix such failures, or whether it’s even possible to do so without having to re-engineer or re-code significant parts of the system.

The Mac OS X and OpenSolaris experiences, for all the applause these have received in their own ways, are roughly similar. In the “golden age” of UNIX one always knew that reading the manpages and/or taking the time to fix a problem was an investment in systemic knowledge that would pay off doubly as (1) a solution to the problem, since this could always be achieved, and (2) practical skill and understanding that would facilitate the solution of future problems and foster sound practices going forward to head off the recurrence of the problem at hand. Now, one has that old familiar Windows-world sense that it’s not a good investment of time to try to solve most problems; either install or buy some new monolithic tool, re-install, or switch systems.

UNIX/Linux/Mac OS have become Windows.

Before deciding to be dubious about this, take a moment to imagine the good old-fashioned UNIX culture. Things like:

(1) root (user) and wheel (group) accounts

(2) /etc files and /dev nodes controlling nearly everything

(3) BSD or System V style init scripting

(4) man, apropos, whatis, which, STDIN, STDOUT, sockets, pipes, IPC, etc.

Now compare these to:

(1) policykit, selinux, packagekit, other opaque and non-modular tools

(2) Nothing in /etc, the birth of multiplying XML “registries” across filesystem

(3) Ramdisk-based graphical, uninterruptable, message-free init processes

(4a) Nothing added in man(N) for any/all new major system components

(4b) No point to apropos, whatis, which since none of these are “hand”-callable

(4c) No modularity, ability to leverage these using any form of pipes or IPC

Basically, the old UNIX philosophy of “we are a bunch of well documented tools over which the user is forever in total control” has been replaced with the Windows philosophy of “I am The System and you do not need to and cannot possibly know me in my complexity; nor should you, for I have been programmed to fill your every need, and if I don’t, your needs are likely illegitimate.”

This rant has been brought to you by the combined insanities of HAL, DBus, Plymouth, SELinux, PolicyKit, and GNOME.