Tuesday, June 9, 2009

The economics of LinuxTV driver development

For the eighteen months or so, I've been actively contributing to the LinuxTV project. It all started with a personal need - I wanted the Hauppauge HVR-950 to work under the default Linux kernel so I could watch TV. This prompted me to learn the intricacies of the DVB subsystem, how devices such as this are designed, how ATSC worked, the relationships between demodulators, tuners, bridges, i2c, etc. I got the device working, and then wanted to leverage the time and knowledge gained to see if I could make other devices work. So I bought another device... And another... And the next thing you know I have a rather sizable collection of devices that now all work under Linux.

Hundreds of dollars spent. Hundreds of hours spent. Lots of devices working, even though I only needed one of them myself. I've convinced myself to buy devices that I failed to successfully debug in the field with users, since I didn't want to admit that all the time was wasted for nothing. To this day, I have never received a single dollar for any of this work.

Now, I'm more than happy to help the community with my time and energy. But the situation with the money has gotten out of control. More recently a couple of vendors have been kind enough to provide free sample hardware under the presumption that I would improve the driver support, which helps alot. However, I'm getting requests from people abroad now to help them with devices that use European broadcast protocols such as DVB-T (even sending me the hardware in some cases). I've reluctantly agreed to help, under the presumption that the devices would be relatively easy to get working (given a number of them were variants of pre-existing designs I've worked with).

This was a mistake.

I was able to bootstrap the driver support relatively quickly, but without a legitimate signal source to test with, debugging is a nightmare. I'm forced to have users in those countries test the support. Case in point: I've now exchanged 35 emails on the Terratec Cinergy T XS that a user sent me, and I still haven't gotten it to work. I don't know if there is a driver problem, user error, a lack of a reliable signal source, etc. If I had a DVB generator, I could probably get it to work in a couple of nights, iteratively debugging the various components. However, doing this over email with relatively inexperienced users in an unknown software environment is just not practical.

Now I am faced with a decision: do I continue to email back and forth with the users to continue trying to isolate the problem? Do I go out and spend $2000 to buy a DVB signal generator? Or do I just admit failure and send the hardware back to the users?

I cannot keep doing this while personally spending money buying stuff I don't personally have any user for. I'm not trying to be greedy. I am willing to donate my time, but my volunteering to make these devices work should not be *costing* me actual money.

There needs to be a new model.

If a user plugs in his tuner under Linux and it "just works", he never gives it a second though. Just like I never give a second thought to who wrote the Ethernet driver for my PC. The user has no incentive to pay after-the-fact for all the work that was done to make it work. Likewise, the manufacturers who make the tuners have no way of determining how many people are actually using them under Linux, so they have no incentive to pay for consulting services, even if it's just to cover the cost of test equipment.

The last time I needed a soldering iron, I had to take a subway 90 blocks uptown to City College to use the iron a very nice Electical Engineering student was nice enough to make available. I couldn't bring myself to spend eighty bucks to buy an iron to fix some random user's device.

Another fine example: When I was doing the HVR-950q analog support, and I spent a week debugging what ended up being a bug in the chip's i2c implementation. The only way I ultimately figured out the problem was when I spent $150 and bought a logic analyzer to look at the i2c bus waveform.

I was fine spending the 100 hours of my time to make analog support work on the 950q, even though I had no personal interest in analog support. But the fact that I spent $150 of my own money is something that just rubs me the wrong way.

Suggestions certainly welcome regarding how this problem can be dealt with.

Anyway, Devin's LinuxTV tip jar sits here, in case any of those people who have benefited from my work feel like contributing to future development...