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

  • Kakao - Wednesday, August 26, 2009 - link

    Ryan, nowadays you don't need to dual boot. You can just set up a virtual machine. If you are a gamer use Windows as host and setup a Linux distro as guest. If you have enough memory, 4GB is very good, you can have both perfectly usable at the same time. I'm using Virtual Box and it works great.
  • VaultDweller - Wednesday, August 26, 2009 - link

    "Manufacturer: Canon"

    I think you mean Canonical.
  • Ryan Smith - Wednesday, August 26, 2009 - link

    It wasn't in our DB when I wrote the article, it was supposed to be added before it went live. Whoops.

    Thanks you.
  • Proteusza - Wednesday, August 26, 2009 - link

    I havent been able to read the whole cos I'm currently at work, but so far it seems good. Some people have been saying you should be testing 9.04, and I can see their point, but on the other hand, I agree that since 8.04 is the latest LTS release, it should be pretty stable still.

    Nonetheless, perhaps you could compare a later non LTS release to a service pack for Windows? I mean, there is some new functionality and some fixes. Granted, new versions of Ubuntu contain a lot more few features than Windows service packs.

    I agree that the 6 month release cycle is too fast. I dont develop for Ubuntu myself, but I imagine a lot of time will be wasted on preparing for release twice a year. I mean, theres a lot of testing, bugfixing and documentation to be done, and I would think if you would only did that once a year, you would have more time for development. Although, I guess the more changes you do in a release the more you should test, so maybe thats invalid.

    I've also never really liked the Linux filesystem and package manager idea. Granted, package managers especially have improved a lot lately, and personally I think we have Ubuntu to thank for that, with its huge focus on usability, which historically Linux hasnt cared at all about.

    I also dont like over reliance on the terminal/CLI. I dont like that there are certain things that can only be done with it. Its easier and faster for me to do things with a GUI, because we are visual creatures and a GUI is a much better way of displaying information than just plain text. I think until a lot of the Linux developers get over the idea that the CLI is "the only way to go", the GUI will be underdeveloped. As I said, its only recently that some Linux developers have actually bothered to try to get the various desktop managers up to scratch.

    The other thing I find interesting about Ubuntu, is the nerd rage that some Debian developers exhibit towards Ubuntu.

    Anyway... when 9.10 comes out, I would love to see your impressions of the difference.
  • R3MF - Wednesday, August 26, 2009 - link

    i thoroughly approve of AT running linux articles..........

    however i didn't bother to read this one as anything from Q2 2008 is of zero interest to me now.

    may i suggest a group-test to be published around Xmas of the following Q4 2009 distro releases:
    Ubuntu 9.04
    opensuse 11.2
    fedora 12 (?)
    Mandiva 2010

    that would be awesome AND relevant to your readers.
  • CityZen - Wednesday, August 26, 2009 - link

    I was one of those waiting for this article. I do remember getting excited when it was promised back in ... (can't recall the year, sorry, it's been too long :) ). Anyway, the wait seems to have been worth it. Excellent article.
    A suggestion for part 2: install LinuxMint 7 (apart from Ubuntu 9.04) and see which of the problems you found in part 1 with Ubuntu 8.04 are solved in LinuxMint "out of the box"
  • captainentropy - Tuesday, September 1, 2009 - link

    I totally agree! To hell with Ubuntu, Mint7 is the best linux distro by far. Before I settled on Mint I tried Ubuntu, Kubuntu, PCLinuxOS (my previous fave), Mepis, Scientific, openSUSE, Fedora, Slackware, CentOS, Mandriva, and RedHat. None could come close to the complete awesomeness, beauty, out-of-the-box completeness, and ease of use as Mint7.

    I'm a scientist and I'm using it for sequence and image analysis, so far.
  • haplo602 - Wednesday, August 26, 2009 - link

    so I got to page before installation and I have so many comments I cannot read further :-)

    I am using linux on and off as my main desktop system since redhat 6.0 (that's kernel 2.2 iirc) so some 10 years. my job is a unix admin. so I am obviously biased :-)

    1. virtual desktops - while this heavily depends on your workflow, it helps organise non-conflicting windows to not occupy the same space. I used to have one for IM/email, one with just web browser, one with my IDE and work stuff and one for GIMP and Blender. while this is my preference, it helps to kill the notification hell that is Windows. I hate how Windows steals focus from whatever I am working on just because some unimportant IM event just occured.

    2. package manager and filesystem. given my background, the linux FHS is my 2nd nature. however you failed to grasp the importance of the package manager here. it effectively hides the FHS from you so you do not need to clean up manualy after uninstall. all directories you should ever go into manualy are /etc, your home dir, the system mount directory and whatever the log directory is. If you need to acccess other directories manualy, then you are either a system developer, a programmer or too curious :-)

    also you can usualy one-click install .deb packages and they appear in the package manager as usual. just you have to manage dependencies manualy in that case. repositories are nice as you need to set them up ONCE and then all your updates/future versions are taken care of.

    3. missing executable icons - this has a lot more background to it but it is a mistake to use nautilus in the default icon mode. you basicaly cannot live withour ownership/permissions displayed on a unix system. trying to hide this in any way in a GUI is a capital mistake. that's why a windows explorer like file manager is not usable under linux. good old MC :-) anyway an executable file can be anything from a shell script to a binary file. you just have to have the correct launcher registered in the system and you can open anything. basicaly same as windows just not that much gui friendly.

    4. NVIDIA/ATI drivers - this is a story in itself. use NVIDIA if you want easy of use. use ATI if you want to learn about kernel and X :-) dig through phoronix.com for more info.

    ok I will post more comments as I read further :-)
  • haplo602 - Wednesday, August 26, 2009 - link

    so I read the whole article. I would have some more comments :-)

    1. installation - for me this was never a problem on any linux distro I was using. my partition scheme does not change much and it is usualy the trickiest part of the whole installation process. try out the full gentoo 3 stage installation if you want some fun (ok it is not avaiable via normal means anymore).

    2. fonts - as you mentioned with codecs, there are software restrictions and licensing policies governing linux distributions. ms fonts are licensed under different terms than GPL software. yes even FOTNS have licenses. so they are generaly not included in linux distributions by default.

    What I missed from the article is the amount of customisation you can do with a typical linux distro. just ubuntu has 3 main variants and you can mix and match them at will. you can even have all 3 installed and switch between the window managers by user preference.

    Since you did not like the package manager anyway, you missed on the main Linux strength - application variability.

    From a common user perspective however, the article is quite correct. I would expect more from a seasoned windows user and AT editor.
  • n0nsense - Wednesday, August 26, 2009 - link

    Ubuntu 8.04 is 14 months old creature.
    2 versions released after it and the third one should arrive in October.
    In terms of Windows it's short time, but for Linux it's a lot of time.
    I suggest your next review should be done on Ubuntu 9.10 instead of 9.04 (which IMHO is better than 8.04 but still lacks some polish).

    As mentioned before, the advantage of CLI instructions is that it will work on any Desktop Environment (Gnome, KDE, XFCE etc.) if it's not related to the DE itself. Moreover it will work on different versions (older/newer).
    For example in Vista/7 i couldn't find Network Connections in GUI.
    But who can stop me to type "Network Connections" in Explorer's address bar ? Sometimes GUI changed and even if only a little, most people will fail to follow screen shots. not to mention that most desktops are so customized (on real geek's computers) that it looks too different. I'm not talking about icons or desktop background. I'm talking about panels (if any at all), docks, menus, context menus etc. in Linux almost everything can be changed. And old-school geeks that had their Linux installations for years do this things so each DE is probably unique. (I have Gnome and apps settings/tweaks for over 7 years. Some of them probably never changed). The trick is that even when you reinstall the system, your personal setting may stay with you. (I jumped form Debian to Ubuntu to Gentto back to Ubuntu to Ubuntu x86_64 and finally to Gentoo x86_64). After all this, i have not lost any user customization/setting. On the system level it's harder since Debian and Gentoo are very different. All this gives you motivation to change and to tweak to make it better. Windows users are not really can customize and when they do, it's only valid until they have to reinstall/upgrade their OS. Since most of the Windows users I know reinstall at least once a year, after few cycles they will stay with defaults for both OS and applications.

    Switch to Linux is not the easiest thing. It's usually not "love from first sight" story. But if somehow you stayed around and get to know it, you can't be separated after :)
    Even on Windows 7 i feel handicapped in terms of usability and effectiveness/productivity. (I spend more time in front of Windows then Linux computers)

Log in

Don't have an account? Sign up now