A Word on Drivers and Compatibility

As we mentioned earlier, Ubuntu and the Linux kernel are open source projects, particularly under the GPL license. In large part due to the philosophies of the GPL, compared to Mac OS X and Windows, Linux handles drivers in a notably different fashion.

In a nutshell, the developers of the Linux kernel believe in the open source movement and wish for all related software to be open source. Furthermore they do not like the implications of attaching a closed source “binary blob” driver to the Linux kernel, because if something goes wrong it can be impossible to debug the issue if it occurs in the driver for which they do not have the code for. As such they have moral and technical objections to the Linux kernel supporting external drivers and actively prevent the creation of such drivers. This is done through mechanisms such as not having a fixed API for external drivers, and by not artificially keeping themselves from making changes to the kernel that would break external drivers. Drivers that they do have the code for can usually just be recompiled against the new kernel and are unaffected as a result. The result is that “binary blob” drivers are systematically opposed.

For the most part, this works fine. Not all hardware is supported under Linux because not everyone is willing to share the specifications and data needed to make a driver, but more than enough device manufacturers are willing to share such data that Linux generally supports non-esoteric hardware quite well. There is one class of notable hold-outs here however, and that’s the GPU manufacturers, namely ATI and NVIDIA.

Compared to other drivers, GPU drivers are different for two reasons. First is the sheer complexity of the drivers - besides interfacing with the hardware, the drivers are responsible for memory management, compiling/optimizing shader code, and providing a great deal of feedback. This in essence makes GPU drivers their own little operating system – one that its developers aren’t necessarily willing to share. The second significant difference here is because of the above, GPU drivers are among the only drivers that have a compelling reason to be updated regularly; they need to be updated to better support newer games and fix bugs in the complex code that runs through them.

Complicating matters further is that some intellectual property in GPUs and drivers is not the property of the company who makes the GPU. AMD doesn’t own everything in their Universal Video Decoder, and just about everyone has some SGI IP in their drivers. In the interest of protecting that IP, it is difficult to release the code for those drivers containing other companies’ IP.

Because of all of this, manufacturer-supplied GPU drivers are not always open source. Intel and S3 do well in this respect (largely because they have few tricks to hide, I suspect), but hyper-competitive NVIDIA and AMD do not. AMD has been looking to rectify this, and back in 2007 we discussed their starting work on a new open source driver. Development has been progressing slowly, and for the R6xx and R7xx hardware, the open source driver is not yet complete. Meanwhile NVIDIA has shown no real interest in an open source driver for their current hardware.

So if you want to use a modern, high-performance video card with Linux, you have little choice but to also deal with a binary blob driver for that card, and this becomes problematic since as we mentioned Linux is designed to discourage such a thing. Both AMD and NVIDIA have found ways around this, but the cost is that installing a binary driver is neither easy, or bug free.

The fundamental method that both use for accomplishing this is through the use of a kernel shim. Both analyze the headers for the kernel to identify how the kernel is organized, then they compile a shim against that kernel. The shim resolves the issues with the lack of a stable API, and the other end of the shim provides the stable API that NVIDIA and ATI need.

Ubuntu in particular takes this one step further, and in the interest of promoting greater out of the box hardware compatibility, includes a version of the binary drivers with the distribution. This is unusual for a Linux distribution and has earned Ubuntu some flak since it’s not strictly adhering to some open source ideals, but it also means that we were not forced to play with driver installers to get Ubuntu fully working. Ubuntu had no issues with both our AMD 2900XT and NVIDIA 8800GTX cards, both of which were picked specifically because we wished to test Ubuntu on suitably old hardware which would exist in time for Ubuntu to include support for it. With that said, the drivers Ubuntu includes are understandably old (once again owing to the idea of a stable platform) which means we can’t avoid installing drivers if we want better performance and application compatibility.

And this is where “easy” comes to an end. We’ll first start with AMD’s installer, the easier of the two. They have a GUI installer that puts in a driver along with a Linux version of the Catalyst Control Center. It’s Spartan, but it gets the job done.

NVIDIA on the other hand does not have a GUI installer – their installer is a text mode installer that requires shutting down the X server (the GUI) in order to install. It’s difficult to understate just how hard this makes driver installation. Not only is doing all of this completely non-obvious, but it requires interfacing with the CLI in a way we were specifically trying to avoid. It’s something that becomes bearable with experience, but I can’t call it acceptable.

Driver upgrades are an issue on both sides, because the installers are not completely capable of finding and eliminating older versions of the binary drivers. In one instance, for the NVIDIA drivers we had to track down a rather sizable shell script that automatically deleted the old drivers before installing the new ones, as that was deemed the “right” way to install the drivers. We had less of an issue with ATI’s drivers, but to be fair the primary card I used for my time with Ubuntu was the 8800GTX. I can’t confidently say that there are not other issues that I may have not run in to.

The Ubuntu community does supply tools to help with GPU driver installations, Once such tool is EnvyNG, which reduces the driver installation process to selecting what driver you want to install and it does the rest. This is a far easier way to install drivers, in the right situation it’s even easier than it already is under Windows. But it suffers from needing to have the latest driver data hardcoded in to it, which means you can only use it to install drivers it knows about, and nothing newer. It’s not regularly updated (as of this writing the latest driver versions it has are NV 173.14.12 and ATI Catalyst 8.6) so it’s good for installing newer drivers, but not the newest drivers.

The other tool is access to Ubuntu’s Personal Package Archives, which are a collection of user-built binaries that can be installed through the Ubuntu package manager (more on this later). It’s harder to use than EnvyNG, but anyone can build a PPA, which makes updates more likely. As it’s user-generated however, this still means that there won’t always be the latest drivers available, which means we’re still back to using ATI and NVIDIA’s installers.

As it stands, installing new GPU drivers on Ubuntu is between an annoyance and unbearable, depending on how many hoops you need to jump through. It’s certainly not easy.

The other problem with GPU drivers is that they do not always stay working. Among the issues we encountered was ATI’s driver failing to work after installing an Ubuntu update, and an NVIDIA driver that kept rebooting the system during testing for reasons we never determined (once we wiped the system, all was well).

Our final issue with the state of GPU drivers on Ubuntu is their overall quality. With a bit of digging we can come up with issues on both sides of the isle, so it’s not as if either side is clean here. But with that said, we only ended up experiencing issues with ATI’s drivers. We encountered some oddities when moving windows that was eventually fixed in the Catalyst 9.3 drivers. It turns out that the problem was that ATI’s drivers lacked support for redirected OpenGL rendering; Linux guru Phoronix has a great article on what this is, including videos, that explains the importance of this change.

Ultimately we hate to sound like we’re beating a dead horse here, but we can’t ignore the GPU driver situation on Ubuntu (and really, Linux as a whole). The drivers have too many issues, and installing newer drivers to fix those issues is too hard. Things could be worse, Ubuntu could only distribute driver updates with OS updates ala Apple, but they could also be better. For the moment it’s the weakest point for Ubuntu when it comes to installing it on a high-end system.

What’s the Value of Technical Support, Anyhow? The Package Manager – A Love/Hate Relationship
Comments Locked

195 Comments

View All Comments

  • Eeqmcsq - Wednesday, August 26, 2009 - link

    for your time spent on writing this article. I've made the jump to from Windows to Ubuntu (and Xubuntu for my older computers) back around 7.10 and 8.04 and I went through some of the headaches in adjusting to Ubuntu, but I eventually solved all of them and I'm quite settled in now.

    One comment about finding help in the form of command line instructions, rather than GUI instructions. GUI instructions for Ubuntu would not be useful for Kubuntu or Xubuntu, since they use different window managers. The command line solutions usually work for all three.

    Also, boot times were noticeably improved in 9.04. Perhaps you can run a quick retest on it.

    And you CAN install stuff when using the live CD. I've installed a couple of temperature monitoring utilities when I was stress testing my motherboard.

    Finally, thanks again for writing such a thorough look into your Ubuntu experiences. It was a great read in seeing how far Ubuntu has come and what it still lacks.
  • fepple - Thursday, August 27, 2009 - link

    Yeah, you can set the APT sources to use a CD. There is an option for it 'system' > 'administor' > 'software source', or you can edit the /etc/apt/sources.list file
  • clarkn0va - Wednesday, August 26, 2009 - link

    [quote]since SMB is the predominant protocol for consumer file server gear, it’s a fair test of such use.[/quote]

    While this comment is not false, it presents a lazy approach to comparison; it's a one-sided contest, and Linux, pitted against Windows on home turf, doesn't stand much of a chance.

    You as much as acknowledge this in the article, so why not provide some counterpoint? For example, consumer file server gear, even if it supports SMB almost ubiquitously, is usually *nix-based. So instead of just showing Windows and Linux clients interacting with Windows servers, show them interacting with *nix servers as well. Do some NFS transfers as well; NFS is well supported in consumer NAS these days.

    You also really missed the boat on the video drivers. 8.04 was not the first Ubuntu release to include the Restricted Drivers Manager (known simply as "Hardware Drivers" in later releases). This handy app will identify hardware, such as AMD and NVIDIA GPUs, that can take advantage of proprietary drivers, and will offer to to install the same via synaptic (APT) with just a click of the mouse. No CLI, no headaches.

    Still, a thorough review, and generally well-researched. I'm looking forward to the 9.04 follow-up.

    Since you mentioned hardware HD decoding, I recommend taking a look at smplayer from the testing ppa (https://launchpad.net/~rvm/+archive/testing)">https://launchpad.net/~rvm/+archive/testing). Unfortunately vdpau doesn't work with the nvidia blobs in the default Ubuntu repos, but I believe there's a PPA providing vdpau-compatible blobs for anybody not wanting to do CLI installs.

    db
  • VaultDweller - Wednesday, August 26, 2009 - link

    [quote]While this comment is not false, it presents a lazy approach to comparison; it's a one-sided contest, and Linux, pitted against Windows on home turf, doesn't stand much of a chance. [/quote]

    This isn't Linux pitted against Windows on home turf, it's Linux pitted against Windows in the real world.
  • clarkn0va - Wednesday, August 26, 2009 - link

    Well, no doubt SMB is the dominant method of sharing files for consumers in general. Obviously comparing Linux to Windows makes sense in a world where Windows is the incumbent, but it's not the whole story.

    I hope Part 2 will address some of the objective benefits of Ubuntu, and not fall into the trap of "worse because it's not the same as Windows".
  • VaultDweller - Wednesday, August 26, 2009 - link

    I agree in principle, but there has to be a distinction between "Worse because it's not compatible with Windows," "Worse because it's not as easy as Windows," and "Worse because it's not the same as Windows." Die-hard *nix advocates tend to dismiss the first two as if they were the latter, and this tends to undermine their argument.

    Also, in some cases "Worse because it's not the same as Windows" can be a valid point, because the public has been trained to the point that the Windows way is the "intuitive" way. Of course, this isn't truly intuitive, as people who learned Linux first would find Linux methodologies more intuitive - but that's largely a moot point, as that's not the reality we live in today. You could say the same thing about the color red - in the western world, when we see red we can intuitively guess that it means Stop, or Warning, or Error, etc. The fact that this is not an understanding we're born with but rather a socially acquired intuition does not mean it would be any easier to suddenly change the color of traffic lights and expect people to adjust without problems.
  • Ryan Smith - Wednesday, August 26, 2009 - link

    All of the NAS gear I can get my hands on is either SMB only, or is a Time Capsule which is SMB + AFP. I don't have anything that does NFS, which isn't so much a comment on testing (I could always set up another box) as it is usefulness. NFS just isn't common on consumer gear; SMB is a more important metric if you're looking at file transfer performance, because that's what most people are going to be working with. This doesn't preclude doing NFS at a later time though.

    And the Restricted Drivers Manager is limited to the drivers in the Hardy repository, which means they're a year+ out of date.
  • amrs - Wednesday, September 30, 2009 - link

    Interestingly, if one checks the SmallNetBuilder NAS charts, it looks like out of 87 NAS devices, 49 have NFS. 56% in other words. And you say NFS isn't common? Really now? Seems a little biased to me.
  • ekul - Wednesday, August 26, 2009 - link

    While a lot of your issues have complicated solutions or lengthy technical backstories I can solve your complaint of smb shares mounted in nautilus not being useful in non-gtk applications in one simple command (or as you seem to hate commands the gui can do it too).

    theory: make a symlink to the directory nautilus mounts to so it can be easily accessed. Symlinks to directories or files are transparently (to users and applications) identical to the location they refer to. Windows doesn't have symlinks (only useless shortcuts) so it isn't surprising you were not aware to do it.

    howto: gvfs uses the directory /home/$USER/.gvfs as a mount point so link to it:
    ln -s ~/.gvfs ~/linkname

    howto gui: in nautilus go to your home folder then choose view -> show hidden files. Right click on .gvfs and choose make link. Then you can rename the link to whatever you want and hide hidden files again.

    hint: symlinks are your best friend. My home dir is littered with links to places on the filesystem I visit a lot to avoid a lot of clicking/typing
  • Ryan Smith - Wednesday, August 26, 2009 - link

    I suddenly feel very humiliated...

    The symlink is a very elegant solution, I'm embarrassed I didn't think of that myself. It's a bit of a lousy solution in that there even needs to be a solution, but as far as things go that's a very insightful suggestion.

Log in

Don't have an account? Sign up now