Quite often you can hear that so-called ''binary'' drivers are ''evil'' and you should not use them. Well, this is generally true, apart from the fact that sometimes you have no choice (eg. new AMD/ATI graphics adapters are not supported by any Open Source driver known to us). In our opinion there is at least one practical argument for not using binary drivers. Namely, if you find a bug in the kernel that occurs while you are using a binary driver, the kernel developers may be unable to help you, because they have no access to the driver's source code.
When you are using a binary driver, the kernel is ''tainted'', which means that the source of possible problems may be unrelated to the kernel code (see https://secure-support.novell.com/KanisaPlatform/Publishing/250/3582750_f.SAL_Public.htmlfor more details). You can check whether or not the kernel was tainted when the problem occurred by looking at the corresponding error message. If can you see something similar to the following line:
EIP: 0060:[<c046c7c3>] Tainted: P VLI(the word
Tainted is crucial here), the kernel was tainted and most
probably the kernel developers will not be able to help you. In that case you
should try to reproduce the problem without the binary driver loaded. Moreover,
if the problem does not occur without it, you should send a bug report to the
creators of the binary driver and ask them to fix it.
In the file Documentation/oops-tracing.txt, included in the kernel
sources, there is a list of reasons why the kernel can be considered as tainted.
As follows from this document, the presence of a binary module is not the only
possible reason of tainting the kernel, but in practice it turns out to be the
most frequent one. Generally, you should avoid reporting problems in tainted
kernels to the LKML (or to the kernel developers in general) and the problems
related to binary drivers should be reported to their providers.
Another case in which you should not report kernel problems to the LKML, or directly to the kernel developers, is when you are using a distribution kernel. The main reasons of this are the following: