February 1st, 2007

Do the Right Thing

One of our users complained because of the following warning:

kernel: process `named' is using obsolete setsockopt SO_BSDCOMPAT

The engineer who handled the ticket described the problem. Linux used to have some incompatible behavior on their UDP sockets. Long ago, they added a flag to tell the kernel to use compatible behavior, SO_BSDCOMPAT. In the 2.4 kernel, this became the default and the flag was no longer necessary. Starting with 2.6, the kernel warns about applications that use this flag; presumably with an eye to removing the flag.

The problem is that if you want a product that supports older kernels, you need to use the flag, but then users with the newer kernel get scary messages.

So the engineer decided that the appropriate answer was to add a question to the FAQ, complaining about the Linux kernel design decisions.

I suggested we add a compile time check, so users don't see the message.

The engineer retorted that sometimes people move binaries between different machines. This is true. I can imagine people who compile on a 2.4 or 2.6 box and run the binary on the old 2.2 machine creaking away in the corner.

So I suggested we use a run time check. In fact, I wrote the code (it wasn't hard - like 15 minutes of work).

The engineer went ahead and changed our software to include the runtime check... but he's not happy about it.

To me, the thing that matters is happy users. Users don't care who's fault it is that their system does weird things! They just want their stuff to work.

Engineers pointing fingers at each other and refusing to actually make things better is not got a good thing.

I think this ended up in a victory for the poor, downtrodden user. But why does it have to be so hard? :(