2003-12-15 15:11

The case against cooperation

I often see and read about cooperation in free software. I read about how multiple competing projects are counterproductive, about how cooperation would make things go faster...

You know, that's all wrong. I am not saying cooperation doesn't have its place, it does! It's just that not everything works better with cooperation.

I will just talk about what I know, and what I know is very little, so sorry if the examples are too tightly focused, but I am a small picture guy.

Example I: KDE and GNOME

For the GNOME fans: If cooperation were more in vogue in 1996, your object of affection wouldn't exist, so that's it for you.

For the KDE fans, the case is a little harder to make, because we assume that we would be better along if GNOME hadn't existed (I had even said that a few times).

Although it is not possible to prove one thing or the other, since history is not an experimental science, allow me to point out that KDE's goals were much smaller, its scope immensely less ambitious. It was meant to be about 20 small programs, not a multimillion-LOC thing.

GNOME was part of the incentive to move into the larger stage. Think of it as an arms race.

Let's face it, some things were developed just because GNOME had them, or even because they didn't have them yet ;-)

I assume GNOME guys can say similar things, it should be even more obvious in their case, since the project was started because of KDE (Miguel once said something like KDE convinced him that it was possible to do[1])

So, cooperation would have been detrimental. It's not that cooperation hurts development, but that competition fuels ambition, and ambition fuels development.

Example 2: Mad scientist syndrome

Once upon a time, Rasterman had started developing what he called 'themes' for Gtk+.

You know, I had read some of his code when he started hacking fvwm, and while I respect his graphic skills (although his taste is horrid to me [2]), his coding skills... well, let's say that I don't hold mine in high esteem, but his code... well, I suppose it was good in some efficiency sense... I hope it was, else it was unforgivable.

Also, I was convinced that Qt was way better than Gtk+ in any conceivable sense[3], so I thought... how is he doing it?

It turns out that he was replacing the drawing code for the widgets with what would later be known as the "pixmap engine". The drawing code read a config file, loaded pixmaps and pasted them over the place the widget would be.

Mind you: that scheme is hideous for many reasons, and simple badly designed (you can't change your colours in any reasonable way, for example). But... I had troubles.

You see, we are talking Qt 1.x at the time. Under the non-free-software license. I couldn't touch Qt, so I couldn't modify the drawing code.

So, how could I show Qt was better? By doing an evil hack (TM)[4], of course. I intercepted the drawing events in the application class.

I held lists of widgets at creation, I diverted the expose events off the toolkit code, I subclassed the application class, I overrode the compiled code with LD_PRELOAD, I used almost every evil hackery I could find, and you know what? It worked. I had a screenshot to show, too.

In fact, in 36 hours I had a more advanced theming engine than Rasterman's, by some measures (I had themed way more widgets).

I showed it to some KDE guys, Kalle showed it to some Trolls, they got so nauseated by it, I still think it partly convinced them to add styles in Qt 2.x, so I wouldn't have them look at it again (It used, after all, only the public APIs).

So, where is the connection between that story and cooperation? Oh, grasshoper, the connection is that there wasn't any connection.

Had I been a cooperative sort, I would have shown the ideas to someone and been laughed at. Or I would have contacted some of the Trolls (I knew a few of them back then) and would have been convinced that it was a bad idea (it was :-)

The only reason why I coded for 36 straight hours was because I really really really was pissed off that Rasterman could hack Gtk+ and I couldn't do the same thing to Qt.

So, cooperation drives to the average. Cooperation begets bland. And while bland is good for you, if everything was bland, free software would suck immensely. Free software is not a tool for a goal, at least not for some of those writing it, it is a toy, in the good sense, something that is useful for itself, in itself, even if it does nothing. So are jewels, you know.

While a project can not be developed by a single person, a design almost certainly MUST, specially if it's a new or strange one. And some stuff really has to be done in solitude, or it won't be done.


[1] I really don't like the guy (old story don't ask), but hey, why would he lie about that?

[2] My taste is horrid to me, too.

[3] I never said my opinions were ver rational

[4] And I mean evil. Evil as in mordor-code, evil as in a design so hideous I still remember it :-)


Comments powered by Disqus

Contents © 2000-2018 Roberto Alsina