This is a misconception: most drivers tend to be open-source. Take a look in the Fairphone Open OS kernel repository and look at the Qualcomm components for yourself. NVIDIA Tegra has their work here, including the kernel side of the GPU driver, an old Allwinner kernel with many drivers etc. etc.
The trouble exists mostly with GPU and baseband drivers, where the kernel driver is developed in lock-step with firmware and/or user-space components. Vendors don’t keep the kernel<->user-space interface (API/ABI) stable between driver releases, which causes several problems
You are right, I was not precise. There are a lot of open source drivers: unfortunately most of them are integrated in the mainline of the linux kernel, but not in the android linux kernel. So in practice, it is like if they would not exist.
Qualcomm is doing quite a good job at developing clean upstream open-source drivers. For most devices in the Fairphone’s SoC there already is an upstream open-source driver.
This work hasn’t poured back into the Android stratosphere though. I’d like to see that happen
My question is why android linux kernel and mainline linux kernel are not the same thing?
Latest android linux kernel is v4.9
Edit: I found the answer directly from an android linux kernel developer:
The interesting thing about Android’s design is how little we modified the kernel. Most embedded systems on which I have worked have made drastic changes to the kernel, only to leave user-space alone—for example, a heavily-modified “realtime” kernel but X11 for a GUI.
Android is the opposite: only minimal changes to the kernel, but a user-space wholly unlike that of any other Unix system. In fact, Android’s user-space is so different from stock Linux, you can easily say that Android is not in any way a Linux system, except for the kernel.