Why the open source driver release from NVIDIA is so important for Linux?

Background
Today NVIDIA announced that they are releasing an open source kernel driver for their GPUs, so I want to share with you some background information and how I think this will impact Linux graphics and compute going forward.

One thing many people are not aware of is that Red Hat is the only Linux OS company who has a strong presence in the Linux compute and graphics engineering space. There are of course a lot of other people working in the space too, like engineers working for Intel, AMD and NVIDIA or people working for consultancy companies like Collabora or individual community members, but Red Hat as an OS integration company has been very active on trying to ensure we have a maintainable and shared upstream open source stack. This engineering presence is also what has allowed us to move important technologies forward, like getting hiDPI support for Linux some years ago, or working with NVIDIA to get glvnd implemented to remove a pain point for our users since the original OpenGL design only allowed for one OpenGl implementation to be installed at a time. We see ourselves as the open source community’s partner here, fighting to keep the linux graphics stack coherent and maintainable and as a partner for the hardware OEMs to work with when they need help pushing major new initiatives around GPUs for Linux forward. And as the only linux vendor with a significant engineering footprint in GPUs we have been working closely with NVIDIA. People like Kevin Martin, the manager for our GPU technologies team, Ben Skeggs the maintainer of Nouveau and Dave Airlie, the upstream kernel maintainer for the graphics subsystem, Nouveau contributor Karol Herbst and our accelerator lead Tom Rix have all taken part in meetings, code reviews and discussions with NVIDIA. So let me talk a little about what this release means (and also what it doesn’t mean) and what we hope to see come out of this long term.

First of all, what is in this new driver?
What has been released is an out of tree source code kernel driver which has been tested to support CUDA usecases on datacenter GPUs. There is code in there to support display, but it is not complete or fully tested yet. Also this is only the kernel part, a big part of a modern graphics driver are to be found in the firmware and userspace components and those are still closed source. But it does mean we have a NVIDIA kernel driver now that will start being able to consume the GPL-only APIs in the linux kernel, although this initial release doesn’t consume any APIs the old driver wasn’t already using. The driver also only supports NVIDIA Turing chip GPUs and newer, which means it is not targeting GPUs from before 2018. So for the average Linux desktop user, while this is a great first step and hopefully a sign of what is to come, it is not something you are going to start using tomorrow.

What does it mean for the NVidia binary driver?
Not too much immediately. This binary kernel driver will continue to be needed for older pre-Turing NVIDIA GPUs and until the open source kernel module is full tested and extended for display usecases you are likely to continue using it for your system even if you are on Turing or newer. Also as mentioned above regarding firmware and userspace bits and the binary driver is going to continue to be around even once the open source kernel driver is fully capable.

What does it mean for Nouveau?
Let me start with the obvious, this is actually great news for the Nouveau community and the Nouveau driver and NVIDIA has done a great favour to the open source graphics community with this release. And for those unfamiliar with Nouveau, Nouveau is the in-kernel graphics driver for NVIDIA GPUs today which was originally developed as a reverse engineered driver, but which over recent years actually have had active support from NVIDIA. It is fully functional, but is severely hampered by not having had the ability to for instance re-clock the NVIDIA card, meaning that it can’t give you full performance like the binary driver can. This was something we were working with NVIDIA trying to remedy, but this new release provides us with a better path forward. So what does this new driver mean for Nouveau? Less initially, but a lot in the long run. To give a little background first. The linux kernel does not allow multiple drivers for the same hardware, so in order for a new NVIDIA kernel driver to go in the current one will have to go out or at least be limited to a different set of hardware. The current one is Nouveau. And just like the binary driver a big chunk of Nouveau is not in the kernel, but are the userspace pieces found in Mesa and the Nouveau specific firmware that NVIDIA currently kindly makes available. So regardless of the long term effort to create a new open source in-tree kernel driver based on this new open source driver for NVIDIA hardware, Nouveau will very likely be staying around to support pre-turing hardware just like the NVIDIA binary kernel driver will.

The plan we are working towards from our side, but which is likely to take a few years to come to full fruition, is to come up with a way for the NVIDIA binary driver and Mesa to share a kernel driver. The details of how we will do that is something we are still working on and discussing with our friends at NVIDIA to address both the needs of the NVIDIA userspace and the needs of the Mesa userspace. Along with that evolution we hope to work with NVIDIA engineers to refactor the userspace bits of Mesa that are now targeting just Nouveau to be able to interact with this new kernel driver and also work so that the binary driver and Nouveau can share the same firmware. This has clear advantages for both the open source community and the NVIDIA. For the open source community it means that we will now have a kernel driver and firmware that allows things like changing the clocking of the GPU to provide the kind of performance people expect from the NVIDIA graphics card and it means that we will have an open source driver that will have access to the firmware and kernel updates from day one for new generations of NVIDIA hardware. For the ‘binary’ driver, and I put that in ” signs because it will now be less binary :), it means as stated above that it can start taking advantage of the GPL-only APIs in the kernel, distros can ship it and enable secure boot, and it gets an open source consumer of its kernel driver allowing it to go upstream.
If this new shared kernel driver will be known as Nouveau or something completely different is still an open question, and of course it happening at all depends on if we and the rest of the open source community and NVIDIA are able to find a path together to make it happen, but so far everyone seems to be of good will.

What does this release mean for linux distributions like Fedora and RHEL?

Over time it provides a pathway to radically simplify supporting NVIDIA hardware due to the opportunities discussed elsewhere in this document. Long term we will hope be able to get a better user experience with NVIDIA hardware in terms out of box functionality. Which means day 1 support for new chipsets, a high performance open source Mesa driver for NVIDIA and it will allow us to sign the NVIDIA driver alongside the rest of the kernel to enable things like secureboot support. Since this first release is targeting compute one can expect that these options will first be available for compute users and then graphics at a later time.

What are the next steps
Well there is a lot of work to do here. NVIDIA need to continue the effort to make this new driver feature complete for both Compute and Graphics Display usecases, we’d like to work together to come up with a plan for what the future unified kernel driver can look like and a model around it that works for both the community and NVIDIA, we need to add things like a Mesa Vulkan driver. We at Red Hat will be playing an active part in this work as the only Linux vendor with the capacity to do so and we will also work to ensure that the wider open source community has a chance to participate fully like we do for all open source efforts we are part of.

If you want to hear more about this I did talk with Chris Fisher and Linux Action News about this topic. Note: I did state some timelines in that interview which I didn’t make clear was my guesstimates and not in any form official NVIDIA timelines, so apologize for the confusion.

16 thoughts on “Why the open source driver release from NVIDIA is so important for Linux?

  1. Well that’s a massive forward towards enhancing the graphics performance of Linux based systems, I still think am NVIDIA based GPU running on Linux os will be important for the ecosystem

  2. >no pascal

    Never touching anything that this company makes ever again

    • > no pascal
      > Pascal is one of the most popular architectures according to steam survey
      :thinking:

    • Pascal is old and anybody doing anything serious with graphics or compute is likely either already using something newer or just about to upgrade anyways.

      Also I expect nvidias plan here to be: let noveau handle the older/legacy products.

      Which isn’t actually THAT different from AMD, they never really open sourced their proprietary drivers either, they did however give some documentation under NDA to the mesa developers and then started making some contributions, in particular to support their new incoming hw releases ahead of time. And it was all a long road for them too.

      Companies aren’t saints, nvidia isn’t alone in this. AMD and intel aren’t really all that different either, nvidia has just been more successful(so long as you ignore it’s predecessor SGI).

      • Mesa supports AMD’s gpus even from 22 years ago. Nvidia can’t even bother with _the most popular gpu_ right now (gtx 1060)

        • Let’s be real. Until all of this comes to fruition, all your Pascals and mine will be dead anyway.

  3. Will nouveau be able to use reclocking firmware on older GPU’s or will nouveau still be gimped on older GPU’s?

    • From what I read on github, there is nothing there for gpus older than 20xx series. I mean, there might be general improvements cause by better understanding of nvidia’s stack but so far it seems stuff we really want in nouveau is only for the newer cards.

  4. Great article, but it would be easier to read with more paragraphs breaks.

  5. Redhat has done an outstanding job in the graphics space for many years. I welcome Nvidia’s code drop and as you mentioned there’s a lot of work before this is usable to normal consumers.
    Ideally you want Nvidia employees to work with kernel maintainers directly. This is important to discuss things like firmware interaction. Many other companies have had issues where their code was rejected and for good reasons. I am concerned that if Nvidia is not taking the same approach as Intel and AMD then this code will no be as useful to Nvidia consumers.
    One thing is for sure is Redhat the best chance Nvidia has if they are not willing to do the work like Intel and AMD. I really hope Redhat will be able to modify firmware and have that signed by Nvidia so that the crypto hardware on the cards will accept the modifications. Time will tell.
    I’ll be standing on the sidelines rooting for open source development.

  6. Hopefully next year I can buy a high end Nvidia laptop, with Nvidia CPU and GPU, that just run Linux and I will not need any other OS. I do like Nvidia SDK too, especially Nvfortran. The number of people that write computer code means that hardware manufacturers must expand their capabilities to increase marketshare. Older closed OS types that perform well as glorified typewriters will hopefully cease to exist..especially when not supporting MPI and GPU computing.

  7. I need some clarification on this: are we gonna need the signed firmwares from Nvidia for the pre-Turing cards still? Is Nvidia going to provide em if that’s the case?

    (I own a Kepler card so it doesn’t really need a signed firmware for reclocking stuff but I am still curious.)

    I have some hope for this news bringing much needed momentum for Nouveau, and that eventually it can be used instead of the legacy proprietary drivers.

Comments are closed.