There’s been lots of discussion recently about the fact that certain computing platforms are less open than some people would prefer, with many people being up in arms about this fact. Once, I would have been one of those people; these days, I’m not (though seeing the reduction in openness does make me sad), and I’m trying to tease out why.

The key concept here is that freedom to use software or hardware in ways that you choose isn’t just another feature that a piece of software or hardware may or may not have: it’s a separate and parallel class of good. And, for many people, it is a very strong class of good: there are a lot of people in my social circles who, given the presence of a free tool for a job, don’t seriously consider using a non-free tool at all. I never considered using non-free programming tools for years, for example, or using Windows instead of Linux.

That above example is for a particularly strong version of openness, namely freedom as used by the Free Software Foundation: the ability to not only use the software to produce whatever you want but to be able to modify it so you can expand its range of use. But openness is a continuum, and there are less extreme but still valuable positions along it: I remember when growing up reading about a compiler whose developer charged people for distributing software built by it, and this felt wrong to me at the time even though I never thought twice about the fact that I couldn’t get source code to the compiler. And I would also prefer to use a compression codec with a publicly available standard over one with a closed standard, even though the former might be just as expensive to use (e.g. because of patent licenses).

But I use non-free software a lot more than I used to; my use of non-free software got a big boost as my volume of video game playing increased, but I also use non-free software in many other areas as well. Video games give one example where free software loses so badly on the feature comparison as to not be worth considering, but that doesn’t apply to all the software I use: e.g. why do I use Tweetie as my Twitter client and Things as my list manager in the presence of many open source alternatives?

I think what’s going on for me is this: yes, features and freedom are both separate and important goods to me. But, where you have two dimensions for evaluation, you have the possibility of more than two dimensions, and a third dimension has started to come to the fore for me. I’m not sure exactly what to call it: at first I was thinking I’d use the term ‘beauty’, but that’s a bit stronger than what I mean. ‘Aesthetics’ isn’t a bad term, so maybe I’ll end up going with that, but for now, I’m leaning towards the term ‘habitability’. (Inspired by Richard Gabriel’s term ‘habitable code’, though he uses that to refer to the source code itself rather than the software or hardware involved; while I’m borrowing the adjective, I don’t claim that I am (or am not) using it in an analogous way.)

Basically, there is software that I feel happy to be sitting down and using, and there’s software that grates at me (sometimes only barely, sometimes quite violently) when I have to interact with it. I might be happy about the software because it does a particularly good job of meeting and even anticipating my needs; I might be happy about using the software because of a strong, well-thought-out vision that motivates it (even though that vision may entail removing features that, in the abstract, I’d want); I might be happy using the software because it’s a pleasure to look at. But, in all instances, the thought of using the software makes me happy; whereas there’s a bunch of software out there that I shy away from using, that runs the gamut from actively pissing me off to just not feeling right. I’m using the word ‘software’ here, but everything in this paragraph applies equally well to hardware. (And, in many prominent recent instances, to a mixture of software and hardware working well together.)

So this notion of habitable software is very important to me right now, equally so to functional software and open software. And, unfortunately, right now I’m having a particularly hard time right now finding instances where all three of these meet; this makes me sad.

Is this a new feeling for me? At first, I thought it was, but now I’m not so sure. I first started seriously programming doing non-application software from, say, 1987 to 1994. And, in that time period, open software was actually pretty awesome in terms of habitability: Unix was a great platform to be programming on, Emacs was a great editor, the GNU toolchain was very solid, Unix’s networkability was so much better than anything available for normal desktop use as to be beyond compare, and even X Windows was just fine, given the other alternatives. So you really could get all three of that trio at once; I’m no historian, but I think you could probably make a pretty good case that openness (and even freeness in the FSF sense) contributed actively to functionality and habitability in that case.

It’s a couple of decades later now, though; unfortunately, a lot of that world has stagnated in the interim. Unix is still a good foundation to build on (my favorite general-purpose computing platforms are all Unix-based), and its networking has flourished in ways that would have been hard to imagine at the time; Emacs and GCC and X Windows have all improved, but not nearly as much as I would have liked, however. If I were doing certain kinds of server development, I would find it acceptable (though still grating at times); otherwise, not so much. (Though I’m pretty sure I’ll always have a soft spot for Emacs!)

So the needs for a computing ecosystem has changed; I’ve changed too, though. Certainly playing video games has had a lot to do with my shift in viewpoint, both because they give examples where open alternatives aren’t at all competitive and because they give aesthetics a more central role. And not being on a student income means that it’s a lot easier for me to buy software and hardware than it once was.

But agile has played at least an important role in my shift as those factors. One reason is its emphasis on the ease and pleasure of working with the code itself (so I guess that habitable code analogy isn’t too far off): I value that in my programming, shouldn’t I value that in my programming environment more broadly? Also, the programming techniques that it suggests have also pulled me out of my old Emacs / C habitat: I want to use different programming languages (many of which Emacs supports badly), I want automated refactoring (good luck doing that in Emacs). (Though I should point out that much of what I want here is supported by open tools; they’re just different ones, and ones that come with their own set of habitability problems.) And, finally, agile insists on putting business and external design considerations at an equally important level to technical considerations when developing software; it’s no accident that the golden age I mentioned above was a golden age exactly for a community where the same people could judge both of those considerations well.

I could go further afield, too. I seem to be unable to go more than four or five blog posts in a row these days without mentioning Christopher Alexander; he’s convinced me that, to build spaces that you feel good living in, you need to take account of your environment as a whole, instead of using freedom as an excuse to do whatever the hell you want. And then there’s global warming: while I think that my house will remain habitable for the next several decades, untrammeled freedoms are putting habitability at risk in a very literal way.

So, at least in the computing arena, I’ll propose functionality, openness, and habitability as a trio of goods, the absence of any of which leaves me with a system that doesn’t feel right. I suspect I could get that trio to help me analyze other contexts, too.

I’d hoped that writing this would lead to my feeling more at ease. And, to some extent, it has: I’m happy enough with choices that I’ve made that involve selecting two out of those three criteria, in the absence of solutions that fit all three. But, having said that, I’m still not thrilled: it still doesn’t feel right for me to say that solutions that aren’t open are fine. What I would really like is for people working on open solutions, on free solutions (in computing arenas or more broadly) to have habitability front and center in their vision of the world they’re trying to build.

Freedom is great, but how we use that freedom is a choice: let’s choose to build something beautiful.

Post Revisions: