Open-Source NVIDIA Driver Approaches Stable State
Nouveau, the reverse-engineered open-source graphics driver for NVIDIA's entire range of graphics processors, is reaching a stable state where it's exiting the "staging" area of the Linux 3.4 kernel and being considered part of the standard, stable kernel configuration. How though is the Nouveau driver working out compared to NVIDIA's official, closed-source Linux graphics driver? Here are some new benchmarks from ten different graphics cards and other information on the state of Nouveau.
The Nouveau driver has had a long and challenging journey to get where's it at today where the developers are now comfortable with the Nouveau driver leaving the Linux kernel's staging area and thus also fully committing to a stable ABI for their kernel driver (their DRM version is also now marked as v1.0). Nouveau began more than a half-decade ago; I first wrote about the project in 2006 and it wasn't until 2007 that OpenGL began to sort of work on this free software driver that was started by Stephane Marchesin (he's no longer directly involved with Nouveau as for a while now he's been off working for Google on Chrome OS). Nouveau's journey has been quite interesting and in the past six years has earned itself 450 news posts where I have written about this open-source NVIDIA driver and over 60 featured articles that have included benchmarks or more extensive information on this Linux driver.
Aside from the kernel component, there's the user-space Nouveau 3D drivers in the form of Gallium3D for all modern NVIDIA generations and the classic Mesa DRI driver for the old fixed-function NVIDIA GPUs. The Mesa/Gallium3D support has been mainline in Mesa for a few years. The libdrm support for Nouveau has also long been in mainline, but requires that this DRM library be built with the --enable-nouveau-experimental-api build flag. The xf86-video-nouveau DDX driver remains available in Git form but it has yet to experience a release in all its life.
In the past three years the pace of Nouveau's development has really picked up pace as more distributions begin to use the Nouveau driver as their "out of the box" NVIDIA Linux graphics driver since it's open-source. In particular, it is largely because in 2009 Linus called for the Nouveau driver to be merged. Nouveau was merged into the Linux 2.6.33 kernel staging area at Torvalds request, which made it much easier for new users and developers to begin trying out this community-backed project.
The Nouveau developers continue to be playing catch-up in some areas such as when it comes to proper power management support and GPU core/memory re-clocking and various other features compared to the NVIDIA Linux driver (SLI, 3D Vision, and other features are also out at this point), but they have been successful in developing a truly open-source OpenGL 2.1/3.0 driver for GeForce/Quadro hardware without any support from NVIDIA Corp. Besides OpenGL, back in February they even got the first bits of OpenCL running on the NVIDIA GPUs, but this code is still a work-in-progress and not yet mainline. There is also an open-source NVIDIA CUDA implementation that came out last month.
For those wondering about the Nouveau driver support for a particular hardware generation there is the Nouveau Wiki Feature Matrix that documents from the latest Fermi (NVC0) and Kepler (NVE0) generations all the way back to the Riva TNT (NV04/NV05) with what driver capabilities are implemented.
Across the board from the TNT through Fermi/Kepler, most 2D acceleration support is in place except for proper video decoding. On the 3D side, the oldest NVIDIA hardware (GeForce 3/4) and prior that's fixed-function uses a classic Mesa DRI driver rather than a Gallium3D implementation like the newer generations so the OpenGL support for the oldest hardware is in a rotting state within the Nouveau driver. However, for around the GeForce 6 series and newer, there is a decent level of OpenGL 2.1+ support in place. Nouveau's mode-setting and other display functionality continues to be implemented via KMS-only with all user-space mode-setting support having been abandoned by the project long before it was even deemed stable; the xf86-video-nouveau DDX still has not seen an official release. Functionality like dual-head and TV-Out is mostly working along with suspend-and-resume.