Drivers for Graphic Cards has been a pain in the ass for open source communities. Since the market is still evolving very fast, the vendors are reluctant to give any information to their competitors. The problem is that they consider open source drivers to be one way of giving away information. I will not comment on that one right here, just mention it as a fact: vendors have been very reluctant to deliver open source drivers or even information to others who would be able to create those drivers. Hence, the end-user in most cases has the choice of using a less-featurefull, lower-performance but open source driver or to use a binary-only driver provided by the vendor.
The open source driver is generally of lower performance because of the lack of information, making it difficult for the programmers to make use of the hardware capabilities. They need to go through a long and difficult process of reverse engineering in order to guess the way the hardware works.
However, the binary drivers have had their own troubles. These problems have practical, moral and legal roots. The first issue is that it has to be maintained separated from the kernel. Any changes to the internal kernel structures can make the driver worthless because it cannot be used in the next kernel release unless the vendor releases a new version. Also, the driver needs some “glue” that has to be created for each specific version of a kernel, even when there are no changes to any internal kernel structures. As the programmers that create the linux kernel drivers are no linux kernel experts and work separated from that community, several problems caused by the incorrect programming of the binary modules have caused more than a headache to this community, to the point that binary modules now “taint” the kernel and are no longer supported by the community (nor by vendors). This is the right thing to do in my opinion: since they cannot fix the binary module, they refuse to look at any problem with kernels running that code. Since the linux architecture is monolithic, a programming error in the driver can cause problems in supposedly unrelated parts (file system corruption for example). Vendors have improved their code and the drivers have improved, but they are nontheless a potential problem.
Second, the moral issue: people wanting to run a completely free operating system on their boxes will not want to be forced to install a binary-only driver in order to make use of their hardware. Not much to discuss there.
Third, the legal issue: the linux kernel is released under the GPLv2 license. This does not allow the creation of binary-only derivative works. So the question is: are binary-only modules derivative works? The answer seems to be that if the modules are created to be used inside the linux kernel, the make use of the internal structures and thus are effectively derivative works. There are some cases where the answer is less clear, but the general idea is that binary only drivers should not be allowed.
So it comes as good news that at least one vendor (Intel) is announcing full support for open source drivers for their cards. And Intel is the biggest player in that market.