The advantage of tracking and working the upstream projects (kernel, mesa, X) is that your code will always work with the latest releases. The disadvantage is that it will need some work and there will be some lag to port to older releases. If you track older releases, there will be work and lag required to support newer ones.

The open drivers track the latest releases. They catch a lot of grief for not supporting older releases immediately, although most distros do a good job of backporting the necessary changes.

The closed drivers target current releases, but that means there is usually a lag catching up the support for the latest kernel/X releases. They catch grief for not supporting the latest kernel/X releases immediately.

Neither option is perfect.