> But from this comment it actually does sound like you didn't look at the GTK4 codebase.
I gave it a cursory glance, but indeed I didn't look at it much in depth, because all the big GTK-based applications don't yet run on it, so it was a moot point.
> Implementing the full X11 protocol with all the extensions and all the quirks in the server is much, more more than 100k lines.
Sure, but I have already stated, multiple times, that we neither need nor want to implement all the extensions and quirks.
> you don't have to do anything in Cairo or Pango because those support client side rendering and have supported that for a really long time now.
GDK's backends presume Cairo has support for native "surfaces"; e.g. the GDK X11 backend uses Cairo's Xlib interfacing layer to draw stuff to the screen. I didn't look too closely, but the other backends seem to make similar usages on Windows and macOS. So I would have probably had to either revive the BeOS interfacing code in Cairo, or would have had to do lots of software copies in a Haiku backend of GDK in lieu of a Cairo interface.
Pango indeed doesn't deal with native "surfaces", so that wouldn't be a problem.
> I assume you were basing this analysis off an ancient Haiku port or something that was trying to do things the old way?
Nope. There may have been some work on GTK 1 for BeOS or something like that, I can't recall, but I didn't go looking for it, much less analyze it.
> The GDK X11 backend includes support for a bunch of extensions that you didn't implement.
For now. Some of those extensions (like XSync and XInput2) are probably worth implementing. This also ignores all the other X11-related code scattered throughout the GTK/GDK trees, anyway.
> A native Haiku backend would probably be even shorter if you dropped all the optional features and only implemented the bare minimum
Okay, but that's again GTK4, and totally ignores GTK2 and GTK3 which quite a lot of applications still use, and the entire point of a GTK port is to run GTK applications. Not much use in porting a version of GTK that very little supports.
> You can't avoid this by implementing Xlib or doing any other approach.
No, but I can decide that the GTK codebase is so far outside the realm of my and the other Haiku developer's programming tastes that we'd quite literally rather write an X11 implementation than deal with it. Even the minimal time I had to spend with the GTK code in a debugger while fixing incompatibilities in Xlibe was more than enough, thanks.
Furthermore, GTK is entirely C while Haiku's APIs are C++. Is GTK ever going to accept a C++ backend upstream? Almost certainly not. So if I am going to have to maintain this totally outside GTK, forever, why not do it in a way that's much more resistant to GTK changes?
And, again, there's more than just GTK here. Someone took Xlibe and apparently got some audio plugins from Linux (LV2, I think) to work with minimal code changes.
> Well actually those will still break with your approach if they link against the other libraries or depend on some X server functionality.
Again: which other libraries? You mean like Xinerama or something? If something actually needs Xinerama, or any of those other libraries, then we can implement those, too. (So far, those have turned out to be entirely optional, I haven't yet tried to build something that couldn't just disable those features.)
> Well it's true, they were removed in GTK4, the entire rendering pipeline was rewritten.
Okay. What about input events? Does GTK4 still have keysym values that map 1:1 to X11 keysyms, or did they break with that?
> Actually it took years because the protocol was still being worked on while the backend was being developed.
It's my recollection that Qt had a working Wayland backend long before GTK did. Am I incorrect?
> You could get it to work but it's not going to be feasible without also hacking the mesa implementation
I don't intend to hack the Mesa implementation of GLX, I'd just implement GLX on top of the Haiku OpenGL APIs directly (which use Mesa internally but that's an implementation detail.)
> IMO this is not a good way to spend your time, please don't waste your donors' money on this.
GLX is unimportant enough that I don't intend to spend time on it at present anyway. When/if there's a demand for it, I'll take a stab at it. But I've worked with GLX before, and I don't think it'll be nearly as much a challenge as you seem to think it will be.
> If all you care about is GIMP then I would still say a better approach is to do a native backend because then you can also just skip everything that isn't used in GIMP.
There's also Inkscape, wxGTK, and plenty of other GTK applications besides GIMP. Not to mention X11-only applications like AzPainter, etc. So it's not "just GIMP," but if whatever GTK version I'm porting, GIMP doesn't support, that's a good argument I picked the wrong GTK version.
> Well no, this is also wrong, to get the full X compatibility (including network support) you will still need to port the full X server.
Yeah, but I wasn't talking about that in the section you replied to, I was talking about things like Tk or AzPainter or the like which have X11/Xlib backends, and so by implementing this we also get those, not just GTK.
> And if someone ever wants that, basically all the work you did is going to be a waste and will have to be thrown out because then you're right back where you started with needing an X server.
Not if you port the X server using this, via Xnest! Which, like I mentioned above, I did get to compile and attempt to start but it crashed, and I decided I wasn't going to spend more than five minutes poking at it in a debugger because I didn't care enough about having X11 forwarding. If someone else wants to, then I imagine it will be much easier to patch the X server and Xlibe than writing a totally new X11 server backend for Haiku.
> This is not a new revelation, Linux distros have been through all these conversations before, several times over the last 30 years in fact.
I am quite aware, I've read some (or even many) of them.
> I just wish other OSes would stop repeating the bad mistakes made by Linux.
Hear, hear!
But this isn't one of those. As you pointed out yourself, nobody else did this before successfully; and it seems we've now already been more successful than Linux. Isn't that evidence that, just maybe, we aren't repeating a mistake here?
> No this would be the other libraries that implement protocol extensions.
As noted above, either most applications treat those as optional, or we can just implement them, too (Xft for instance would be pretty easy.)
> You're being unnecessarily combative about this, please stop.
I'm not sure why I couldn't say the same about you.
My offer still stands: tell me the name of some X11 application you think I can't run under this (obviously stuff like "window managers" don't count), and I'll make a pass at it and we'll see what happens.
> I actually wish I was wrong about this, and it was as easy as you're suggesting, but experience says it's not
I didn't anywhere say it was "easy." I'm drawing on many years of experience with both the Haiku APIs, the X11/Xlib APIs, graphics programming and widget toolkits in general, and even with that there's a lot of good old trial and error.
> But anyway, according to what you said, right now it's any application that requires XInput or XInput2
Quite literally because I just didn't implement those yet. I read through the XInput2 headers briefly and while they look particularly unpleasant in some ways, nothing looks technically impossible or even difficult, just tedious to deal with.
Plus it's another thing we would only have to do once: implement XInput2, and now all GTK applications, AzPainter, and anything else that can support it now has drawing tablet support on Haiku.