Linux does not have a stable binary kernel interface for drivers. This enforces either that all the drivers must be in the kernel source tree or that drivers become broken with kernel updates.
I don't want to have a political debate here about free software. But I can see ideological reasons for how Linux try to force hardware manufacturers to share the code for their drivers.
The (proprietary) driver issue is a big pain for people who want to use Linux for desktop as a workstation e.g. development. I would say that it is the biggest obstacle for adaption of Linux desktop.
Why couldn't we have long term supported kernels with decoupled drivers?
Discussion: http://lkml.iu.edu/hypermail/linux/kernel/1604.0/00998.html
(You might disagree with that doc, but if so you should address its arguments directly.)