Interview: Thomas Voß of Mir
linuxvoice.com
linuxvoice.com
A major reason computers are so unreliable and un-fun to use is because software is now a massive pile of overcomplication. When it comes to a core thing like a window system, that many programs will interface with, simplicity should be a high design priority. Because every bit of complication that goes into the window system propagates. EVERY SINGLE PROGRAM becomes more complicated. Every piece of software becomes harder to develop. The toll in man-years becomes HUGE very quickly. Yet for some reason people don't learn. I think there is some Stockholm Syndrome happening: programmers can't even imagine how much more they would get done if the underlying systems were as simple, reasonable and solid as they should be."
I'm curious about HN's opinion on this.
Regardless, the answer is "everything is simple when you imagine a single use-case", which as far as I know is what he is doing. I would suggest that people with experience building multi-use-case display servers would know best, those building single-use-case display servers second best, and everybody else is essentially working on guesswork and imagination.
That said, if he wants to go ahead and prove us all wrong by writing a small, elegant display server which fulfils everybody's needs without compromise, I wish him luck and can't wait to start using it :)
I mean, it's a server. It's a singleton process, which many other processes much communicate with. What other widely supported ICP technique do you think is better for this job, and would make it simpler to develop against?
Also he doesn't seem to understand the design goals nor the complexity of what Mir is trying to accomplish. Therefore I don't give it much weight.
Seriously?
I would say that in all the software I have ever written, some part of it sucked. It's actually quite upsetting if I think too hard about it, I wish it wasn't that way. This is mainly because of four reasons (in no particular order):
1. I didn't have time to really finish it
2. I didn't test it thoroughly enough
3. There was some part of the underlying language or framework that I was unaware of that behaves unexpectedly (e.g. the framework encodes output, the int in the language can only handle up to 16384, or you can add a general error catcher, but if you invoke a web method in a particular way, the framework 'helpfully' circumvents the error handler, leading to weird bug that you never hear about)
4. I was using a new language/framework that I didn't know quite how to use. It's not just inexperience, quite often the examples for new frameworks/languages turn out to be bad practices or inefficient ways of doing things in the long run.
Even if you're a good programmer and try and plan ahead, quite often you're writing something you don't quite understand until you actually write it and as you go you make, in hindsight, a couple of poor decisions. It's often a big job to go back and change those poor decisions, and even if you did it might not completely fix the problem. Some remnants of the old design stick around like a bad smell.
And there's also bad design decisions that don't come out until the program is out in the wild, you might have thought the purpose of your wheel was to make bicycles, but in fact only a couple of neckbeards make bicycles, everyone else is making cars out of them and they're completely the wrong design.
And worse, only the neckbeards are on the mailing list so you get a disproportionate amount of feedback from a vocal minority and don't even realise it's not really suitable.
And on top of that, some software suffers from the first mover advantage though it's badly written and then gets almost, but not quite, abandoned, so no-one ever moves to the much better alternatives.
And then all those little warts and mistakes, as you say, propagate.
I have screamed at my screen in rage at how stupid some programmer has been while designing a program that almost does what I want but quite spectacularly (or worse silently) fails at some key part. But they probably tried hard to make it good.
In truth, writing excellent software is still the domain of a very elite few, the rest of us write ok, but very brittle, software.
EDIT: Added reason 4
I'm sure almost everyone here has at some point looked at a task an said 'Oh that's easy, I'll do it in a week!', and then realised that it's a rabbit warren of peculiar instances, customer needs, and unique problems.
It's like people who think Time is easy, but they forgot timezones, and then they write timezones but they forgot half hour timezones, or quarter hour timezones, or daylight savings time, or leap years, or different calendars, or the fact that calendars change over time, over place, that timezones change, are adapted, etc.
Well, then this gentleman should get off his high horse.
It's important to note that there's a big distinction between Wayland and Mir here. Mir provides an ABI; a protocol over sockets is an implementation detail.
OTOH, Wayland is defined as a protocol that runs over a socket.
Back to the interview: is there actually an answer there to "what is is that Mir does, that Wayland doesn't?". Apart from the protocol versus API thing, and a claim that protocols cannot be versioned easily (PDF files seem a counterexample to me), I can't find it.
He's generally right about over-complication, but he either lacks the understanding of just how much X hits his bullet points for bad software; or he wants to stick with the current ball of mud rather than add the complexity of migrating to something that will eventually be simpler (hopefully).
I assume the former, but the later is an arguable position I happen to disagree with.
I actually did a few more tweets after this describing what I think makes sense.
It was good perspective, and I look forward to seeing where both Mir and Wayland end up.
I have this feeling one day we'll look back at this and laugh. "Do you remember when they all tried to shove the same interface on all devices? What were they thinking?!"
A few apps -- on Android anyway -- have a floating mode, where they occupy some space over other apps, always on top. This is another thing tiling window managers do.
> at the heart of convergence lies the fact that you want to scale across different form factors
I have this feeling one day we'll look back at this and laugh. "Do you remember when they all tried to shove the same interface on all devices? What were they thinking?!"
Umm but even phones have HD displays and 1GHz 64bit processors. Why should that be any different that a desktop system with a 5K display these days?
What we've been lacking was c) people who can articulate a pressingly urgent use case where a new display server is on the critical path, AND have the resources to code it up. Canonical is, as far as I know, the first in that category.
I agree with the supposition that, IF Wayland/Westland represented a suitable head start on meeting the goals that Canonical has with Mir, that Canonical would do well to invest its resources there. Outside of Canonical, there has been a lot of debate as to whether the "Wayland/Westland is the right direction for Canonical" supposition is true.
At the end, I tend to give more weight Canonical's opinion in this matter. They are, after all, urgently developing a project in which a new display server is on the critical path. The risk in foregoing the head start offered by Wayland/Westland is primarily on them.
From the vantage point of this casual observer, Mir has lit a fire for the Wayland/Westland project. That's great! If unifying against a common threat is what pushes the project along at a faster rate, that's okay. But I still tend to think that Canonical is going to win this race by virtue of them having something to strive for on the other side of building a display server.
There are few open source projects where even one or two talented, dedicated, full-time developers would not represent a substantial increase in labor. There was just an article posted a day or two ago talking about how people would be surprised if they knew how small some teams at Apple really were.
This isn't to disparage F/OSS development. I still believe in the development model more than others. I just think we need to be realistic about project resources. Open source isn't magic in this regard.
mir$ bzr log --include-merged | grep committer: | sed 's#.*<##' | sort -u | wc -l
59
vs. wayland$ git log --format='%aN' | sort -u | wc -l
105
(And there's some messiness in the bzr output that inflates the mir figure somewhat.)Android ...
Why are we not using SurfaceFlinger on Linux? It has, like, a billion installations.
EDIT: I found this page, which at least presents some reasoning for why a new system rather than SurfaceFlinger: http://kdubois.net/?p=1815
In my case, I found the Wayland concept very compelling from the beginning. I had thought X had become bloated and needed a replacement. The Wayland approach seemed to be a huge simplification and in need of developers to bring it home. From my POV it looked like Mir happened because Canonical agreed about X and thought Wayland looked like a nice idea but they had slightly different ideas and forked for reasons I never really understood. After reading this interview I still don't understand. A fork without clear purpose can seem like a waste of resources and market fragmentation and that will lead to some resentment. I suspect some of it is related to their desire to support closed-source blob drivers and I can understand that, but I also had enough of that world and don't want anyone to support it. In the end, I personally don't hate Mir, but I still don't understand why they're doing it. Either way I look forward to running a simplified desktop without X.
BTW, I really like your X11-VT100 analogy.
To create a new window and draw something in it, you would need both.
Wayland is not meant to be doing very much. Its main job is to give programs the buffers they need.
> linuxvoice.com Server: 8.8.8.8 Address: 8.8.8.8#53
Non-authoritative answer: Name: linuxvoice.com Address: 104.28.6.18 Name: linuxvoice.com Address: 104.28.7.18 > www.linuxvoice.com Server: 8.8.8.8 Address: 8.8.8.8#53
Non-authoritative answer: * Can't find www.linuxvoice.com: No answer
We decided to switch to cloudflare to mitigate some of the load. This requires changing DNS settings, and it seems that for some people, there's been a gap when they haven't been able to access the page. This is of course a little unfortunate. However, it does mean that other people can actually access the page rather than just getting stuck loading.
It's all a bit hectic here at the moment. It's possible there's some other problems that I haven't yet fully discovered.
The fact is that the design of X is archaic and not well designed for the needs of the modern era. The benefit to end users is that rich multimedia software becomes much easier to develop for Linux so they get more of it.
I'd like to use keycodes > 255 please.
Wayland has crippled customizability compared to X11. This customization is much more important to the user because, as you said, the improvements of Wayland are not relevant to the user.
Bad sysadmin probably put xhost + in the main xinitrc.
Common rookie mistake, but don't blame X for that weakness.
It also wasn't anything malicious, just a prank, when you run xeyes on someone else's terminal. They would laugh a little and then continue with their lifes. Nothing serious, requiring sysadmining.
Oh and another application: Mapping a gamepad to keyboard and mouse for games that don't otherwise support gamepads. (See http://qjoypad.sourceforge.net/ and my fork with additional features https://github.com/panzi/qjoypad)
If I can't use something like QJoyPad under Wayland/MIR I won't use Wayland/MIR.
This is also a security problem. If I have the means to run a program (downloaded from the internet; don't fully trust) in a sandbox that restricts its filesystem access, it'd be nice to also not allow it to control my whole GUI session.
If it's perfectly fine, then you don't have to upgrade.