Divide Linux driver into a completely open kernel part and a user space part which communicates with the kernel driver.
1) Your driver will always be compatible with new kernel releases and we won't have to wait for new drivers releases 'cause Linus has once again broken the kernel APIs/ABIs.
2) NVIDIA driver won't be able to make system crash or freeze.
3) You will be able to easily support KMS and implement Optimus.
This sounds like the best approach for general drivers in my opinion as less will break. I believe AMD's should go that route as well...fglrx breaks with every kernel release