Drivers de código abierto para NVIDIA son aceptados en Linux

Desde hace casi un año, en Fedora se la jugaron por habilitar por omisión el driver Nouveau, una alternativa de código abierto a los drivers de código cerrado de NVIDIA. Mientras que otras distribuciones de Linux han sido más cautas y lo están ofreciendo como una instalación adicional, en Fedora ya se ha aplicado con éxito en un par de releases.  Pero esta situación está pronta a cambiar, ya que tal como lo mencioné en el capítulo pasado de Fayerwayer.tv, el driver Nouveau finalmente ha sido integrado en Linux y por lo tanto será parte de todas las distribuciones que incluyan el kernel 2.6.33.

Todo comenzó cuando Linus Torvalds cuestionó a Fedora por seguir incluyendo a Nouveau en la distribución sin realizar un esfuerzo por integrarlo en Linux, y la respuesta fue que se debía a que no era suficientemente estable, lo que sonó a una simple excusa ya que si no era suficientemente estable, entonces ¿por qué lo incluían en Fedora desde hace un año?

Poco a poco, Linus Torvalds fue dejando en evidencia de que no había una razón real para no incluirlo en Linux, ya que siempre que derribaba una excusa, aparecía una nueva excusa cada vez más débil, llegando incluso a la ridiculez.

Finalmente sólo quedó el problema del microcódigo necesario para hacer funcionar el driver de NVIDIA, algo que es común en varios drivers, y finalmente se aplicó una solución conocida:  separar el microcódigo de driver y cargarlo en forma independiente mediante el sistema de carga de firmware estándar de Linux.  Esto no le va a gustar a Richard Stallman y le dará una nueva razón para criticar a Linus, pero simplificará la vida de millones de usuarios de NVIDIA en Linux.

Debo mencionar que existía mucho temor en el aspecto legal de incluir el microcódigo, ya que después del caso SCO se pide que las contribuciones al kernel sean firmadas de tal forma que exista una responsabilidad sobre ese código y Red Hat era temeroso de responsabilizarse por el microcódigo.

Por su parte NVIDIA mantiene una posición neutral respecto a Nouveau:

Los chicos trabajando en Nouveau han hecho un trabajo realmente increíble hasta ahora.  Aún así, nuestra política se mantiene igual : no intentaremos obstaculizar su esfuerzo, pero tampoco tenemos planes de ayudar.

Bonus track : Drivers para NVIDIA en Linux

Hasta hace poco los usuarios de NVDIA en Linux tenían dos alternativas: usar un driver de código abierto pero con limitaciones funcionales o usar un driver de código cerrado completamente funcional.  Y no se trataba de una opción religiosa como algunos podrían pensar, sino que cada cual tenía sus propias ventajas y desventajas, por ejemplo el driver de código cerrado no se puede integrar completamente en las distribuciones de libre descarga y se tiene que instalar por separado, no siempre va sincronizado con los avances que se realizan en Linux y cuando hay problemas, sólo los puede solucionar NVIDIA y no la comunidad.

Por otra parte el driver de código abierto, también conocido como “nv”, se puede usar out-of-the-box sin que sea necesario hacer nada adicional, pero tiene el problema de que es poco mantenible.  Originalmente fue escrito por NVIDIA para proveer un driver para Linux, pero con la condición de que no se entendiera mucho de su funcionamiento.  Esto dificulta que entren nuevos desarrolladores a implementar nuevas características.

Hace unos años y bajo el alero de X.org y Freedesktop.org, se inició el desarrollo de un tercer driver llamado Nouveau, con el objetivo de disponer de un driver de código abierto construido de tal forma que la comunidad lo pudiera mantener y que además soportara la funcionalidad que no existía en nv.   La tarea no era sencilla, pero mediante análisis del driver nv y fuertes dosis de ingeniería inversa se ha logrado implementar lo existente en nv y mucho más.

En la actualidad Nouveau soporta aceleración 2D prácticamente completa, y aceleración 3D a nivel experimental. Confieso que en un principio no le vi futuro al proyecto pero afortunadamente estaba equivocado.

Links:
NVIDIA’s reponse to Nouveau work (Phoronix)
Linus wants Nouveau merged into kernel (Phoronix)
Part 2 of Nouveau saga : The Microcode (Phoronix)
The Nouveau pony is pulled, ctx_voodoo ignored (Phoronix)
Nouveau to go into Linux 2.6.33 kernel (Phoronix)