Saturday, September 23, 2006

A letter to NetBSD

Dear NetBSD,

It is almost five years since we first met and I still remember how much I liked you at that time. Despite your 1.5 release had slow disk performance when compared to the other BSDs, I found in you an operating system that just felt right. You focused on clean and well designed code among many other goals; sincerely, I didn't come to you looking for portability because I never had anything else than i386 machines. All these feelings turned into love after installing and experimenting with you: the system was minimal, well documented and made sense. As you know, I soon left FreeBSD and migrated my machines to you.

pkgsrc, one of your children projects, was also nice when compared to FreeBSD's ports. The buildlink concept was very interesting and in general it looked less clumsy than FreeBSD's ports: few build-time options resulting in consistent binary packages, no interactive installs, etc. It lacked many packages but that was a plus for me: I'd easily get involved into your development. I set myself the goal of porting GNOME 2.x to you and achieved it some years ago.

At that time I had never contributed to any big free software project in the past, so you can imagine how excited I was some months later when one of your developers invited me to join you. That boosted my pkgsrc contributions and I started looking at contributing more stuff to the base system. If I can tell you a secret, I had always wanted to write a simple operating system on my own but given the size of this task I preferred to join the development of an existing free one and help as much as possible. To some extent I achieved it and learned a lot along the way.

As I said above, I love(d) you, but keep in mind that love and hate are not opposite feelings.

As another developer recently reminded me, one of my first changes to the system after becoming a developer was the addition of the "beep on halt" feature to the i386 platform. I quickly wrote that feature and was eager to add it to the system, so I presented it to tech-kern. My excitement went away quickly. That tiny change generated a lengthy discussion where everybody exposed his preferred way to achieve that feature and bashed all other possibilities. Eventually, it was all bikeshed. However, as I was new I tried to please everybody and in the end committed the feature.

If that had happened only once, you'd say I had had a bad day with you. But it turns out that this same situation was and is still too common in your mailing lists. Indeed, there are a lot of competent people in them but consensus can never be reached.

The problem is that this situation scares off many new potential contributors. They come excited to you with new patches and functionality that could be valuable to the OS but you turn them down because you have no clear long-term goal, because the changes are not perfect and you insist on perfectly designed stuff on the first proposal or because there is no consensus. Oh, and that is without counting all those cases where you do not provide a single reply to proposals. Eventually the contributor gets tired of the discussion (or lack thereof) and runs away.

I want to make clear that some developer groups within you are still kind to deal with such as the pkgsrc team or the www maintainers.

And no, your "portability" goal is not interesting any more (and as I said above, it never was to me) to the general public. Your brother Linux runs on as many systems as you if not more; it was just amazing to see it working on a Linksys router just some days ago, while you cannot get close to it. NetBSD, you need to review your goals, make them clear and, if needed, generate some hype about them. Yes, even if you don't like it, hype will attract many new users. Some of them — possibly a tiny bit — will be potential new developers. And you need as much of them as you can to evolve or otherwise you'll be stalled in the past because you won't be able to keep up with new hardware.

While I've had a very good time hacking your code and working in pkgsrc, it's not fun to me any more. It is frustrating to spend lots and lots of hours of my free time to later see that it was in vain. Furthermore, I'm extremely tired of having an unusable desktop system because of broken stuff — I know, not completely your fault — and the need to be constantly maintaining it. I need and want to be productive in other projects but you do not let me to.

You know, contributing as a volunteer to free software projects is about having fun. I'm not having fun any more so I'll most likely be deinstalling you from my desktop machine and permanently shutting down my home server, both of which are running 4.0_BETA. This is not still a sure thing but, if things continue as usual, I sure will. And soon.

This is not a good bye though. I still believe in your hidden goals: good design, standards compliance, etc. — these should replace the "portability" buzzword — so I'll install you on a spare machine and/or under a virtual machine to be able to do eventual hacking and maybe GNOME maintenance. Oh, and of course I'll keep using pkgsrc under other systems.

Yours sincerely,