In the old days hardware manufactures for computer parts had to provide detailed specifications to the people they sold their hardware to, otherwise they wouldn't know how to use the thing. Software writers would then read these specifications to understand the interfaces and protocols they operated by to make the entire assembly work. If that didn't happen, the hardware would be useless and no one would buy it. Eventually those varied interfaces converged together and became de facto standards so that new hardware would work with the old software.
Years later Microsoft Windows becomes the dominate operating system, so much so that PC is synonymous with Microsoft Windows. So the hardware manufactures that make new kinds of hardware, like advance graphic cards and wireless cards, would start hiding the operating protocols in Windows only “drivers”, instead of providing detailed specifications. This is why operating systems made of entirely free and open source software (like gNewSense) have a difficult time supporting every wireless card.
Sometimes hardware manufactures of graphic and wireless cards do provided drivers for GNU/Linux systems, but not as free software. Disguised as source code, these indecipherable drivers are included in the Linux kernel of popular GNU/Linux systems like Ubuntu. Magically it works but no one can find out why except for the hardware manufactures. These drivers are called “binary blobs” because they take on the form of long lists of random looking numbers.
I have heard about “open source hardware”, which can range from hardware with detailed specifications to chips with semiconductor masks covered by the GPL and downloadable from the internet. The Arduino and Uzebox are examples of “open source hardware”. Both of those projects use Atmel AVR processors (which have detail specifications available) and both have descriptions of how to connect the different components together. The site opencores.org has many projects that use the free software model for designing computer chips. There hasn't been a project started for wireless cards yet. It remains to be seen if this would solve the problem, it would be a lot easier if the hardware makers would cooperate like they used to.