The Responsibilities of the Technologically Literate

I want to walk you through something I read a while ago and have been stewing on since. From October 18th in Wired Magazine, a robotic cannon killed nine people and wounded fourteen others.

They wrote that these machines are supposed to select and aim at a target, and “[wait] only for a human to pull the trigger.” Except that sometimes, “these machines start firing mysteriously on their own.”

They call it a software glitch. A malfunction. The problem I have with these terms is that, similar to the term “accident” in a traffic collision, they tend to imply no one is to blame.

I submit that somewhere, some programmer is to blame. If you write code, no matter how trivial, your job is to ensure the efficiency, consistency, and most of all the accuracy of your code. To fail in this regard can be tantamount to negligent homicide.

Coding errors can cause great cost; in the simplest of projects, this cost may only be in time, but soon that cost becomes money. In greater projects, it might be personal possessions, or public relations, or in still greater projects, lives.

This is not the first time something like this has happened. I am reminded of the infamous Therac-25, which between 1985 and 1987 was involved in at least five deaths due to poor interface design and failure to sanitize inputs. The Northeast Blackout of 2003, caused by a race condition in power monitoring software. The MIM-104 Patriot whose failure resulted in the deaths of 28 soldiers in Saudi Arabia in 1991 due to an error in time synchronization.

These are our responsibilities, laid upon us by virtue of our interest in the technologies which run our world today and those that will tomorrow: To provide value through technology by relieving stresses in tasks, or by relieving those tasks altogether, and to protect ourselves and our fellow man from those very technologies we create, and to the best of our abilities, from himself.


Linux for Human Beings

Don Reisinger of CNet wrote an article appearing on Slashdot today that talks about linux and its place in the consumer market. He illustrates a dichotomy between two different types of linux developers, but his conclusions are off-base.

According to Reisinger, linux has either three directions from here: 1. Become super user-friendly at the expense of the tweakability and under-the-hood capacity of linux, 2. go back to “linux’ roots” and follow Linus Torvalds, or (and here I quote) 3. “face a “civil war” that could lead to total Linux annihilation.”

I’d like to present something to you. In the good old days of the Microsoft world, we had MSDOS, a relabeled version of the “Quick and Dirty Operating System”, QDOS. In this world, everything was configurable. You could do anything you wanted. Unfortunately, because doing anything complicated took too many steps, people didn’t often do much. This is why they developed (following Apple), Windows. Now Windows didn’t do much, but what it did do was easier and more honed to human beings than was the command prompt.

Windows took a step further from that with WinXP and Vista, wherein the command prompt, while still there, is crippled to the point of being barely usable.

On the other hand, Apple’s newest, OSX, is a BSD-derivative operating system, and while it has a fully functional and exceptionally usable GUI, it also has a complete shell available to the user, with approximately all the tools from Linux/BSD available.

This “civil war” Reisinger presents is a fear that’s ungrounded. I am an Ubuntu user. This is because the simple tasks that I perform on a daily basis, as well as the setup tasks that prepare the machine to meet my standards, are made extremely easy for me, and with minimal interference. It’s important to me that the terminal remain always available to me, that I can still write and run bash scripts, that, when it’s faster to do so, I can still fire up a shell.

But I shouldn’t be forced to.

This is where the dichotomy becomes entirely flawed. There is nothing that says an operating system can not be both oriented toward usability, and fundamentally malleable. A person should be able to fire up an application and have it, within reasonable tolerances, do what he or she expects. This is a mark of a conscientious programmer; any code which is not designed with, or with the ability to have, a GUI attached should be viewed as nearly wasted code.

Linux’ roots are the same place that any other operating system’s roots are: a collection of applications and machine code which enables the user to utilize the capabilities of the machine. An operating system which does not do this is an unfinished operating system.

Unlike any other operating system, we can keep working together to finish Linux.

I want other people to use Ubuntu. I’ve been putting up posters, wearing stickers, giving out burned copies, telling people about it, I’ve been evangelizing this because as an OS, Ubuntu is almost finished. It’s friendly, it’s usable, and I don’t have to hold a newcomer’s hand quite as hard to get them into it. It’s not about money, because I can’t, don’t, and won’t ask for any–and I don’t think Canonical ever will either.

What I want is users. I want a whole boatload of us. I want enough of us out there that choose Linux over non-*nix that open source libraries start getting used to reach us. I want games designed by corporations in OpenGL2, rather than DirectX. I want applications to be released using Mono instead of .Net; I want these things to happen so that anyone, anywhere, on any operating system–Even Windows!–can use everyone else’s software. And that’s only plausible if we get attention.

So I applaud Mozilla for providing the best cross-platform browser and email client, Canonical for the easiest Linux distribution, HP for their open printer drivers, System76 and Dell for providing preinstalled machines, Blizzard for already releasing OpenGL games (like World of Warcraft), and all other companies that stand behind the choice of the user.