Free Graphics Drivers
Initiative Leader: Tiyuk Quellmalz
The Issue Summary
Today, 3d acceleration hardware is widely available. If you have ever logged into Second Life or OSgrid, chances are that you have a reasonably modern 3d graphics card of some kind. The problem is that, just like the programs we run, hardware can also be free/open or proprietary.
There are three parts to obtaining complete 3D Graphics hardware freedom:
- Hardware chip documentation allows us to understand, at an abstract level, how a chip is designed, and what features are available from that chip at a low level. Understanding and having control of our computers, from the highest-level software all the way down to the hardware, is essential for complete software freedom, so hardware documentation is important.
- Software device drivers. Software device drivers run on your CPU, but they control the GPU (Graphics Processing Unit; the main processor of your 3d graphics card) or other parts of your 3d graphics card. Think of the device drivers as a way for your CPU (and programs running on your CPU) to tell your 3d graphics card what to do. Being able to improve upon, fix bugs in, and understand software device drivers is very important to enriching the knowledge and self-sufficiency of free software users.
- Firmware. Firmware is software, but instead of running on the CPU, it runs inside the GPU. Normally, firmware is sent to the GPU when it boots up, by the CPU. The firmware is something that changes infrequently, but it needs to be easily update-able just in case there is a bug. Firmware does not provide a lot of very interesting functionality, because the device drivers are far more complex and more likely to change over time. However, firmware can still provide an entry for proprietary software to do nasty things, and we will want to eventually control and be able to modify firmware, too.
Status of each part
Hardware chip documentation
Chip documentation is in a pretty good state today, for Intel and ATI graphics chipsets. These vendors release documentation, without restriction, to the general public. It is my opinion that Intel does a more thorough job of this than ATI; ATI currently keeps secret a certain chip on some graphics cards, called the UVD, which does video decoding in hardware. Without access to the UVD, free software graphics developers have to implement video decoding either on the CPU (slow), or in the GPU's shader cores, which is less efficient than using the UVD. However, ATI is making significant progress every year on opening up more documentation, so we will see if UVD is someday opened up.
Nvidia graphics cards, and those by other less well-known vendors (SiS, VIA, Matrox, etc) is less than stellar. The only existing Nvidia documentation is generated by the community doing reverse-engineering, not provided by Nvidia. Basically, Nvidia does not think they need to play by the same rules as ATI and Intel: they do not care about or value software freedom, nor do they respect the wishes of their customers who do value freedom.
Software Device Drivers
The primary project involved in implementing free software graphics drivers is , which is very closely related to the broader X.Org development community. Although everyone uses X.Org, even those with proprietary graphics drivers, you can also opt to use Mesa for 3D acceleration, rather than a proprietary driver. Below is an overview of the most popular Mesa drivers and their status as it stands today.
- Unless specified, all of these drivers only run on the Linux kernel. Furthermore, you need to be running a very recent Linux kernel to use a driver from this list. The free graphics drivers are evolving very, very fast: I can not recommend for you to use older distributions or kernels, because your hardware will run significantly slower, and have significantly fewer features, than it could have using the latest stack! At a very minimum, to get the most out of your 3d graphics, you should run the latest stable Ubuntu, Fedora, or OpenSUSE. Do not run Slackware, CentOS or Debian Stable: these are updated so infrequently that the graphics drivers available there are ancient. Yes, ancient. Crusty, old, unsupported, and unable to run most interesting 3D programs.
- Mesa was started in the late 90s as an add-on "hack" to provide 3d acceleration on top of X11 servers.
- In about 2006-2007, work began on moving some parts of 3d acceleration from the 2D X.Org drivers into the Linux kernel: mode-setting moved from UMS (User-Mode Setting) to KMS (Kernel-Mode Setting). That means that there is now kernel code that manages the resolution of your monitors and so on. Along with KMS was GEM (Graphics Execution Manager) and TTM (Translation Table Maps), which are two alternative ways of providing buffer management across the entire graphics pipeline, both 2D and 3D. Buffer management used to be a hack that was carried out in user-space, which led to many bugs. The status of KMS, GEM and TTM is that they are mostly feature-complete for current hardware, and have been implemented in the stable Linux kernel in a usable state since about 2.6.32 (or a bit earlier but with some bugs).
- Along with KMS, GEM and TTM was DRI2, a new protocol for interaction between the user-mode acceleration code and the kernel. This protocol is more lightweight, and better tuned for interaction with GEM/TTM. DRI2, like the others, is mostly completed now, and ready for normal use.
- KMS, GEM, TTM and DRI2 have together ushered in a new era of free software graphics drivers. Performance, maintainability, and OpenGL features are rapidly progressing ever since these components have stabilized. Since these components only stabilized around 2009 - 2010, any older distros will probably not use one or more of these components, and so the graphics drivers there will be in a very hack-ish state (e.g. using UMS with GEM, etc.) The only way to get a full-featured, well-working graphics driver today is to use a driver that supports KMS, either GEM or TTM, and DRI2.
- On the user-space side, even the OpenGL driver architecture changed since 2007-2008. We have classic mesa and Gallium3d. Classic mesa is basically how it was in the 90s, and it has been retrofitted to work with KMS/GEM/DRI2. But it is still a bad architecture, and difficult to maintain. Gallium3d is an attempt to unify the architecture, and share lots of code between different pieces of hardware. To sum up the advantage of Gallium3d: it makes less work for graphics driver developers to bring up support for a new 3D graphics card. But once support is already in-place, a classic Mesa driver can still do as well as a Gallium3d driver, as long as it supports KMS, GEM, and DRI2. (Note: OpenGL is a standard programming interface that applications, such as Imprudence and other 3D games, use to interface with your 3D hardware.)
1. Classic Mesa Drivers
- For Intel hardware: i915 and i965. These drivers are mature, and support OpenGL 2.1, video decoding, and compiz 3d desktop effects. The performance is acceptable for using the Imprudence viewer for connecting to grids. Individual performance will depend on how recent your Intel graphics chip is. Most features of your 3d hardware are implemented in the driver, and stable. Intel makes quarterly releases (4 releases a year) of the 3d driver stack; these are considered stable and well-tested.
- For ATI hardware: r300, r500, and r600: The support level of these drivers corresponds roughly with the graphics core present in your ATI graphics card. The r300 generation is 5 or more years old; an example r300 card is the ATI Radeon X1850XT. The r500 generation is about 4 years old, an example is the Radeon HD2870. The r600 driver supports the four most-recent generations: r600, r700, r800, and r900. Examples include the Radeon HD3850, HD4870, HD5870, and HD6970. The relative stability of these drivers increases the older the hardware is. The custom essay older the hardware, the more time we've had to develop and improve the drivers. So for the brand-new hardware, you may experience crashes or performance issues until the drivers are considered feature-complete. Please note that the "classic mesa" drivers for Radeon cards are less preferred; the "Gallium3D" drivers work better, are newer, and are more actively maintained. However, if you have problems with a Gallium3d driver, the classic mesa drivers are supposed to work reasonably well.
2. Gallium3D Mesa Drivers
- For Intel hardware: i915g and i965g. This was a side project of a VMware employee while Gallium3d was in early development. It is not recommended for end-user usage. Intel officially supports the classic mesa drivers instead, so please use those. Several Intel employees, Red Hat employees, and community members help develop these drivers.
- For ATI hardware: r300g and r600g. Currently, active development is underway to improve the performance and features of these drivers. I highly recommend that you try r300g or r600g if you have an ATI Radeon X800 (r300) or later: all the way up to and including the very latest HD6970. These drivers, generally, work very well. ATI employees and community members (primarily Red Hat employees) work very hard to develop these drivers.
- For Nvidia hardware: nouveau. Nouveau supports a wide range of Nvidia hardware. Unfortunately, there is zero participation from Nvidia employees on nouveau. Nouveau is a Gallium3d driver, even though there is no "g" in the name. Nouveau has been reverse-engineered by community members, who look at how the proprietary driver works, and attempt to mimic the functionality. Since there is no open documentation, the Nouveau project also aims to develop such documentation independently of Nvidia (take that, Nvidia!) For the best support, use a GeForce 8000 or 9000 series card. Support for recent "Fermi" cards is still in the experimental stage as of February 2011.
Open firmware for 3d Graphics cards is largely an unsolved problem. Almost all 3d graphics cards today require a "binary" (closed source) firmware developed by the hardware manufacturer. This is also true for Intel and ATI cards. However, using software device drivers that are free/open source makes us more free than if we didn't use them, so we should do that until we can replace the firmware with free software firmware.
Please edit this page and report your successes and failures with running the Imprudence or Kokua viewer (or other metaverse viewers) using free software graphics drivers.
- ATI Radeon HD5970: Runs extremely well on Imprudence Experimental 1.4.0 (2010.11.13) with the r600g on Linux 2.6.38 kernel. Ubuntu 10.10
If you need help installing or configuring your 3D graphics drivers, please contact Tiyuk Quellmalz. Provide the following information:
- Your graphics card make and model (e.g. Nvidia GeForce 8800GT)
- Your distribution and version (e.g. Ubuntu 10.10 64-bit)
- Your general level of experience with compiling things from source (e.g. newbie, intermediate, expert)
Proprietary Drivers Disadvantages
Several proprietary drivers are available for some graphics cards:
- For ATI, the ATI Catalyst Linux driver (codename fglrx) is available for GNU/Linux. The performance and features are very good, but it is proprietary! We can do better than that, and we have. Try r300g or r600g from Mesa, and I promise you will not be disappointed.
- For Nvidia, the Nvidia binary Linux drivers are available for GNU/Linux. The performance is very good, but some features are lacking.
Although performance is good for the proprietary drivers, the disadvantages are as follows:
- We can not use proprietary drivers with the latest versions of X.Org Server, or the latest Linux kernels. The ABI/API of these projects changes frequently, and the binary drivers can not keep up. Each time the ABI/API changes, the binary drivers have to release a new version (usually, it takes weeks) to support it.
- If a proprietary driver breaks, we can't look at its source code to figure out what went wrong. Even if we know why it breaks, we can't fix it.
- We can't improve proprietary drivers if we want to support new technologies or features. Even if we have a great idea for making our drivers faster or more featureful, we can't implement it!
- We can't understand our hardware, or how it is being used. The drivers can be used as a form of control over us, and they can implement anti-features such as DRM, that we have no power to circumvent or bypass. This is also bad because it has a chilling effect on education and general awareness of the technical aspects of 3D hardware, meaning that each progressive generation of software/hardware engineers will know less about 3D graphics than the generation before (a "Brain Drain").
- The company supporting the graphics driver can decide to stop supporting old hardware any time they want. When they make this decision, it essentially means that someone using old hardware can no longer run the latest GNU/Linux distributions, because the old drivers that support their hardware will not run on a new kernel. So their previously well-working hardware is now a useless brick, without free software drivers.
- And most importantly of all, using proprietary drivers means that we can ignore the fact that they are not free, and this moves the topic of discussion away from freedom. 4Freedom is about freedom, so unless we value it and insist upon it, eventually non-free aspects of software and society will creep in until they have completely taken over. We must reject this and insist upon freedom.
Support for Non-Linux Free Software Operating Systems
To be written by someone who cares about, e.g. BSD, Hurd, Haiku, or XNU!