From: Drew DeVault <sir@cmpwn.com>
To: graphics-dev@chromium.org
Subject: nouveau blacklisted in Chromium
I'm writing to complain regarding the decision to blacklist nouveau in
Chromium. You're creating a hostile relationship with one of the most
important projects on Linux. If you do anything about this problem, you
should be using your influence to pressure Nvidia into being a better
citizen on Linux. Hell, you could even sponsor the nouveau developers
for a fraction of a fraction of a fraction of a percent of Google's
budget. Instead of doing any of the right things, you chose to become a
bad actor on Linux.
Closing bug reports from nouveau users and directing them to the
freedesktop bug tracker? Fine, you don't need to fix someone else's
bugs. Blacklisting the driver? Not even remotely okay.
I strongly condemn your decision and I expect it to be rolled back as
soon as possible.
--
Drew DeVault
> It's not the browser's place to have any code whatsoever which even so much as glances at the graphics vendor to make meaningful decisions.
I'm curious why you hold this position. I think it makes sense for the browser to attempt to deliver the best experience it can to users, and they may believe they get better performance and behavior from unaccelerated rendering. It's no different from websites looking at user-agent strings to work around known bugs, right? It's okay for a user to override their user-agent string, and fine for browsers to mention other browsers for compatibility, but uncool for a browser to not identify itself at all and steal another browser's user-agent string.
The OpenGL API includes vendor strings for a reason. Chrome isn't doing `strings` on the library or anything.
I get the predicament that caused Chromium to blacklist Nouveau. Nothing against the incredible work done in Nouveau, it's just reality: given a thousand eyes, apparently not all bugs are shallow (see also: Heartbleed and Shellshock). That being said:
>I'm curious why you hold this position.
Agreed. There are countless AAA titles (games) that do vendor checks on the GPU. Game developers are a bunch of people who have been working with GPUs for more than a decade, possibly approaching two decades. For some reason, GPUs are the one thing that the OS HAL isn't able to sort out. Windows (and Mac?) drivers are always proprietary, so different hardware vendors are all Windows developers have to worry about. I can't imagine the headache of dealing with differing hardware vendors (and families), on top of differing driver vendors.
Reality fucking sucks and I guess this is just Chromium acknowledging it. I doubt there's a grand conspiracy here.
I think Chrome is empirically quite user friendly - it's not installed by default anywhere and people choose to use it. It is true that Chrome isn't particularly power-user friendly for certain use cases, but that's different.
Also, if you look at the bug report, it's quite clear they spent a lot of time trying to make nouveau work.
Well, people have always used bad software; popularity has never been a good metric of quality. Nothing about Chrome protects users from Google. This is a fundamental role of the browser.
That may be true but I'm not sure how that is relevant. Why would a browser not protecting users from Google be positively correlated with a browser not wanting to successfully render pages?
There's more to being user friendly than having a dumbed down UI and being technically correct.
Helping corporations spy on users is definitely not user friendly, and Chrome is by far the worst offender there. Saying, "nobody cares," because they're ignorant that it's going on is no excuse, either.
That may all be true but I'm really unsure what that has to do with user-friendliness in the way described. The argument was an attempt to rebut my claim that Chrome is trying to do the best job possible of rendering pages isn't true because Chrome isn't user-friendly. If their goal is to spy on users and have a dumbed-down UI, isn't it all the more important that pages successfully render, so that the sheeple keep using it?
User-friendliness is usually understood as being about usability and interface design. Spyware-riddled software may be shitty, and that should be called out, but it's orthogonal to user-friendliness.
Edit: You seem to disagree. Google "user-friendly" and realize that I'm not defending Chrome.
Just because corporate language doesn’t include any way of expressing representing consumer and user interests outside of what can be represented in a transaction doesn’t mean it isn’t worth expressing.
There's plenty of ways to express it. Call it exploitative, dishonest, money-grubbing, soulless. If you instead call it "non-user-friendly," expect people to be confused, because that's not what "user-friendly" means.
As someone who has used IE (especially 5-9) far too many times because I had to, Chrome could impale my palms with stakes and I'd still probably call it more user friendly.
Note: I edited my comment to simply be a copy of the email I sent to the devs. You quoted the original text.
>I think it makes sense for the browser to attempt to deliver the best experience it can to users, and they may believe they get better performance and behavior from unaccelerated rendering.
So should they also blacklist Windows because it's spying on its users? No, of course not. They should do their best to deliver a good experience in the domains for which they are responsible.
>It's no different from websites looking at user-agent strings to work around known bugs
They don't blacklist Windows because it spies on users, but they absolutely blacklist anything from AV to malware because it causes instability. https://blog.chromium.org/2017/11/reducing-chrome-crashes-ca... This seems like exactly the same thing. They're responsible for delivering a browser that renders webpages successfully. They're doing what needs to be done to make this happen.
> So should they also blacklist Windows because it's spying on its users? No, of course not. They should do their best to deliver a good experience in the domains for which they are responsible.
If a Windows graphics acceleration component spied on its users, Chromium should absolutely blacklist that component, and use software rendering instead.
[Clarification: at the time I was writing this comment, parent referred to the team that closed the bug as sons of bitches]
The language you use is unnecessary. (Don't mean this in the blanket sense -- calling a SOB a SOB is fine -- but in this particular case.)
The Chrome team was receiving bug reports due to driver issues, and now this driver is the default. They can either compromise the experience for some Ubuntu users (with crashes, not slowdowns) or blacklist the driver or fix the driver.
If you don't mind the possibility of your driver crashing, you are free to instruct chrome to ignore the blacklist, something I personally did for some time.
Here's why I used that language (and though I edited the comment, it was not because I rethought the use of the phrase): it is not the Chromium team's place to make this decision, and this decision actively harms the health of the Linux ecosystem. The decision of which driver to use is up to the user and up to the distro, and Chromium has absolutely no right to interfere with that. Nvidia is one of the worst actors on the Linux scene, and overstepping their bounds to prop them up is despicable.
Imagine if Google had blocked Tor users in China in favor of Project Dragonfly instead. The attitude of Chromium in this matter is directly supporting bad actors who actively do harm to their users and to the rest of the world around them. That's why they're sons of bitches.
What you're suggesting is actively harming users to put pressure on NVIDIA to become a better citizen in the Linux ecosystem. I don't find this very ethical, but I don't think this would work anyway. When Chrome crashes, users blame Chrome. But when Chrome runs slower on NVIDIA, users blame NVIDIA.
They aren't "interfering." They are falling back to software rendering when the GPU driver is incapable of supporting valid calls without crashing. If Windows or macOS started shipping buggy/crashing OpenGL drivers and not fixing them, Chromium would be entirely justified to fall back to software rendering there, and it would not be "interfering" with Windows or macOS development to do so.
>If Windows or macOS started shipping buggy/crashing OpenGL drivers and not fixing them, Chromium would be entirely justified to fall back to software rendering there
And they do just that, quite often! Just take a look at the list of drivers/hardware/os/feature combinations that are blacklisted in their file at [1].
Tons of MacOS and Windows things on there (and Android, and Linux!)
I have no idea how you interpret this as propping up Nvidia. They're blacklisting an (unofficial) Nvidia driver because it doesn't work. They're not telling users to use the official non-free ones; they're falling back to software rendering. Users who want acceleration can just buy an Nvidia competitor's card. Isn't that what you want?
They're blacklisting ice cream because they're lactose intolerant. They're not telling users to eat Brussels sprouts, they're falling back to plain bread. Users who want to eat something sweet can just buy some licorice. Isn't that what you want?
While I mostly agree with what your email says, if I received a message that said, "I expect it to be rolled back as soon as possible" and accused me of being "a bad actor on Linux" I would probably be quite put off. You make some good points, but rather than coat them in honey, you soaked them in vinegar. Might get a better result by improving your tone, and maybe giving them credit for at least open sourcing their work and supporting graphics acceleration on at least some cards (firefox doesn't). I also appreciate that they support linux so well, even if not perfectly.
Not by default. GPU acceleration is off by default in Firefox on Linux. Distros may change that in their bundles, but the official builds have it turned off.
My unmodified Firefox stable channel on Linux has WebGL enabled OOTB and my distro does not have any specific flags specified for WebGL (or GL in general) in the package.
> GL layers acceleration is not yet enabled by default (see bug 594876). You can enable it by setting layers.acceleration.force-enabled=true in about:config.
That means off by default. Also maybe relevant is that I'm on the Firefox Graphics team so I have some knowledge of this.
If you want to verify, download a stock Firefox build from Mozilla, run it on a new profile, and check what it says for Compositing in the Graphics section. OpenGL means acceleration, Basic means software.
I get you have an axe[0] to grind with NVIDIA, but is attacking people trying to mitigate around a broken driver really the right direction? By your message, we should also be "pissed off" at you for disabling a driver that "works" in your project too.
The Nvidia driver does not "work" in my project. I have added no code which explicitly blacklists it, and the day Nvidia releases a driver which implements the required APIs it will work with no changes in my code.
> the day Nvidia releases a driver which implements the required APIs it will work with no changes in my code.
How about the day when Nvidia releases a buggy (system-crashing?) implementation of the required APIs? How well will your code work without changes, and which course of action will you take?
I'll not change my code for their sake. I already get enough annoyed Nvidia users who think it's my fault their driver doesn't support GBM, so annoyed Nvidia users who think it's my fault their driver is buggy won't be much different. I'll do what I already tell them: it's Nvidia's problem, report it to them. Of course, if some characteristic of Nvidia's implementation demonstrates previously-unknown bugs in sway (bugs in sway, not in the driver), sway will change to accomodate that.
Your project, your rules - but that attitude doesn't scale well.
Chromium chooses to prioritize users' experience over scoring ideological points. That means attempting to work around known external bugs instead of letting things blow up and sending users to pound sand on some unresponsive third-party mailing list.
I'm not sure how you can fault them for that, especially since pretty much all successful large-scale projects take the same approach -- including the Linux kernel.
The new library which replaces wlc, wlroots, does not have that special code necessary to support the stupid Nvidia special-snowflake API.
In simple terms, sway+wlroots DOES NOT have this line of code:
if (nvidia proprietary driver) {
suck();
}
Rather, it looks like this:
do_important_gpu_stuff(); // Nvidia does not implement this
The Nvidia proprietary driver doesn't support the APIs necessary to run Sway. This is the correct relationship: the driver is responsible for implementing APIs and the software is responsible for consuming them. Nvidia didn't hold up their end of that bargain and thus does not work.
In Chromium, the following line of code DOES exist:
if (nouveau driver) {
suck();
}
Nouveau implements the necessary APIs, but Chromium explicitly blacklists it. Nouveau holds up their end of the bargain here and Chromium does not.
This is not correct. They may have methods that match the required signatures, but the APIs do not do what they are supposed to do. "Crashing my computer" is not a documented feature of any webgl API I'm aware of.
From an API perspective, Nouveau lies (perhaps not intentionally, but in reality) to its consumers. Nouveau isn't holding up any part of the bargain. Having correct method signatures doesn't mean you implement an API if you return wrong results.
Where is this idea that nouveau is crashing coming from?
And don't be ridiculous. All software has bugs, including Chromium. Should I detect Chromium and blacklist it on my sites in preparation for future bugs? Just a few weeks ago I found a Chromium bug when I was working on a website. I did not blacklist the browser, naturally.
This subthread[0] implies that there have been nouveau-caused crashes for webgl since 2015. The linked bug[1] seems pretty cut and dry. Nouveau completely locks the system, Nvidia doesn't.
>All software has bugs
If those bugs crash the system and the software is made the default, and the change is a performance degradation, yes. Degraded WebGL performance is superior to the system locking up for nontechnical users.
>Just a few weeks ago I found a Chromium bug when I was working on a website. I did not blacklist the browser, naturally.
Did they fix it in less than 2 years? Did it crash the end-user's computer? Did people navigating to your website report the bug to you?
Did you perhaps work around the bug? For example by using a polyfill that would provide degraded performance but still allow the end user to access your content? Because that's almost exactly analogous to this situation, and exactly what everyone does.
>This subthread[0] implies that there have been nouveau-caused crashes for webgl since 2015. The linked bug[1] seems pretty cut and dry. Nouveau completely locks the system, Nvidia doesn't.
Crashing on a page designed to exhaustively test GL features is one thing. How about crashes which actually affect end-users? I expect that the volume of users who will be negatively impacted by blacklisting is far higher than the volume of users impacted by serious nouveau bugs like this. The difference is that the former user hasn't been annoying Chromium devs in their bug tracker yet.
>Did they fix it in less than 2 years?
No. The bug turns 2 next month and shows no signs of being fixed.
>Did it crash the end-user's computer?
No, but like I said I don't think many nouveau users are actually affected by bugs of this scale. The bug which prompted the blacklisting and being discussed today is not such a bug.
>Did people navigating to your website report the bug to you?
Yes.
>Did you perhaps work around the bug?
Yes
>For example by using a polyfill that would provide degraded performance but still allow the end user to access your content
No. If the workaround caused severe performance degredation and encouraged users to switch to proprietary software, I would have patched Chromium.
>No, but like I said I don't think many nouveau users are actually affected by bugs of this scale. The bug which prompted the blacklisting and being discussed today is not such a bug.
The bug being discussed today is just one of "some bug reports on other rendering issues with Nouveau". It fails the conformance tests, a quick search showed that same bug about crashing having been reported to chrome. Let me say that one more time:
There is a set of conformance tests to verify API compatibility. Nouveau fails them. It's not just buggy, it is literally non-API-conformant. You can't keep pretending its API conformant when it fails the API conformance tests. When Nouveau is actually API compliant, perhaps it will get un-blocked.
Until then, Chrome is doing exactly what you'd do if Nvidia claimed to implement the APIs but just made the system crash instead: block a nonconformant API implementation that lied to its clients and degrade gracefully instead.
>There is a set of conformance tests to verify API compatibility. Nouveau fails them. It's not just buggy, it is literally non-API-conformant. You can't keep pretending its API conformant when it fails the API conformance tests. When Nouveau is actually API compliant, perhaps it will get un-blocked.
It doesn't matter. Nouveau is a buggy implementation but an implementation nevertheless. No one is going to blame Chromium for their desktop freezing up. It's the user's decision to buy Nvidia and Ubuntu's decision to use a buggy driver. They've weighted the tradeoffs and come to a decision which is theirs to make. It's NOT Chromium's place to make that call.
These bugs are not causing daily issues to Chromium users, or even frequent issues, for nearly all users. The blacklisting does affect all users, daily.
It is not Chromium's place to decide which driver their users will use. It's not okay to write vendor specific code. It is not okay. You write code for the APIs and if the implementation of those APIs is buggy, it's their bug, not yours. Changing your code to fix someone else's bug is the objectively incorrect thing to do. Fucking over an important upstream Linux driver in favor of a proprietary driver from a bad actor is outright morally wrong.
> Crashing on a page designed to exhaustively test GL features is one thing. How about crashes which actually affect end-users? I expect that the volume of users who will be negatively impacted by blacklisting is far higher than the volume of users impacted by serious nouveau bugs like this. The difference is that the former user hasn't been annoying Chromium devs in their bug tracker yet.
Do you honestly think that it's reasonable or acceptable for Chrome to allow an arbitrary website to hard lock a user's machine?
Do you honestly think that there isn't a page which can crash any driver? WebGL is a poorly thought out mess.
That being said, you're right, but a more appropriate response than blacklisting nouveau would be blacklisting this particular WebGL feature on nouveau.
Apologies. My original reply (now the deleted comment in thread) was on a misread comment (or edited not sure). Thanks for the expanded context, I still disagree with this grinding though.
Existence or lack of the correct APIs is not the reason Nouveau has been blacklisted - it's the functionality behind them that appears to be buggy and causing issues.
> If you do anything about this problem, you should be using your influence to pressure Nvidia into being a better citizen on Linux.
By making Chrome significantly slower on nvidia systems they effectively are pressurizing nvida to act better. Trying to work around the problems would be more like supporting the status quo instead of driving change.
That would be true only if they weren't rewarding the proprietary driver. If their goal was to pressure Nvidia into being a better player in FOSS they'd disable GPU accelleration on the proprietary driver.
It works fine on Arch. I'm pretty sure the issue is more to do with Ubuntu's packaging. For them to disable it everywhere due to an issue with Ubuntu makes no sense. Besides, Ubuntu packages old software several releases behind stable.
If you want to support nouveau, then you can put the work in. You have no right to demand that others do work for you. Especially when they already have a functioning alternative solution in software rendering.
I am not demanding that they do work. I'm demanding that they do not deliberately sabotoge the nouveau driver. If they find the nouveau driver lacking, they should improve it, not sabatoge it. If they don't want to put the work in, then they should just leave well enough alone.
>The Nvidia driver does not "work" in my project. I have added no code which explicitly blacklists it, and the day Nvidia releases a driver which implements the required APIs it will work with no changes in my code.
That is a "should" based on your feelings about Nvidia, not about what is the correct decision for users. They are falling back to software rendering when the GPU driver does not properly support the hardware acceleration. That's not uncommon, and it's certainly not the outrage you are trying to make it out to be here. Everybody gets it, you disagree with Nvidia's decision to not have open-source drivers. Not everyone else shares your views there, and it is not their obligation to support your views.
>That is a "should" based on your feelings about Nvidia, not about what is the correct decision for users.
No, it's not. If you encounter a bug in a piece of software, you should report it to the maintainers of that software. That's true even for, say, bugs found in the Nvidia proprietary driver. Expecting Chromium to fix it is expecting them to do more work, which is the exact thing others have railed on me for "expecting" from them (which I haven't, to be clear once again).
> If you encounter a bug in a piece of software, you should report it to the maintainers of that software.
I mean, sure. But that's not really the whole of it here. Chromium has encountered multiple bugs in a piece of software, and they decided they don't want to expend the resources to reproduce those bugs and deal with them. In the meantime, those bugs mean that the driver is not properly implementing the functionality for all users, and so Chromium has decided to simply not use that part of the driver. They aren't doing anything to the OS, they aren't bypassing the OS, they're just rendering on the CPU because the driver doesn't properly implement the hardware acceleration features. There is no obligation whatsoever to use software that you know doesn't work just because the OS ships it.
> Also, with this email it seems it is you who is turning a routine technical decision into a hostile relationship.
Yeah, I don't get that. Does the author think that this'll make the Chromium project more willing to sponsor work on nouveau, or for that matter, to expend some of their influence on nouveau's behalf via Nvidia? It makes no sense to me.
If you can't stand for that, then do something about it. Fix bugs, or pay people to fix bugs. On what grounds are you entitled to demand anything of the Chromium team?
Not sure what you mean by this. If there are versions of nouveau 'in the wild' (widely used by non-technical users) that result in brokenness under some circumstances-- and bugfixes in the driver are not promptly available, it makes sense to prevent use of the hardware driver i.e. "blacklist" it. So, are you saying that using nouveau does not result in broken behavior, and that any such brokenness is quickly fixed?