Hacker News new | past | comments | ask | show | jobs | submit login
Are We Wayland Yet? (swalladge.net)
288 points by fourthark 14 days ago | hide | past | web | favorite | 367 comments

This would be a good time to mention that sway doesn't support the nvidia proprietary driver [0]. The author recommends nouveau but this leaves out users that 1) have very modern GPUs 2) need vulkan 3) need CUDA 4) do heavy gaming. The author is also quite spiteful about it and I'm not sure I like that. There is even a flag "--my-next-gpu-wont-be-nvidia" [1]. Whether or not this is nvidia's fault I can't judge but there are usually two stories to every disagreement and so far at least I haven't heard nvidia's.

For me at least, this is a dealbreaker as I don't always get to choose the systems I get to use and I'd like to use the same config/wm everywhere if I can help it and if I sometimes have to alternate between i3 and sway then that won't do for me.

[0] https://github.com/swaywm/sway/wiki#nvidia-users [1] https://github.com/swaywm/sway/blob/3334d11adc926c0f6d86afc4...

Maintainer of sway and wlroots here. The Nvidia proprietary driver does not support sway, not the other way around.

Their standard, EGLStreams, is only implemented by their proprietary drivers, so in order to test that codepath we'd have to use a famously broken and undebuggable driver, which we're not interested in - and make no mistake, we get our hands dirty in the drivers all the time. Their standard also has serious technical problems - lots of really important features simply are not possible to implement based on the proprietary driver. We can't export buffers to clients, overlay planes don't work, buffer presentation timings are impossible... Supporting this driver would be a massive overhaul and would probably make the good drivers worse.

Sway is a volunteer project, we are under no obligation to put in free work to support a GPU vendor which has no interest in playing nice. It's total bullshit that anyone would think to blame the small group of volunteers who have offered up thousands of hours of our free time to the community, for free, when the real blame lays in the hands of the multi-billion dollar company which refuses to pony up docs and cryptographically signs their firmwares. Everyone else plays ball and works with upstream on open source drivers.

I appreciate what you do truly, but It's also perfectly understandable that we consider it a major reason not to use your software and a perfectly fair criticism of the choices you have made. Your rebutal has not changed the main point of the original poster at all, If you want to ignore 70% or more of Linux users that is perfectly your right to do so, but it's also my obligation as a long time Linux user to recommend that people avoid your solution in favor of i3 on X11 or a superior solution such as gnome or kde which understands the basic problems the overwhelming majority of it's user base faces and is willing to work with them regardless of the hurdle.

Nouveau works great with Sway. Users make a choice to use proprietary drivers, they aren't forced into it. They can buy more freedom-respecting hardware, too. It's a choice to reward Nvidia's behavior, and consequently that choice alienates them from our userbase.

Some high-end CG applications do not work acceptably under nouveau. If I must use those applications for my job, and thus must use the proprietary Nvidia driver, then I will. It is NOT my choice at that point, I am effectively forced into it. I wish Nvidia were nicer, but I also have to do my job. And no, using a non-Nvidia video card isn't an acceptable solution either, in some cases.

Nvidia doesn't have 70% share of linux desktop by any chance. If anyone, that would be Intel.

It's not just the Wayland/EGL stuff with Nvidia.

They've been called 'the worst company to work with' by the Linux kernel devs and are locking their GPUs down with signed firmware. Nouveau driver development is no longer possible for GM20x and newer GPUs because of this.


> --my-next-gpu-wont-be-nvidia

I though I was doing a good deed buying a netbook with AMD CPU, because of their FOSS love and such, then they decided that Brazos APUs aren't worth supporting beyond basic features.

Since then I just decided that no matter what, GNU/Linux is not the platform for anyone that actually cares about desktop graphics programming.

Brazos is 2011-era, right? amdgpu has become a thing since then - AMD now officially supports their GPUs on Linux, including those in most APUs.

Except that it doesn't provide the same OpenGL features and hardware video decoding as fxglr.

So much for "supports".

I recently built a new PC and my GPU was a Radeon RX 5700 for exactly this reason.

Way ahead of you here.

And regardless of how https://github.com/RadeonOpenCompute/ROCm pans out, at least you're not sinking skills into a proprietary jail.

After trying Sway recently I read a bunch of github issues when debugging. I was disappointed to find many the comments toxic.

I’ll stick with i3 and probably look for something different in the future.

The examples that were easy to find again; https://github.com/swaywm/sway/issues/1207#issuecomment-2984...


Ugh I also find that really offputting. Worse still is it’s the same guy behind SourceHut. Now I need to think about whether I want to continue to use that since if I need help the last thing I want to hear is RTFM. I always do but that doesn’t mean I don’t miss things and need a pointer :(

To be frank, drew answered me RTFM once regarding one of my sway questions. I found the answer valid, because I couldn't find the manual before. As sad as it is, many projects do not ship a man page, which makes it very difficult to find documentation.

Sway has quality man pages, and I very rarely have to find someone else in a chat room or fire up the web browser to find answers. I can understand the devs' frustration: they spent a lot of time writing those up, so have people use them.

Give someone an answer, you'll help him for the day. Show him the man, you'll help him for life :)

I get it, but when I reach out for help, its because I wasn't able to figure it out myself and I likely put a significant (relatively speaking) amount of time into it. If its in the manual, it means I overlooked it and could really do with a pointer. If I'm just told RTFM, that leaves a very sour taste.

I understand that devs have to deal with a lot of "dumb" questions, but that doesn't mean they have to be rude. As someone else said, silence would actually be better in this case, but a better response would be something like "hey, that's in the manual, in the blah section" because its not rude, it affirms that it is, indeed, in the manual and gives me a pointer where. Even without the last bit, it would be better. Part of good support is to acknowledge that the person has a problem, even if you can't help. If you don't want to provide support for an open source project (as in the case of the linked issues) then don't respond or at least set up a replacement to turn RTFM into something a bit more human.

> I found the answer valid, because I couldn't find the manual before.

How did RTFM help you find the manual if you didn't find it before, aside from affirming that there is, indeed, a manual?

idk, those examples seem justified. The second one was someone ressurecting an old issue with a request for config information that was _in the issue_.

RTFM is sometimes a valid response, and if you're having an issue finding the documentation then that's a bug.

RTFM is never a valid response. At the very least you point the user to the specific section of the manual.

It's this philosophy that made the ubuntu support forums the most agreeable (and pretty much most popular), at least for a while. You can RTFM people, but then you show that you hate your users, and they will leave.

Not only the people asking, but also others reading it. Like this example shows very well. This bad comment not only made d0ugal search for a different project, but also made sure I won't use it, and worsened my opinion of the author considerably.

In my experience, "RTFM" is often a manifestation of the frustration that the person asking for help hasn't even begun to do the most basic thing to try and help themselves.

It's extremely wearing having to deal with people with a problem who have apparently put precisely zero effort into figuring the problem out on their own.

"RTFM" isn't always a useful response, but I have sympathy with people who express it and its friends ("Have you read the manual?", "What have you tried to do to solve this problem before asking for help?").

Well that's what you sign up for when you ask people to use your software.

That foolish sway dev, angering his paying users?

RTFM is not going to make for happy users, but volunteers for free projects have the luxury of being able to ignore disgruntled users. If they don't want to maximise their user count then they have the luxury of being able to do whatever they like up to and including not having a bug tracker and literally hurling abuse at people who ask them questions.

We aren't entitled to professional and comprehensive support just because the project happens to look well run.

"Ask"? Of all the open source work I've done, I never ask anyone to use it. I put it out there with the hope that others will find it useful. I never go around pushing people to use it.

No one is entitled to anything, including free support. Many open source developers provide free support, but don't have the patience to deal with users who won't even do the bare minimum to help themselves.

> I put it out there with the hope that others will find it useful. I never go around pushing people to use it.

Which is fair. A lot of FOSS devs, however, do. And then they still try to pull "it's free" as an excuse for a poor product.

I think there is a very clear distinction between asking for help like: 'I have searched for a solution to my X problem in this or that way, but I couldn't find anything.' and 'I don't know how to do X.'

If you feel like neither of them deserves a RTFM, I think you have a very entitled view of being a user, and personally I will never want you as a one for the software I write.

RTFM is a perfectly justified answer to people that consider that a developer's time in replying to their problem is less valuable than their own in searching for a solution. Exceptionally more so when the answer is an "apropos" or "man" page away. The least thing a user can do is to spend a fraction of the developers' invested time into finding solutions on their own.

Here's a question:

Is it the category of response, or is it just the simple "RTFM" that turns you off? That is, if the answer was, "The answer to your question is in the manual; please read it", would you consider that ok?

Arguably the latter answer is the exact same thing in content as "RTFM", but it's easily more polite and doesn't have the same negative baggage.

If you're ok with the more wordy answer, then you're really just objecting to the negative tone and lack of politeness, not the amount of information given by the answer.

> This bad comment not only made d0ugal search for a different project, but also made sure I won't use it, and worsened my opinion of the author considerably.

Just a final note: many open source developers consider that a feature, so I doubt you'd sway most of them with this argument. As in, they're doing this in their spare time, and don't want that spare time to be squandered by people who don't even give them the courtesy of reading the provided documentation. (This is why, if you have read the docs and are still at a loss, you should say so: "How can I do X? I read through the man page and searched the wiki, but I wasn't able to figure it out". Framing your request this way shows that you aren't just a lazy leech who is wasting the developer's time.)

Having more users is only great if they aren't a support burden. A company can afford to hire scores of first-line support and afford to pay for support-desk platforms that automatically help triage and suggest answers to common questions. Most single-person and small-team open source projects can't do that. And users should not feel entitled to free support for software they haven't paid for. Sure, it would be great if people could always be courteous and friendly despite stress and overwork, but everyone has their limits.

It's both. Using the insulting term RTFM makes it worse. But just pointing to the manual is also not the right way to do it, at least you have to specify which manual and where. That's the rules we set and they are really the right rules, below this minimal amount of effort you are not giving support. You are just wasting time and offending people.

> Just a final note: many open source developers consider that a feature, so I doubt you'd sway most of them with this argument

See the reaction in this comment thread. Developers rarely do only one project. One might not care whether or not someone uses the free Window Manager, but if the negative impression carries on to other and commercial projects there was harm.

> That's the rules we set and they are really the right rules

"We" who? That's just your opinion, not some universal rule.

> Developers rarely do only one project. One might not care whether or not someone uses the free Window Manager, but if the negative impression carries on to other and commercial projects there was harm.

Perhaps, but I think we should let developers make the decision for themselves as to how to support (or not support) their own software that they work on for free in their spare time. If providing bad support hurts them in other walks of life, that's still a choice they may decide to make.

I referenced above the Ubuntu Linux forum. That's where we (=the people running the forum) set those rules, based on general Ubuntu guidelines. So it's a little bit more than just my opinion. But it's my opinion that these rules are always right if you want a successful software project. You can also treat it as an observation if you prefer.

> Perhaps, but I think we should let developers make the decision for themselves...

That's not a useful route to discuss, and frankly a bit annoying. No one is forcing devs to do anything. If you think discussing the consequences and why that behaviour is harmful is making it impossible for devs to make decisions for themselves - that will sound harsher than I mean it - you shouldn't engage in such a discussion.

> if the answer was, "The answer to your question is in the manual; please read it", would you consider that ok?


RTFM is always a valid response when you are dealing with a lazy, spoiled society that would rather just call tech support and bother somebody who is sitting on the other side shifting through a stack of manuals in from of them that comes with the product...

What surprises me are people who have the patience to wait for somebody else to tell them why their app broke, when it's much quicker dealing with problem just by going straight to the source. (pun intended)

RTFM is just a rude way to say "Please search the documentation before asking".

If the amount of typed characters is the issue, I assume developers are more than capable of using system-wide text-expansion.

In any case, even silence is better than "RTFM". If you're not in the mood to give a civil answer, take some time off. No one will notice.

Generally, I agree. However, we're discussing a highly customizable WM. Not GNOME or KDE. You may assume the user is technically adept, and able to read a man page. Telling them to do exactly that is fair (but I agree it can be said friendlier). Silence might be better, but it might also be worse if the reader is awaiting help.

I often ask "stupid" questions, but I do so after having searched the documentation, google and tried everything I could think of trying. Sometimes it really is in the manual and in my frustration I overlooked it. My point is that assuming the person is just lazy is, well, an assumption and may not be true. At least a friendly "its in the manual" tells me I just overlooked it, but an unfriendly RTFM just makes me think why did I even bother wasting my time struggling. I don't have problems with stuff for the fun of it.

Two days ago, I tried to get a vim plugin working. After trying the instructions over and over for about an hour and a half, I finally gave up and opened a ticket with a question that probably looks pretty lazy and dumb to someone experienced with it. Did I get an RTFM? No, it turns out there actually WAS a bug (actually, a bug and an undocumented setting). I almost didn't post out of fear of being called lazy or whatever and just give up on it, but it turns out there actually was a problem. They fixed it and I'm now a happy user and the positive experience makes me more likely to report future bugs, tell others about the tool or even contribute if I can. An "RTFM" would have driven me away forever.

> I often ask "stupid" questions, but I do so after having searched the documentation, google and tried everything I could think of trying.

Then when you ask, demonstrate that you've done so.

"Hey, how do I do X? I read through the docs, googled, and tried everything I could think of but I'm still stuck" is likely to get you a decent answer.

If you're going to ask someone working for free to give you free support, the least you can do is demonstrate that you've done your homework. The unfortunate reality is that many users do not do this and just want someone else to hand-hold them through everything.

I agree that it'd be nicer if developers would remove "RTFM" from their lexicon, and, even if it provides no more information, go for something politer, like, "the answer is in the manual; please read it". But people get tired, people get frustrated, people have a bad day. And some people might do it deliberately to push away users who they think will be an unproductive time-suck for them. As someone benefiting from someone else's free labor, you are entitled to nothing. Suck it up and do your best to show that you're not a leech and that you'll do your part to support yourself, only asking for help when you've exhausted the usual avenues.

The RTFM conundrum is very simple to solve:

1. Install texpander (https://github.com/leehblue/texpander)

2. $ vim ~/.texpander/RTFM

3. Paste this text: "Please search the documentation before asking and opening issues." Press ESCAPE, followed by ":wq<return>"

4. Add a handy keybinding to "texpander.sh"

5. Problem solved! Now you can RTFM all day long without bothering anyone!

I get it that it comes across as negative, but it is partly a choice. You could assume the person is just very busy. You could assume RTFM just means Read The Fine Manual.

The current meaning of RTFM is well established and it does not contain the word "fine"...

Lots of assumptions and generalizations.

There are countless reasons for why these things happen.

The thing is - nVidia uses shared source for all of their drivers. This is why you always have the newest GPU feature support and performance on their Linux driver - it's the same codebase as it is for Windows and was for macOS.

Linux community on other hand wants nVidia to restructure their driver just to fit Linux model and essentially lose the source parity or publish the source completely. It's not an invalid request, because nVidias APIs don't really fit into Linux kernel design and userspace APIs. It's also not very likely to happen, especially due to poisonous behaviour of kernel maintainers towards nVidia, unwilligness to compromise and nVidias refusal to add more resources to refactor the driver.

Do you think Windows or MacOS make compromise on the way they code their kernel to accomodate nVidia ?

No, it's just a matter of economics.

Yes, Windows has a stable driver API you can build upon.

Linux does not, because they want all drivers to be inlined (included in the kernel) and open source. nVidia does not want to release their trade secrets, so they don't want to open source their drivers.

(No idea about macOS)

Of course, AMD managed, so there’s no technical reason that nVidia cannot.

Except that AMD doesn't have feature parity with Windows driver on open source version and has all the Nvidia driver headaches on closed source version.

I'm not sure what AMD really managed here.

AMD's open source driver is fully usable for normal usage (including gaming), and in general more performant than the closed source version.


Still behind the proprietary Windows driver or Nvidia's proprietary Linux driver.

They are not behind their windows driver on OpenGL. And neither for Vulkan, I think. AMDVLK scores a few wins here and there, but RADV is generally more stable, performant, and compatible. Plus being open-source, it is easily extended, like valve is doing with their AC0 experiment [1].

Last I heard, people were installing Linux to use the AMD OpenGL drivers to play emulators (it might have been Cemu, actually ran trough wine).

[1]: XDC2019 slide deck https://xdc2019.x.org/event/5/contributions/334/attachments/...

Can you share some source of your statement?

It doesn’t have “all” the headaches on the closed source version, afaik - it still implements the standard APIs and thus works with systems that were designed to work with every other driver from AMD to Mali, unlike the nVidia proprietary driver.

Because it is NOT the same driver. AMD, just like nVidia, want to keep their own secret sauce secret, because that's where the money is.

Is so much of their profit bound up in their software?

I thought these were hardware companies.

I didn't say there's a technical reason, I said they want to keep their source code secret, which to me is a reasonable argument.

Well then sway maintainer's reason to explicitly deny support for proprietate nvidia driver is a reasonable argument too.

Definitely, it's his software and he can do whatever he wants, and I'm not criticising him, I'm criticising Linux for not offering a stable driver API. As far as I know they don't even want to allow shims like the one Android Treble introduced. It is not a technical decision, it's a political one.

There is a technical rationale that should be read to understand kernel dev's PoV : https://github.com/torvalds/linux/blob/master/Documentation/...

Refusing to open source their drivers is not a technical decision, it’s a political one.

Linux has a fairly stable driver API, it just doesn't have an ABI.

The GPU API doesn't seem particularly stable to me.

MacOS user: what's a driver ?

Seriously though, one of the pleasurable things about using macOS is that you don't have to worry about hardware compatibility. Because there is none, outside the small list of parts officially supported by Apple itself. There are some NVidia cards on that list, yes.

> The thing is - nVidia uses shared source for all of their drivers. This is why you always have the newest GPU feature support and performance on their Linux driver - it's the same codebase as it is for Windows and was for macOS.

The same is true of AMD, they share most of their display configuration code (in the kernel) and userspace code between a set of drivers on Windows, Linux, and macOS; they just also publish documentation and redistributable firmware, and maintain a second very-high-quality driver in Mesa, and due to the availability of documentation and that Mesa GL driver, there is a second Vulkan driver (RADV) which is also excellent.

> It's also not very likely to happen, especially due to poisonous behaviour of kernel maintainers towards nVidia, unwilligness to compromise

Please, there is nothing to compromise about.

Nvidia doesn't want to work with the kernel community. They don't want to document how their driver works. They don't want people to look at how their driver works. They don't even want people to develop alternative drivers for their cards.

Nvidia earned 100% of the bad blood existing between them and the kernel community. They are even worse to work with than Qualcomm. Should give you an idea of how bad they are.

> The thing is - nVidia uses shared source for all of their drivers. This is why you always have the newest GPU feature support and performance on their Linux driver - it's the same codebase as it is for Windows and was for macOS.

Sure this is almost true, but not quite - there is obviously Linux specific code to support X11 and VDPAU that isnt in the Windows driver, for example. Of course, NVIDIA can decide to not support open drivers, or not support Wayland in their closed drivers, and as a consumer I can choose not to buy their products.

You can have an open source driver without mainlining it. This was what the whole discussion between the Linux devs and AMD was over the AMD HAL. If you want to maintain it yourself, you can do it however you want.

Linux has modules, and had very good support for out of tree modules.

It's easier to switch to Radeon, and ROCm instead of CUDA.

It’s pretty clearly nvidias fault. Their proprietary driver doesn’t play well with wayland and they haven’t seemed to care.

Well, they've developed their EGLStream approach and that probably cost some resources on their end so the question is why they decided to go that way at all. It seems like a waste to me to develop something nobody is going to use and I don't see the business reason for this particular development.

afaict the only people who really care about EGLStream are nvidia. And while GNOME and KDE might have the resources to support both API's (much as they don't want to), smaller projects like sway simply don't have the resources to worry about that.

I think one of the biggest failings of wayland is that it requires so much duplication of effort between different compositors. Ideally, the compositor shouldn't have to care very much about which drivers the user is using for their graphics card.

>Ideally, the compositor shouldn't have to care very much about which drivers the user is using for their graphics card.

That would require a single standard for communication with GPUs and the problem is that Nvidia is refusing to implement that standard.

All it requires is a single standard interface for managing buffers, which exists and is named GBM.

Wayland doesn't care how you draw your buffers, and a custom EGL library as they already do, while gross as hell, is not at all a compatibility problem.

Or some kind of abstraction layer.

Even KDE was only able to gain support for EGLStreams after an NVidia developer Erik Kurzinger contributed the necessary changes to Kwin.

As far as I know that was mostly because they refused to even try and not because it was too hard or even complicated.

If one of the kwin developers had nvidia hardware, likely they would have cared enough to try. And if they didn't, how would they test and maintain the nvidia-specific code? Adding an entirely new code path for rendering would be a large support and testing burden that they may not have had the resources to take on.

> If one of the kwin developers had nvidia hardware,

So what your are saying is that NVIDIA could have just sent them a crate full of low end $50 dollar hardware and been done with it? I find that rather unlikely, or rather as an end user I prefer to think that there wouldn't be that much drama over what amounts to nothing.

Maybe? I don't know.

But, either way, having two completely separate graphics code paths means a much larger maintenance burden than one. Even with hardware to test on, I'd consider it perfectly reasonable to decide to only support one, especially if the odd company out is one with a history of not playing ball with the community.

EGLStreams is heavily used in industrial embedded, eg in nvidia's car platforms.

You got that the wrong way around:

Nvidia's platforms are a large part of industrial embedded, on which the users have no option but to use EGLStream.

So, I find this a bit weird

The nvidia driver doesn't play well with some basic apps, but it plays extremely well with games and other professional apps running on Linux (the whole reason for nvidia to put up a driver)?

The reason is simple: those using profesional apps are typically >100k/year engineers using apps that cost >10k/year. The developers of these Apps either put in a lot of money into supporting nvidia proprietary APIs, or, they contract nvidia to implement support for them. If you are big enough, nvidia does this for free.

It doesn't matter if AMD sells the exact same GPU as nvidia, because when you then switch BLAS for cuBLAS, the nvidia GPU becomes 100x better than AMD.

And that's just libraries, there is also tooling, engineering support, and well, software in general. Nvidia invests a lot of money on making sure that their GPUs come with a great proprietary AMD-incompatible software stack, and in integrating this stack with anyone developing products using GPUs.

I've worked on a couple of national supercomputers using AMD hardware, and AMD pays for ~1 AMD engineer full-time that works on improving the applications that run there. Nvidia pays for a couple of engineers that manage and tune the cluster for you, and a bunch more that work on peoples applications. Easily, 10x more engineers than AMD.

Even if AMD were to build better hardware, no sane industry person would pick them up over nvidia due to all other services nvidia offers.

It's chicken and egg problem. Nvidia was major backer of OpenGL, but their drivers were never conformant implementations that allowed a lot of incorrect shaders to compile and run. Yet Nvidia had best developer support so most of commercial apps were developed and tested against their drivers. As result those apps use non-standard codepath that simply dont work on conformant drivers. On top of that OpenGL compatibility contexts are not well documented or tested, but it's not strictly Nvidia fault.

In case of Wayland it was was opposite. It was developer by everyone, but Nvidia. Open source graphics stack developers found a way that work best for their hardware and supported it for decade. Recently Nvidia tried to join the parry while extending it with own incompatible addition that no one else needs. Obviously many open source proponents dont give a damn about their closed drivers so they only going to support primary APIs.

As someone who has spend a lot of time working on graphics on linux, I can safely say this is nvidia's fault.

> This would be a good time to mention that sway doesn't support the nvidia proprietary driver

It's rather nvidia proprietary driver that doesn't support standard Wayland protocols and thus doesn't work with Sway not the other way around.

See this for details: https://drewdevault.com/2017/10/26/Fuck-you-nvidia.html

I have read this and I don't understand why Wayland developers don't want to write an adapter for NVidia's proprietary API. How is it worse than other APIs?

Also, porting proprietary drivers for Linux must be a pain because there is no driver API and you cannot just release a closed-source driver and forget about it, you have to open source it and maintain it forever. No wonder manufacturers don't want to bother with this.

> I have read this and I don't understand why Wayland developers don't want to write an adapter for NVidia's proprietary API.

If you're NVidia user you're justified to feel bad about this entire fiasco but remember protocols exist so that everyone implements their own part and users can mix-and-match and it works together.

If AMD and Intel can dedicate resources to maintain their Wayland implementations with no complains why NVidia can't?

> why Wayland developers don't want to write an adapter for NVidia's proprietary API

Because they could use the time spent on maintaining NVidia proprietary API adapter writing open-source software that will benefit all parties.

> If AMD and Intel can dedicate resources to maintain their Wayland implementations with no complains why NVidia can't?

nVidia shares the driver with Windows, AMD/Intel don't. So AMD/Intel always give you a driver that's significantly trailing the Windows versions on features and stability (you can read a lot about this on Dolphin blog for example) while adding more maintenance costs.

> Because they could use the time spent on maintaining NVidia proprietary API adapter writing open-source software that will benefit all parties.

What do you mean "all parties"? They're excluding at least one party - nVidia users.

> They're excluding at least one party - nVidia users.

"They" being Nvidia here. AMDs amdgpu driver clearly shows the problem is neither Linux nor Wayland or Sway.

> significantly trailing

Please elaborate more. I'm writing this from my Dell XPS 9575 with Vega M GL under Fedora 30 and I haven't encountered a single problem in GPU-accelerated applications and games with official open source drivers.

To add to this, the AMD OpenGL windows drivers are notoriously bad, whereas the Linux OpenGL drivers perform closer to DirectX. Performance on that end is significantly ahead.

> What do you mean "all parties"? They're excluding at least one party - nVidia users.

I mean all parties that implement the standard protocol. It's rather nVidia that's not interested in giving their users a chance to use properly Wayland not Sway developers "excluding users" by not doing free work for nVidia.

> The author is also quite spiteful about it

Sadly this is more or less the norm and in my eyes the source of the large disconnect between people who believe in things like "linux desktop is for everyone" and actual average users. Nobody wants to read a long principled rant when they're looking to actually use their computer.

No developer wants to deal with bug reports due to a buggy proprietary driver they have no ability to change.

If you don't want to deal with stupid bug reports then you'll have a big problem developing any software that a large group of people interact with.

Yes, but the dynamic changes considerably when you're a one-person team doing it for free in your spare time.

Companies that build software can afford to hire dedicated people to deal with particular hardware configurations, and usually make revenue-based decisions on what to support. One-person shops only have what they have.

Why does nvidia get the pass here? They've decided not to support the standardized graphics driver interface that Wayland needs to work. They certainly have the money and developers to do so if they wanted to. Presumably they've made a decision not to based on (lack of) expected revenue.

Why would you begrudge an unpaid volunteer to make a similar decision about what to support in their own software?

The average user would probably appreciate a driver experience most similar to Mac OS, and such an experience is available on Linux for non-nvidia graphics hardware because other vendors cooperate with standards.

I agree this gives a bad image, but the average user isn't going to use Sway. It doesn't affect most Linux users by far.

It's a symptom of the culture, not the big driver of that culture.

It leaves out users who do any meaningful gaming beyond tetris or Farmville in the same session.

You could always log in 2 graphical sessions and have one be running x and one sway I presume.

You could just use an AMD GPU on Linux. They've had (more than) competitive open source drivers for a few years now, and they play well with all the modern Linux desktop protocols.

I won't be buying new hardware just to use a currently worse functioning alternative whose increased security is wholly hypothetical.

It is something to keep in mind when you purchase your next card. I'll always choose a smooth experience with mainline drivers over 10% more raw power. (And it's incredible how much AMD GPU driver support has progressed over the last few years, going from the total clusterfuck that is Catalyst to everything just working out-of-the-box.)

Clusterfuck? I just installed nvidia-driver and it sets itself up.

Catalyst is AMD's previous driver: https://wiki.archlinux.org/index.php/AMD_Catalyst

Ah my bad, I mixed up with Nvidia. Thank you.

I don't think so. A driver needs to control a device completely so you can't drive sway with nouveau and game on nvidia.

Drew's stance on supporting EGLStreams is not unreasonable. It's a "standard" that only nVidia cares about and causes a lot of headache for pretty much everyone.

However, yes, the naming of that flag is a red flag. It tells me "this developer thinks that because you use their software they are entitled to tell you how to use your computer", which is an attitude I cannot abide.

Well, this exact problem is why I won’t be buying an nvidia GPU the next time around. I’ll hang on to my 1080 Ti until AMD has something faster.

All spite towards NVidia is completely deserved for many many reasons.

Maybe it's about time for Linus to break the fourth wall and flip them off again in the middle of of a university classroom?

I mean it worked wonders the first time, considering that's how we got the Nvidia proprietary driver to begin with.

>that's how we got the Nvidia proprietary driver to begin with

Could you elaborate a bit? I don't buy nvidia hardware and don't follow them at all these days, but I very well remember using the proprietary driver back in 2008 or so. At the time, it seemed to me to be the only well supported high-performance graphics driver.

I remember using their proprietary driver on linux at the turn of the millennium.

From what I've read, it seems like Wayland's "controversial design choices" don't stem from developers being inconsiderate of different workflows, but rather from the intention of making a general purpose protocol.

Being general purpose means that things like screenshotting capabilities are not the protocol's concern and should be implemented in the upper layer(s) instead.

In that case, this general purpose approach seems to me like the right way to tackle the problem, since we won't need a different protocol for use cases that fall outside the traditional desktop paradigm. You can just use Wayland and implement your own business code on top. There'll be a de-facto standard way to do graphics on Linux, no matter your use case.

Correct me if I'm wrong about this. I'm not a Wayland expert (I have many articles and books in my to-read list).

I'm excited about Wayland for the simple reason that I hate screen tearing.

That means the screenshot application is, to some degree, compositor specific. It leaves the door completely open to the outcome that if you want to stream using a Gnome streaming application you will have to be using the Gnome project's window manager. Or the KDE streaming application will require the KDE window manager. Or the 'best' screenshot application will be tied to the XMonad successor on Wayland.

Wayland is a good experiment, and the community may well go with it because X11 is atrocious and Wayland is a viable alternative. But call a spade a spade, they dropped the ball with that design decision. It isn't a big deal.

The practical outcome is that there is going to be a screenshot protocol and everything that implements Wayland is going to have to implement that protocol as well. The required negotiation for that to happen is taking/going to take years and delay Wayland adoption. If they'd designed that at the same time as an optional part of the Wayland protocol it would have saved time and confusion.

> The practical outcome is that there is going to be a screenshot protocol and everything that implements Wayland is going to have to implement that protocol as well. The required negotiation for that to happen is taking/going to take years and delay Wayland adoption.

Linux fragmentation is a real thing, but if the community is going to take multiple years to reach a consensus on the right way to approach screenshots, that does at least somewhat suggest to me that leaving it out of the base protocol may be a good decision. My understanding is that the point of Wayland is to be a semi-permanent solution to the problem of X11. Any mistakes we make in the protocol will haunt us for decades, not just years.

That concern makes me more likely to err on the side of reaching consensus before core logic is implemented, even though I admit that the fractured nature of the Linux community is likely to make process take a lot longer. I'm not saying that nothing should be standardized, just that if it looks like there's disagreement over implementation, it might be a good idea in this specific case to bias towards delaying a final decision.

The protocol mistake might easily be that they didn't include a security policy mechanism for coordinating Wayland buffers or something similar. It sure looks from the peanut gallery looks like they have a security model (graphical output is completely secret except to the compositor) that is insufficient in practice and users really want applications to be able to snoop on each other when required. That is going to be more difficult to tack on afterwards than it would have been to design in at the start. Security is exceedingly difficult to do after the fact.

Maybe they did consider all this and have a plan. But I havn't seen anyone write a "this is how you target arbitrary compositors with your toy screenshot program" article yet.

> Security is exceedingly difficult to do after the fact.

This is an odd application of that idea to me. In my experience it's not to terrible to punch holes in a system after the fact. Exceedingly difficult is patching the holes in a project that starts as Swiss cheese.

I think this is a misunderstanding of how screenshots work, and how Wayland has always intended to deal with the issue.

First of all, note that as with any window system, application buffers are not the final version of what you see on the screen. A normal desktop has wallpapers, transparency, task bars, multiple windows and window occlusion.

This means that apart from a few special cases, only the compositor knows how the full scene currently looks, and is the only entity capable of producing a buffer containing the entire thing.

For this reason, the only way to do screenshots is to have a way to ask the compositor for one. This is the case for any windowing system, and nothing related to buffer management will change that.

> ... that they didn't include a security policy mechanism for coordinating Wayland buffers

Depending on what you mean, this is either slightly or very untrue. Basically, when you try to present to screen, a client takes a buffer (which is private) and commits it to a surface. This temporarily borrows it to the server.

Should the server wish to share the buffer, this is when this would be done. Before doing so, the server would enforce any security restrictions as necessary. This is how all client-to-client communication happens in wayland: With the server as mediator, when it permits it.

A screenshot of a window or direct-scanout application could be implemented by simply having the server further borrow the buffer to a recording application, with appropriate restrictions in place.

> users really want applications to be able to snoop on each other when required.

I don't understand why you would think that this is a problem under Wayland. They only difference is that while X11 implicitly allows everyone to snoop on everything without any way to control it, snooping in Wayland is explicit, and servers can prompt users to permit it per application. Or not, it's up to the server.

> That means the screenshot application is, to some degree, compositor specific

This is not the intention under Wayland. Wayland protocol development is geared towards compositors implementing protocols for experimentation, and then basically "upstreaming" the result. Even before upstreaming, compositors share work (e.g. wlroots implemented at least one kde-specific protocol, that has now been superceeded by the resulting upstream work).

Also, all Wayland protocols are advertised in the registry, so applications don't do "I'm on KDE, so...", and instead just use the protocols available. It is therefore not a problem if KDE implements a GNOME protocol, for example. It'll just work.

Screenshot and recording will be a shared protocol, but due to wanting a proper protocol with goodies like damage tracking for performance, it's a little bit more work than you would think. We certainly don't want X's "dumb" approach—we want something faster and safer (that is, functionality guaranteed without tearing or fun stuff like that).

> The practical outcome is that there is going to be a screenshot protocol and everything that implements Wayland is going to have to implement that protocol as well.

So we are going to reinvent X extensions from scratch? By the time that is finished we will have enough legacy bloat that people will call for the next replacement.

That's the entire point of Wayland. It will be easier to replace Wayland because Wayland isn't a monolith that does everything and the kitchen sink.

there are already a number of screenshot protocols (as TFA explains, slurp and grim can be used for screenshots on sway). the trouble is getting everybody to agree on a single one, or implementing a library to interface with all the protocols, which is the current strategy. https://www.google.com/search?q=wayland+screenshot+protocol

but, IMO, this is a good thing, and the only way it could have worked. if every single conceivable protocol was added to the initial specification, then wayland would never have been released. even if it was, people would complain even more about it being "bloated" and "non modular" and "not following the unix philosophy", whatever that means.

Screenshots, remote desktop stuff, etc, is being built under the Portal system that’s used for flatpak. GNOME and KDE already support this, and it doesn’t depend on flatpak at all.

freedesktop have had success in standardising the Linux desktop. I fail to see why gnome, KDE, etc wouldn't eventually standardise around a common screenshot protocol.


Windows switched to composited desktop with Vista in 2006 and didn't lose any[0] functionality. 14 years later and we're still saying "eventually" when discussing basic features Wayland should have.

[0] Technically it lost a few, the ability to ignore vsync for non-fullscreen applications being the biggest one.

> and didn't lose any[0] functionality

Apart from stability.

Jokes aside, this has nothing to do with the protocol as much as the fact that there are vast differences in how an open source project is developed vs. how Microsoft develops.

A lot of Wayland development was initially funded by Samsung, which mainly focused on usecases for their smart devices. They then shut down their entire OSS department, so that workforce is out.

Now, finally redhat seems to be gearing up a bit, with GNOME Wayland being default on Fedora, and sponsoring Wayland work on things like Firefox.

But, even then, things are powered by what people want and care about, rather than just trying to tick every previous feature box available.

Many things that came out of freedesktop.org are pure garbage. The most prominent example is dbus. Personally I hope they have no success in standardizing anything further.

Do tell. I’ve found dbus hard to understand, but it works reliably here.

There are many ways to do IPC on a unix system. Dbus is a reinvention of IPC in the worst possible way. It requires a daemon to run and it requires every client to be able to parse and generate JSON. The worst thing is that those JSON packets are not even human readable most of the time. Protocols that are running on top of that are also not standardized. If you are lucky KDE and GNOME agree on something. Many times they don't.

I suggest you read up on how D-Bus actually works. E.g. https://dbus.freedesktop.org/doc/dbus-tutorial.html

D-Bus does not use JSON.

Indeed it uses XML which is even worse!

Only as a description language. The message format is a subset of GVariants.

At closer inspection GVariants looks very similar to JSON though.

Except that it was designed to be read into memory and directly accessed without parsing. A GVariant Array has the form of its elements and their lengths. You can index into an Array in linear time.

Its funny how people shit all over systemd for doing everything and then people shit all over wayland for just doing enough for the task it was made for.

I think the complaining is 10% real concerns and 90% people upset that it is different than it used to be.

Systemd and Wayland are very different pieces of software. It's easy to imagine (in fact I think it's very common) that end-users of Systemd just use it to launch a service which replaces all the logical features of Systemd. (E.g. for an extreme example, a kubernetes cluster.) If systemd doesn't support some feature, it's really fine. Maybe even preferable. You can get it working by some other means.

Wayland on the other hand, it really does need to do everything well. If Zoom won't run in Wayland, needing to launch X11 to run Zoom means Wayland is broken.

Zoom is an awful piece of malware. Wayland doesn't need to support zoom, zoom needs to support wayland. With that logic literally every change to an OS is broken because it doesn't run my cli accounting program from 1985.

You're being sarcastic, but I actually agree with the notion that changes to an OS that cause previously-working code to break are in fact bad.

Wayland is indeed similar to systemd. It requires a monolithic implementation of all features traditionally done by separate programs (e.g. window managers, hotkey deamons, screen recorders, streamers, ...) because it lacks the appropriate protocols. X11 on the other hand provides a platform (thanks the "process not policy" design mantra) for all those separate programs by implementing those appropriate protocols.

Also, people love change if you have actual improvement. I was very happy to switch from sysvinit to runit.

X11 not being a monolithical piece of software sounds like a cognitive dissonance issue. The codebase is huge, even though they tried to get rid of some stuff recently, such as the printer drivers. But it contains a lot, from networking to graphical widgets, to GPU drivers. All of which is implemented monolithically in one program.

Wayland does specify only two thing: how to exchange buffers between applications, and agree on protocol extensions.

Then, you can make the inner workings as many pieces as you want. The "no window manager" is a fallacy. You could decide to write a compositor that offers a protocol to manage the windows. I'm pretty sure you can more or less do that today if you use sway.

The one thing Wayland doesn't do is specify the 1000s of things X11 was doing, most of which are hacks upon hacks on interfaces that were not designed for the stuff people are doing with.

> X11 not being a monolithical piece of software sounds like a cognitive dissonance issue.

But it isn't. Have you ever tried to use X11 without any window manager? You can't! In the best case you can type inside a terminal that is not moveable or resizable. X11 can not function on its own, hence it can't be monolithic.

Just because it is bloated doesn't mean it is monolithic. And most of the bloat is old graphics drivers which are not installed on your system anyways.

I'm not really liking X11 either. Just like I switched from sysvinit to runit I would be happy to switch from X11 to the next best thing. But Wayland is not it.

The protocol is flawed on so many levels but most importantly because it does not provide the necessary interfaces required for normal, functional desktop and degrades them to "implementation details" (or in your words "1000s of things"). Just blitting bitmaps is not sufficient for a working desktop system. The biggest pain point is access control policy, which Wayland completely ignores.

This is, just like the article's take, somewhat a misunderstanding of what "wayland" is.

A wayland environment basically has 3 "levels":

- Wayland core ("wayland")

- Wayland shared protocols ("wayland-protocols")

- Other protocols

Core only concerns itself with nitty-gritty necessities, like how wayland communication actually works. You cannot create a window with wayland alone.

wayland-protocols is where you'd find "xdg-shell", the protocol needed to manage windows on a normal desktop. Protocols here are optional, but are still a collaborative effort.

However, protocol development starts locally, in which case it starts being compositor specific under its own namespace (e.g. "kde"). If it gains traction, other compositors may implement the protocol as is. At some point, a shared protocol draft will be made under one of the "higher" namespaces, like "xdg" or "wp". KDE's idle protocol was widely implemented before a common one was developed from it, for example.

Screen recording is an example of something not yet shared. Wlroots-based compositors like sway fully support it, but details to improve the situation is still under development. An example of such development is to ensure that damage bubbles up to the screen recorder, allowing it to only process screen areas that are reported to have changed.

So, screenshotting is not something implemented in the "upper layers", but something that is currently specific protocols, that will at some point become an (optional) shared protocol.

It is also important to note that Wayland works through a protocol registry, with clients always knowing all protocols available, and using whatever they need if it is supported. GTK and Qt does all this for you, but there is no "If on KDE, do this", rather "I have a protocol that gives me this functionality".

It has always been—and still is—my impression that those considering wayland design "controversial" have simply misunderstood it, such as by thinking that it disallows screenshots and recording. Rather, it is designed to provide control over these things, and to do them right.

I have been using Wayland through sway for the past year. I can confidently say that anything I did under X, Wayland does way better. Multi-DPI, plug-n-play screen support without any hassle, tear-free low-latency rendition, etc. Knowing what is not done yet, I could provoke problems if I wanted to, but nothing interferes with my day-to-day operations.

But the author of this post mentioned a lack of support in apps like Zoom being a dealbreaker. I've also run into incompatibility with TeamViewer. And that is just going to happen whenever these companies get around to it. And if your work requires using such apps, that is just what you need to use.

I would prefer some kind of WebRTC-based screensharing solution, but I don't know of any that are preferred and many people just think of WebRTC as a security nightmare, and I haven't seen much momentum with it.

"I do not use Wayland because Zoom does not support Pipewire-based recording nor any Wayland screen recording protocols" is a fine although very uninteresting conclusion.

Excellent post. Thanks for your in depth insights!

Are there any Wayland resources for even more technical information you'd recommend?

For the record I use sway for months and can also report that the experience has been great (including hotplugging multiple monitors over Thunderbolt etc.)

My big problem with Wayland is that it doesn't look like it's going to support Window Maker as well as X does, if at all. Well, maybe I should rephrase: Wayland isn't going to be my problem until it supports Window Maker as well as X does, because I won't switch to it until that happens. I'm sure there are more than enough people like me to support a distro, like how there are non-systemd distros, the major appeal of which is that they don't use systemd.

I don't really like Wayland and I think X is better in many ways. There are a few problem which is why I had some ideas about X version 12. One is to ensure the implementation and protocol are separate. Another is proxies to implement security features. Another is support for SCM_RIGHTS and SCM_CREDENTIALS (only for local connections; these are obviously not supported for remote connections, which are still possible, if implemented by the server and enabled by the user). And then, also 64-bit numbers in many places. But a lot of it is like the version 11 protool (without all of the extensions they have added), but with a few differences. (I don't really like much of the freedesktop stuff either; I work without a desktop environment, and programs should not assume the existence of one.) Maybe there is even a possibility to implement these different systems over each other when needed.

For example, with text rendering. Font path setting is not part of the core protocol (although there may be a XSET extension which can do this on some implementations), nor does the protocol specify font formats (PCF is recommended, but the protocol doesn't actually care so you can implement different formats if wanted). Characters are still sixteen bits, although to allow optional support for some more modern features, there are two flags you can specify when loading fonts: EnableLigatures and EnableAntialiasing. Servers that don't understand these flags can ignore them, and fonts that don't support them would also ignore them. EnableLigatures waives the requirement that a sequence of characters is the same as each of those characters put next to each other, and EnableAntialiasing waives the requirement that text is painted in the specified background and foreground colour only. (EnableLigatures is required to correctly render Unicode text with the X core text rendering system (if the server implements support for Unicode fonts, which is of course optional). Of course you are not required to use the core text rendering (previewer programs should not use it, for example), but if you do, and your program uses Unicode, then this will be needed. In effect, a surrogate pair is treated like a ligature at the protocol level (how it works in the actual implementation may differ, and is independent of the protocol).)

> But a lot of it is like the version 11 protool (without all of the extensions they have added),

It’s hard to tease out, but it sounds like you’re advocating for the state of the art drawing model of 1980 in 2019. I don’t think this is going to fly except for a very niche audience.

I've seen this sort of comment frequently: "it's 2019, why are we still doing n?", as if somehow it should be assumed we have grown out of it.

It's a completely unsubstantiative argument; its effect is to sweep under the rug any justification for the 'old way' of doing things.

No, it isn't unsubstantiative at all.

For one very big thing, hardware accelerated rendering didn't exist in 1980.

Also, no one really cares about network support anymore, because it's simpler and better to just do a screen share.

> For one very big thing, hardware accelerated rendering didn't exist in 1980.

Then why the hell isn't it being used by GTK/Cairo nor Qt in production code. Oh yes, there are OpenGL(-ES) backends in both. But by far and large they're doing all their rendering on the CPU and then blit over to the graphics system. This is BTW the main reason for Wayland coming to be in the first place: The observation that the X server has been "reduced to a blitting engine" (if your world view is so narrow to cover only GTK and Qt).

And then they're draining the baby with the bathwater… Wayland is how old now, 9 to 10 years, and it's still far from usable for production. IF you compare that with X11, after 10 years it didn't have just a barely working server and some example application. It was a thriving ecosystem with multiple desktop environments, toolkits, loads of production applications and you could just run them all arbitrarily in the same environment.

Only last Friday I was working on a custom windowing library (something in the same vein as GLUT, SDL or GLFW, however with a focus on "desktop" programs with traditional GUIs instead of things like games) and whenever I start working with the Wayland side of things it turns into a severe headache. Wayland is an actively developer hostile (and I'd even wager to say user hostile, too) ecosystem. For example, because in Wayland there's no concept of windows, and whatever a window is, is left to the compositor, you can't even properly implement something like dockable windows. The best hack I could come up with was via the drag'n'drop mechanism that Wayland then does specify.

IMHO Wayland is a prime example for the sunken cost fallacy hitting hard.

> Also, no one really cares about network support anymore, because it's simpler and better to just do a screen share.

Actually, some of us do make use of X11 network transparency on a regular basis. Running an X11 program on a remote CPU, but having its window appear on the screen of the machine I'm sitting in front of, is quite a useful feature. And one that I make use of quite regularly. And it is most definitely not the same as a 'screen share'.

Does Wayland break X-forwarding? That's a huge step backward, if so.


> Is Wayland network transparent / does it support remote rendering?

> No, that is outside the scope of Wayland. To support remote rendering you need to define a rendering API, which is something I've been very careful to avoid doing. The reason Wayland is so simple and feasible at all is that I'm sidestepping this big task and pushing it to the clients. It's an interesting challenge, a very big task and it's hard to get right, but essentially orthogonal to what Wayland tries to achieve.

Note that the next two paragraphs do discuss how network transparency could be built, by clients, on top of Wayland.

So it depends on how you define "does wayland break X-forwarding":

If defined as Wayland, the new server, yes. Because network transparency is not built in to Wayland the new server.

If defined as Wayland, the ecosystem, well, there appear to be ways to do it by adding it back in.

These ways already exist: [waypipe](https://gitlab.freedesktop.org/mstoeckl/waypipe/) is fairly complete already.

That's a bummer. ssh -X is a powerful utility.


ssh -X still works and wayland native is waypipe ssh (though one could probably wrap that into ssh -X to make it seamless).

> Also, no one really cares about network support anymore, because it's simpler and better to just do a screen share.

I care about network support for GUI applications.

I don't think _whole screen_ shares are either simpler or better.

waypipe works with single applications just fine. There are some rough edges but as far as I can tell it already works at least as well as remote X ever did.

Does it support using the client computer DPI like X11 does ? And running apps from a headless system ?

Seems like it https://mstoeckl.com/notes/gsoc/blog.html

Give it a try and let us know.

Does Wayland improve the remote desktop story at all? I sometimes drop to X11 forwarding because VNC and X2Go don't really work so well for me. If I think I'm going to need a remote desktop for a while, I'll reboot into Windows and load my Linux installation up as a raw disk VM in VMware Workstation and then rely on Windows's RDP for remote desktop. I'd love to simplify all this.

If anything Wayland makes network transparency worse because there's nothing like ssh -X for it that works out of the box. Another commenter mentioned waypipe, which is a start, but it'll likely be years before it achieves the required ubiquity.

I had good ux with realvnc, maybe novnc, ..

It's been a while, so maybe I'll give that shot again. My experience with VNC is that it's just laggy and really doesn't like it when I connect to a multi-display desktop with a single display laptop. Windows Remote Desktop adapts beautifully with virtually no lag, so I was hoping Wayland adopted something similar.

> Also, no one really cares about network support anymore, because it's simpler and better to just do a screen share.

[citation needed]

Let me guess, you live in a city?

Are you implying something about connection quality? Because in my experience X forwarding degrades very quickly when you lower connection quality, much faster than other options.

That depends on the toolkit. GTK first renders everything remotely and then transmits the final pixmap to the server. It also has multiple unecessary rountrips on every event which amplifies the lag even further.

On the other hand xlib toolkits like xathena widgets run blazingly fast even over modem style connections because all the drwaing happens server side and only a limited amount of drawing commands are transmitted over the network.

Yes, and I think Xaw is much better, but that is just one reason for such thing.

Xaw is not suitable for modern applications. Essential features like radio buttons or combo boxes are not present. Text input boxes support almost all Emacs command keys but none a typical desktop user would expect and they don't support Unicode. It's a mess.

No need to be rude.

I wasn't being rude (At least I don't think I was? I'm sorry. Tone is difficult to communicate sometimes and my brain is fried) I was just asking if they had any evidence to back up their claims?

If it wasn't intended, then I am the one who should apologize to you! I read it as snarky, but tone is notoriously hard to get across through text. (And I've never been particularly good at figuring it out myself.) My apologies. :-)

Also, no one really cares about network support anymore, because it's simpler and better to just do a screen share.

I've used that feature every single day for the last 20 years.

Yes, and it works way better with screen sharing for some content, which is most, nowadays.

Take for instance a big 3D game. It is much more bandwidth-efficient to compress the frames and send that over than to send the 3D models, textures and transformation matrices over the net. We still don't have PCIE Gen. 4 bandwidth for networking.

Okay, this is an extreme example. But most apps (just take Firefox as an example) send bitmaps over X forwarding anyways. I use Xpra for these, but waypipe should work a lot better, in theory (less round-trips, etc). Of course, it's better if the graphics toolkit is install at both ends and can render the stuff locally (which was the intent with X). AFAIK a few support that, I wonder if rdp doesn't specify something to negotiate its use on a per-client basis?

So you're advocating a protocol which doesn't work on low-end systems and deliberately breaks workflows.

I like how he made up the word "unsubstantiative" and you just rolled with it.

If a word accurately conveys meaning to another person, does it matter that it's made up? If you hadn't mentioned it (and I hadn't looked it up as a result), I would have had no idea it wasn't a "real" word.

Well, every word was, at some point, made up. Maybe we should herald the birth of this new word with great rejoicing.

No one made up any words, they just misspelled "unsubstantive" (understandably!).

Made up or misspelled, I just think it's interesting that the error was contagious.

Are you actually familiar with the drawing model of core X?? It is completely obsolete and does not support acceleration of virtually any 2D or 3D rendering construct we take for granted for the past 30 years.

The GP was suggesting “without extensions”. Good luck with that.

I am familiar, and I think that it is mostly good; the only thing missing is direct rendering (which would be optional). (And I did not mean entirely without extensions, just to remove most of the stuff.)

(I also think modern fonts don't look nice; I want to use bitmap fonts on the screen!)

[This paragraph used to mention Vulkan, but now I think that is not a good idea and DRI is better. See the replies to this message for details.]

Also, on server implementations that support SCM_RIGHTS (the core protocol would have some way to check), it would be possible to pass a file descriptor opened with shm_open() to the client and share memory that way, if the client and server are on the same computer. In this way, direct rendering is more efficient than it is with the X11 core protocol.

I said a lot like the version 11 core protocol, not exactly like it; in what I am thinking there would still be many differences, although many things are similar (because I think much of it is good).

Vulkan really shouldn't be a protocol. What you really want is DRI3/Present extensions, which are fine. But then you still have issues with window resizing and reconfiguration, and the difficulties with COMPOSITE... basically you're asking for Wayland by the end.

Like I said, I don't know much about it. You are probably correct; it shouldn't be with Vulkan. But I think there are some problems with Wayland, and many things in the X protocol is good (although there are also problems with it).

OK, I looked, and I think you are right; DRI is better. It would work with what my ideas are (and I think SCM_RIGHTS would be used for this purpose too). Handling resize though would just be you can continue to render a picture of the old size and it will be cropped (or if made larger, the X window background will be displayed in the part outside of the DRI picture), or else it may handle the resize event to close the DRI handle and open a new one with the new size if needed.

The protocol would still be independent of the implementation, though. But because DRI involves system-dependent features, this means that the use of DRI is not fully defined in the core protocol. However, that shouldn't be a problem.

SCM_RIGHTS is already used for FD passing for DRI3. Your thoughts on shm_open are already part of the X SHM extension, which has been around for over 25 years now.

Lots of people have ideas for an "X12" that turns out to be stuff already supported by the X11 protocol. Not enough people know about the true problems with X11, or have ever asked us Linux developers think about what needs fixing (hi, I'm a long-time Linux graphics contributor and co-wrote a large part of the Wayland spec). X11 extensions have not been a major problem in 25 years.

For what it's worth: thank you.

Whenever I find myself reading about X11's history my conclusion is always that you guys are heroes. A small group of people keeping an ancient behemoth alive, dealing with plenty of legacy of the kind that drives people to quit jobs.

And when you finally decide you've had enough and go for a rewrite... people shit on you and everyone suddenly knows better.

Again: thank you!

> Lots of people have ideas for an "X12" that turns out to be stuff already supported by the X11 protocol.

That is true, although many of them are messy in X11. One of these is that the protocol and implementation are tied together more than they should be (one of these problems is server configuration requests, which I think do not belong there). Some of my ideas are:

- Timestamps. The way timestamps work in X11 is messy. A better way is 64-bit timestamps with an unspecified rate; what is specified is that timestamps are monotonic; i.e. if any two requests/responses/events use timestamps, the later one is guaranteed to have a larger number as its timestamp. (However, timestamps might not always increase when the server is grabbed; this is implementation-dependent.)

- Font path configuration. This should not be part of the core protocol; it improperly exposes the directory structure and the font formats. (I do suggest a XSET extension, which is optional, and what settings they set and how are implementation-dependent; the "xset" command would pass its arguments (except -display) to the server, which returns the text which will be the response. This makes it completely general, but a separate specification would provide guidelines for consistency, although not strictly required.)

- Screen saver configuration. I would have the core protocol has only two things dealing with screen savers: the screen saver event, and the suppress screen saver flag in window attributes. If the suppress screen saver flag is set on any mapped window, then the server should suppress the screen saver. Other than that, how the screen saver is implemented (if at all) and what it does is implementation-dependent, and probably configurable by the user.

- Mouse cursor shapes. My proposition allows the server to substitute its own full colour cursor of arbitrary size and opacity (and maybe even animation) when a client requests a font-based cursor shape (either the standard X cursor font, or some others, depending on what the implementation supports), unless the user disables this feature. Whether or not this is implemented is implementation-dependent, and it is completely independent of the protocol. (Whether or not you get the same image as you would by loading the cursor font with EnableAntialiasing and rendering that character, is also implementation-dependent.) (Substituting cursor shapes is probably not a feature I would use (I like the standard monochrome cursors), but some users will like it, especially those with very high resolution displays.)

- Bells. The core bell request should instead be like XkbBell() (although none of its variants (such as XkbDeviceBell and XkbForceBell etc) are possible). The only thing the server is guaranteed to do is to send a bell event if any clients care; what else it might or might not do is implementation-dependent and would probaly be configurable by the user to some extend. (For example, it may be configurable to suppress the audible bell if the bell event is requested by any client.)

- Allow different screens to have their own keyboard, or to share. Same is true of the mouse, and there may even be more than one mouse per screen (this is to support touch-screens; I don't like touch screens, but some people like it). Clients that don't care can ignore the field which specifies which mouse the event is.

- Use only one endianness rather than two in the protocol, for simplicity. The first byte is "X"; this also enables the possibility (but not the requirement) that a server implementation might support both X11 and X12 clients using the same socket, since you can distinguish between them.

- Some additional standard mouse cursor shapes (in addition to the ones in X11). The cursor font and "Fixed" font are the two "highly recommended" fonts to include in the system. (Some of my suggested new standard cursor shapes include: XC_arrow_plus, XC_arrow_minus, XC_magnify, XC_magnify_plus, XC_magnify_minus, XC_chaos, XC_invisible, XC_stop, XC_no_smoking, XC_xterm_lazy)

- The -retro option should be the default.

Half the stuff in here is already possible in X11. The rest make very little sense.

> - Timestamps. The way timestamps work in X11 is messy.

Well, yeah. Distributed timekeeping is messy. Clients can already retrieve the server's timestamp and keep a rough approximation of what's going on (I wrote a server time estimator for GNOME/mutter). Not sure how you'd fix it. Wayland replaced timestamps with serials.

> - Font path configuration.

Are you familiar with XSETTINGS? It was supported for many years in the toolkits, and got basically no traction.

> - Screen saver configuration. I would have the core protocol has only two things dealing with screen savers: the screen saver event, and the suppress screen saver flag in window attributes.

If you want to propose this as a specification, you're more than welcome to do so -- some sort of EWMH hint like _NET_WM_INHIBIT_SUSPEND or similar. Write up a spec and mail it to wm-spec-list. But you'll probably be told about to use the existing screensaver inhibit spec instead:


> - Mouse cursor shapes

A client can already arbitrarily get and set the cursor image for a given cursor name with the XFixes extension, including setting RGBA32 cursor images.

> - Allow different screens to have their own keyboard, or to share.

XInput 2 supports multi-seat just fine.

> - The -retro option should be the default.

Not sure why this requires a whole new protocol version, just compile your X server with it on by default, or configure your display manager to set it.

You seem to be misunderstanding many of my points. (Maybe that is because I am unclear.)

> A client can already arbitrarily get and set the cursor image for a given cursor name...

That is not what I am suggesting at all. My suggestion is: The client only specifies a monochrome cursor, possibly from a font; the server MAY substitute a (possibly animated) RGBA32 (or other colour type) image (for a font-based cursor) IF the user has enabled that feature in the server configuration file.

> Not sure why this requires a whole new protocol version...

Indeed, that is independent of the protocol. I just think it is more useful, is all.

You do need real-time time stamps for some parts of a display protocol, since clients should be able to accurately determine when past frames were displayed, and accurately request display times for future frames (subject to the potential for failure because OS scheduling is not hard real-time).

This is especially true for modern displays which have some limited support for variable refresh rates.

OK, that is a valid point, but such timestamps are not global and are a separate function in the protocol than what the other timestamps are used for.

Some people mention how Wayland does not allow access to other windows from other clients, and is sometimes good and bad. In my X12 idea, this is independent of the protocol, and the protocol doesn't care. Restricted access may be implemented either by the X server itself or by some proxy, and either way the protocol doesn't care and the client doesn't care. What the restrictions are may also be implementation-dependent and is preferably configurable by the user. The client would send a SCM_CREDENTIALS message to the server; if the server doesn't understand it then it will just ignore it and allow (or deny) access anyways. (It isn't necessarily only other windows that you may restrict access to; you might also sandbox selections in a proxy too, if you want to.) (Note that an implementation which cannot be configured for unrestricted access technically is not compliant with the specification; although merely allowing it to be configured with restrictions does not violate the specification.)

Before I touch on Wayland and X, a brief detour.

Let's assume Mozilla finishes servo (their browser in Rust). Let's also assume:

- It's faster than Firefox.

- It's safer than every other browser out there.

How do they get people to use it? Those two are not enough. To the user:

- It's different.

- Firefox feels plenty safe.

This is a real problem and Mozilla faces it now. As a result, they're focusing on what they can do with servo which no browser has done before, like superb VR support. In short, they need features to gain users and they recognize that. Marginal gains are not enough to encourage an entire product switch.

Back to Wayland. Aside from the lack of screen tearing, what can we all agree are big wins for the user? I haven't tried it yet (for this reason), but everything I've read suggests that it could be safer, it could be faster, it could bring some more new features, but mostly it's the same shit.

The masses, and this definitely includes the GNU/Linux using masses, need more than the same shit to change because change is tough. They are going to need something killer from Wayland, or another competitor, before they give up on X.

Servo is not a browser, it is a browser engine. To quote the Mozilla Research page about it: "Like WebKit, the Servo project is not a complete browser. It is an experimental project that delivers components that can load, run, and display web sites and applications." Given that, it doesn't make sense to talk about users "…switching from Firefox to Servo."

c.f. https://research.mozilla.org/servo-engines/

I believe Mozilla's strategy is to develop new features in Rust on Servo, and then swap them out into Firefox as they go. That way users don't need to change, since they realized that users never would.

For instance, they wrote WebRender for Servo and ported it to Firefox

I guess it depends on the user, but Wayland is not the same shit for me. The level of jank and screen tearing in X is unacceptable.

I think it’s amusing that that opinion is so common given how bad X is. Mac OS X was developed in the nineties and has a jank-free hardware-accelerated compositor. Windows vista also had one, as well as every windows version after that.

I am certain that I’m not the only end user who notices the difference between smooth animations on those other OSs and what you see on X.

Wayland may be incomplete but it’s obvious that it solves some of these issues.

X is very smooth for me. No tearing or other issues.

It's usually a driver configuration issue if you have tearing.

That is bad news, I do not want screen tearing and I have zero interest in ever fixing driver configurations.

Most people don’t care about animation, but getting their work done. Still, I’m rooting for W.

Scrolling, moving/resizing windows, switching windows/tabs.

None of these need to be animated and even if they are not animated they can be disconcertingly janky under X. Tearing is even worse/more obvious if screens are rotated into a portrait orientation.

I have two 4k monitors with Intel gfx one in portrait, and have no issues unless I run vlc full screen and there is a lot of movement in the scene. The other 99% of the time it just isn’t a problem. I’m only reminded it exists in threads like this.

> Most people don’t care about animation

Then why does every popular desktop/mobile OS/app have UI animations?

Because those are technical gimmicks and nerds are very susceptible to fall for gimmicks. Users? They care about consistency and predictable interfaces that don't change every week. They couldn't care less if a toolkit looks dated. Motif, CDE, Plastique, XP-Style, Aqua, Quartz, Material, it all looks the same to them. Tearing? Users don't see it, because they don't have the fine tuned sensibilities to what technology should do, and how it actually behaves.

Playing a movie produces moving pictures on a monitor? Great!

Tearing? Without telling them, they'll hardly ever notice it.

Mobile has way more of what you call "Users" than what you call "nerds" and they all absolutely love fluid animated UIs and spend literally hours a day swiping away at them.

Users might not consciously call out screen tearing but they absolutely can tell when something runs smoothly. Just look at the reviews for iPhone vs Android devices in the early days when Android felt more like X11 with jank, frame drops and redraw glitches.

Then look how much time and money year on year Google spent fighting that jank. Money well spent.

> Just look at the reviews for iPhone vs Android devices in the early days when Android felt more like X11 with jank, frame drops and redraw glitches.

And the irony is, that early iOS used animations to hide latencies when changing application state. These animations were the cause, why it was considered so smooth.

Yeah. IMO once you see screen-tearing you cannot unsee it.

Then having a tear-free desktop is going to be something you strive for.

I upgraded every part of my setup which I needed to, just in order to be able to run Wayland (via sway), and I have to say I absolutely think it's worth it.

This is kind the objective I think. Wayland in most cases (Gnome and KDE) is simply an implementation detail, and Gnome and KDE runs in both X11 and Wayland.

The end result is, hopefully, less bugs, more security and more performance, however most people wouldn't care anyway (and I think most people doesn't care, for example Fedora uses Wayland by default).

For us using window managers like i3wm the history is different. However in i3wm I am very close to the X11 so there is almost no abstraction, this is why the transition is more painful.

Nobody replying to you seems to catch on that i3 is not the only environment other than KDE and Gnome.

i3 users have sway. Good for them. Now what about every other window manager?

It's worse than that... WM's that people care about will be ported/rewritten (I know I will probably do one). But the "wm" now needs to have much more infrastructure functionality which doesn't really need to be different.

A lot of that is abstracted out od Sway, which aiui is supposed to help alleviate that issue: https://github.com/swaywm/wlroots

yeah, it's weird, a lot of people seem to think Wayland is some back end that you switch out like you would a SQL database. there were people on this site saying switching would take a weekend.

the xmonad dev for example has stated it's flatly not possible to "refactor" the project to use wayland... which means i'm not using wayland.

Indeed; I've used wmii for around 10 years now, and its developers have openly stated they will never support Wayland.

wmii has not been developed in the last five years, no wonder it's not going to be ported.

I use some other WMs that aren't actively developed anymore either, for longer than 5 years. Some software doesn't need constant rewrites.

They might want to consider revising that decision because X is going away. If they don't, wmii will go away with it.

X has been going away for longer that the careers of most people on this site.

At this point maybe even longer than a substantial chunk has been alive.

Says who? X.org will be supported for at least the next 10 years as part of RHEL 8. Not to mention the possibility that someone other than Red Hat could continue supporting it after that time.

It'll be in "hard maintenance mode" meaning bug/security fixes only. Anything new and interesting in the graphics space will be Wayland only. I also believe they intend to deprecate and then remove Xwayland from the graphics stack, at least in releases newer than some flag day in the near future, as Xorg itself is only being maintained for the sake of legacy applications.

I can't help but think that this X deprecation talk from RH is just some chest beating to rally the troops behind Wayland, same as we used to hear from Ubuntu about Mir.

That's how you get people to use your stuff when they would otherwise dig in their heels because "what I have is fine", "muh Unix philosophy", etc. It worked for systemd.

Excuse me sir or madam. Firstly, X11 even in its heyday was often criticized as not being very Unix-philsophy-ish. But I don't think you make a very sophisticated argument when you mock criticism by imitating flawed speech.

I'll continue to use X because I don't find it very broken. That's a problem for you?

I do however have a problem when open source introduces dependencies on buggy software written by aggressive narcissists, so yeah, I'm in the anti-systemd camp, or, put myself there when it started hanging a bunch of my Debian machines at boot when they made the switch. Pulseaudio was similarly garbage.

"What I have is fine" is a perfectly valid reason not to go changing things, IMO.

Ok, this is all true, but none of it is the same as "X is going away".

Most DEs are either already ported to Wayland (Cinnamon, Enlightment), have a porting in progress or plan to port it eventually.

For WMs, it is more uncommon since they're so coupled with X11 specifics that this makes porting harder. However I don't really think it is a problem, if you want to continue using your WM it is fine, it is not that X11 is going away either way.

It isn't just window managers, there are also applications that are close to X11, and many of these don't even work in XWayland, because they break wayland's security model. For example screen shot and screen sharing apps. And even if the developers took the large amount of work to refactor to work with wayland, there isn't any kind of standard for privileged access in wayland, so they would need to use different protocols to implement the functionality for each compositor.

I realize no one reads TFA, but TFA is very relevant since it's all about i3 and sway...

I don't know why people assumed that I never heard or used Sway (or that I didn't read the article). I did all three, and this is why I am saying that the transition from i3wm to Sway is kind painful (ok, my fault for not citing Sway in my phrase, however I did think it was implicit that I used it).

I have tons of scripts that does specific things and are heavily coupled on how X11 works. I need to port them to Sway first.

I know; I replied to the parent because I couldn't reply to multiple comments about sway at once. Sorry for the confusion

Have you tried sway? It's about as close to a drop-in replacement to i3 as we'll get, I think, and my experience with it has been pretty positive.


it wasn't exactly a drop-in replacement for me, but with a bit of modification I was overall pretty pleased with it, and subjectively it did feel faster.

Unsure if you've seen it before, but I've been using sway [0] as a Wayland-based replacement for i3. Switching the configs took about 15 minutes (and could probably be replaced by a few sed commands). It's been very nice to use all around--snappy, no major issues even with multiple monitors, etc.

[0]: https://github.com/swaywm/sway

> Let's assume Mozilla finishes servo (their browser in Rust). Let's also assume:

> - It's faster than Firefox.

> - It's safer than every other browser out there.

> How do they get people to use it > Those two are not enough. To the user

If Mozilla wanted to take the route of switching people from Firefox to a new browser, they would presumably do it by gradually stopping development of Firefox. This is basically the strategy that Microsoft is taking with Edge, with the obvious difference being that it's a browser that comes pre-installed on a common OS, although I'm not convinced that the strategy would need to be fundamentally different.

That being said, as sibling responses have noted, I think the strategy that Mozilla has been taking has been to just move over components into Firefox itself when they're ready. This has already been done with a few important components, and it seems to be working fairly well.

The masses do not use X directly, they use GTK+ and QT. And those moved to Wayland. Window/desktop managers moved (e.g. Gnome) or have been rewritten (e.g. i3 -> sway). Looks like a success to me (marketing side). Frankly, by your writing it looks like Wayland had been proposed today and needs to make a dent.

Most desktop Linux users aren't using Wayland yet. In fact insofar as sway a good chunk of hardware that is well supported under Linux will never work in sway.

For it to take over it must be shipped by default by all major distros and people need to have time to upgrade after it becomes the default.

This means switching to Debian 10+, any recent Fedora, Ubuntu 20.04+.

Based on this one would expect the majority of users to be using it by 2025

Sway isn't i3 rewritten it's not even the same developers. I3wm is its own active project with their own developers that will continue indefinitely.

I agree with everything you've said. My point was about who needs to be convinced to use Wayland (not the end users). People will naturally get Wayland when they update their distribution and yes, it will take years.

> Aside from the lack of screen tearing, what can we all agree are big wins for the user?

From what I remember, Wayland makes it easier to mix 4K and HD displays without pain.

From my narrow perspective, Wayland's key feature/bug is that it may break fluxbox, which I have used for >17 yr.

As long as it implements X, I don't mind, but my understanding is that the change is a breaking one.

Mine are 1) Xmodmap support/migration 2) breaking imagemagick's import (screenshotting) making my shortcut for OCR'ing text on the screen break.

It seems Wayland isn't going to be the default in Ubuntu 20.04 LTS, but if it wasn't for the risk of Wayland I would be on the non-LTS releases. At least Guix exists now so staying on LTS (released every 2 years) isn't that bothersome in terms of easily avoiding out-of-date software.

> my shortcut for OCR'ing text on the screen

Would you be willing to share that? Pretty please?

I don't have the exact command at hand, but it just uses tesseract. Something like "import - | tesseract <whatever options for language and page format> | xclip". The accuracy is not amazing by any means.

Great question to be asking. I agree users are indifferent, but there are two ways in which this applies:

(1) They aren't going to go out of their way to switch from X11 to Wayland. Many users don't even know (or care) what those two things are. Or they do but they don't see the required effort as justified.

(2) Users also aren't going to out of their way to change the default that their Linux distribution supplies. Not unless there are issues that are bad enough to warrant expending that effort. If it defaults to X11, they'll use X11. If it defaults to Wayland, they'll use Wayland.

The major risk I see to Wayland adoption is if distros play it wrong and default to Wayland before it's ready for prime time. If that happens, then users will get a bad taste in their mouth, and their indifference will get replaced with a preference against Wayland. And it will be hard to erase that preference because even if you fix all the issues, they will still remember that time when they tried it and it caused them problems.

Depends also on the type of distribution audience.

Fedora has been defaulting to Wayland for several releases now. RHEL 8 also defaults to Wayland.

However, these distributions are probably not used by users, who consider their spacebar heating critical to their workflow.

> How do they get people to use it?

call it Firefox v100 and automatically update

I think WebRender (the FF-integrated name of Servo) didn't improve Firefox VR support in any big way. VR was pretty good in Firefox already and WebRender mostly impacts rendering of HTML content like fonts, images, and CSS. The lower level tech that VR depends heavily on is WebGL. The next big jump in that department looks to be WebGPU but that's still in early stages.

Important to note that Sway WM is not Wayland as a whole; I am a happy Sway user, but unfortunately it is not 100% at parity with the experience you will get with GNOME. However, you can always contribute if you have time; it’s fun and the codebase is very nice to work with. You don’t even have to switch to Sway to work on it. (If you are skilled at debugging and use graphics tablets we could use some help trying to figure out some crashing bugs with tablets...)

Regarding screen capture: wl_roots actually supports this, but WebRTC doesn’t support the wl_roots protocol for it. I’ve been told Pipewire should solve this problem eventually.

Edit: accidentally wrote Waypipe instead of Pipewire. (Waypipe is cool too, though.)

> The fact is, Wayland is the only viable X11 successor

There's at least one other option in the running, Arcan: https://arcan-fe.com/

I'm a big fan of Arcan (moreso than I am of Wayland), but it's nowhere near as far along as Wayland and I think at this point is still the product of just one person. I think it's fair to call Wayland viable, but I don't think I would say that of Arcan until it's:

a) generally usable as a daily driver; and

b) maintained by enough people that there isn't a single point of failure.

Right now I'm still on X.

Cool, Arcan looks a lot more viable for me than wayland

Guidelines | FAQ | Support | API | Security | Lists | Bookmarklet | Legal | Apply to YC | Contact