logo

drewdevault.com

[mirror] blog and personal website of Drew DeVault git clone https://hacktivis.me/git/mirror/drewdevault.com.git

Fuck-you-nvidia.md (3631B)


  1. ---
  2. date: 2017-10-26
  3. layout: post
  4. title: Nvidia sucks and I'm sick of it
  5. tags: [nvidia, wayland]
  6. ---
  7. There's something I need to make clear about Nvidia. Sway 1.0, which is the
  8. release after next, is *not* going to support the Nvidia proprietary driver,
  9. EGLStreams, or any other proprietary graphics APIs. The only supported driver
  10. for Nvidia cards will be the open source nouveau driver. I will explain why.
  11. Today, Sway is able to run on the Nvidia proprietary driver. This is not and has
  12. never been an officially supported feature - we've added a few things to try and
  13. make it easier but my stance has *always* been that Nvidia users are on their
  14. own for support. In fact, Nvidia support was added to Sway without my approval.
  15. It comes from a library we depend on called wlc - had I'd made the decision on
  16. whether or not to support EGLStreams in wlc, I would have said no.
  17. Right now, we're working very hard on replacing wlc, for reasons unrelated to
  18. Nvidia. Our new library, wlroots, is better in every conceivable way for Sway's
  19. needs. The Nvidia proprietary driver support is not coming along for the ride,
  20. and here's why.
  21. So far, I've been speaking in terms of *Sway* supporting Nvidia, but this is
  22. an ass-backwards way of thinking. *Nvidia* needs to support Sway. There are
  23. Linux kernel APIs that we (and other Wayland compositors) use to get the job
  24. done. Among these are KMS, DRM, and GBM - respectively Kernel Mode Setting,
  25. Direct Rendering Manager, and Generic Buffer Management. Every GPU vendor
  26. but Nvidia supports these APIs. Intel and AMD support them with mainlined[^1],
  27. open source drivers. For AMD this was notably done by replacing their
  28. proprietary driver with a new, open source one, which has been developed in
  29. cooperation with the Linux community. As for Intel, they've always been friendly
  30. to Linux.
  31. Nvidia, on the other hand, have been fucking assholes and have treated Linux
  32. like utter shit for our entire relationship. About a year ago they announced
  33. "Wayland support" for their proprietary driver. This included KMS and DRM
  34. support (years late, I might add), but *not* GBM support. They shipped something
  35. called EGLStreams instead, a concept that had been discussed and shot down by
  36. the Linux graphics development community before. They did this because it makes
  37. it easier for them to keep their driver proprietary without having work with
  38. Linux developers on it. Without GBM, Nvidia *does not* support Wayland, and they
  39. were real pricks for making some announcement like they actually did.
  40. When people complain to me about the lack of Nvidia support in Sway, I get
  41. really pissed off. It is *not my fucking problem* to support Nvidia, it's
  42. Nvidia's fucking problem to support me. Even Broadcom, *fucking Broadcom*,
  43. supports the appropriate kernel APIs. And proprietary driver users have the gall
  44. to *reward* Nvidia for their behavior by giving them *hundreds of dollars* for
  45. their GPUs, then come to *me* and ask me to deal with their bullshit *for free*.
  46. Well, fuck you, too. Nvidia users are shitty consumers and I don't even want
  47. them in my userbase. Choose hardware that supports your software, not the other
  48. way around.
  49. Buy AMD. Nvidia-- fuck you!
  50. **Edit**: It's worth noting that Nvidia is evidently attempting to find a better
  51. path with [this new GitHub project](https://github.com/cubanismo/allocator). I
  52. hope it works out, but they aren't really cooperating much with anyone to build
  53. it - particularly nouveau. It's more throwing code/blobs over the wall and
  54. expecting everyone to change for them.
  55. [^1]: Mainlined means that they are included in the upstream Linux kernel source code.