Friday, October 09, 2009

Proprietary Drivers Lead to Hardware Duplication

I'm your typical geek, obsessed with gadgets and technology, so I could probably burn through almost any size budget, buying cool things to hack on and/or play with, without even blinking. Conversely, I'm young, and still working my way up the ladder, so my income is definitely limited. Finally, I'm married, and have two young children, so I have far better things to spend my money on than the new 8.02.11xn enabled light bulb. (Bonus points if it also speaks wireless DMX)

So, the net effect of this, is that when I do get something new to play with, I have to choose carefully, and try to get the most tech bang for my dollar. Case in point, the first time I've gotten a GPS device to play with it is in my corporate supplied Blackjack 2 smartphone. Now, I've wanted a GPS for a while. Geocaching looks like a lot of fun, and is something I've wanted to try for a while. I'm also interested in wardriving as well as helping out OpenStreetMap.org

However, a Windows mobile smartphone without wifi isn't really the best tool for any of these activities. However, it has GPS builtin, and it has bluetooth, just like a typical bluetooth GPS dongle. And, thanks to a hack I found online, the internal GPS can be accessed directly on a COM port, instead of only through the Windows Mobile APIs. In an ideal world, I could just read the GPS NMEA data over bluetooth from my laptop, and use it the same as any other GPS dongle. However, because of the proprietary nature of everything involved, this isn't an option, and I'm forced to buy a different GPS receiver if I want to use the GPS with my laptop.

This is all a software issue though. The technical capability clearly exists in the devices. However, the drivers don't allow for it. Drivers, written by hardware companies, who don't want anyone else to know the intricacies of how to interface with their hardware, as that is "proprietary knowledge" and a "trade secret". Now, there is some legitimate concern here. If you know how to talk to a piece of hardware, and can map inputs to outputs, then reverse engineering, especially the two team, clean room style, becomes much easier. However, many hardware companies write really lousy drivers, full of bugs, and lacking many features.

This is a fight faced by the Linux and BSD communities since the beginning. There isn't enough market share for most hardware manufacturers to create their own drivers for open source operating systems. However, despite offers from the community to do the development, the manufacturers are also unwilling or unable to release any sort of technical specifications, or provide any sort of support at all. Which really created the old school Linux mentality of finding something you wanted to have work, then hacking at it until you had created a working driver for it. The end result here is that the consumer loses, and the manufacturers don't see the problem, when I have to buy a separate GPS device because my laptop can't use the one built into my smartphone.