Why are there so many (rust) GTK apps and so little Qt ones?
I always see new GTK apps popup on Flathub. I dont really care and think GTK looks fancy, although CSD suck a bit and they waste space and often functionality.
But they work, are solid, and do what they should.
Qt on the other hand may seem more like a complex job to code with. I dont actually think so, but I heard especially writing rust with GTK is way better than with Qt.
I like KDE a lot, and even though I am excited for Cosmic I think Qt is the better toolkit for many things and a lot of time. But Dolphin seems to suffer from memory safety issues all the time, as well as other projects.
Do you have experience in rust, using GTK or Qt? How do they compare?
C bindings and APIs generally work much better in Rust because the language works a lot more like C than it does C++.
Qt depends a lot on C++ class inheritance, and even does some preprocessing of C++ files to generate code in those classes. That's obviously not possible when using Rust. And it looks like you need a fair bit of unsafe there and there to use it at all too.
Meanwhile, GTK being a C library, its integration with Rust is much more transparent and nice.
So if you're making a GUI Rust app, you're just kind of better off with GTK at the moment. It's significantly easier and nicer.
Having made the choice to use GTK for a Rust project years ago - before a lot of the more Rust-friendly frameworks were around - this is exactly why I chose it. Nothing to do with DEs or any of that, just looking for a better coding experience. Now I'd probably choose one of the several Rust-focused solutions that have popped up though.
GNOME was focusing on building Rust bindings for GTK for many years before Qt development picked up. The GTK bindings were usable within a year or two after Rust's 1.0 release. Yet even today, those looking to build applications in Rust will find that GTK is the only mature toolkit right now. And if you're doing that today, I'd recommend starting with Relm4 for the best GTK Rust experience.
Rust does not support the C++ ABI, and Qt does not provide a C interface, so much work has to be done on building the tooling for binding C++ libraries to Rust. That work is still ongoing, so some have opted to use QML instead of interfacing with Qt C++ libraries. Yet if you're looking to use Qt or QML, you may as well use Slint instead. It's developed by former Qt/Trolltech developers and has a similar approach as QML.
I think there’s a pretty big thing here that people are kinda missing and it’s the ease of app creation. Recently gnome has done a lot for app developers to make the experience really good. Workbench, gnome builder, biblioteca all combined with the ease of libadwaita and the gnome circle make app development significantly easier for gtk than qt. There’s a big community now with a lot of inertia. I think workbench has around 100 tutorials now or so. Super low barrier to entry. Also libadwaita is pretty.
I already use gnome now, but even before I had settled on a DE, I took a look at both ecosystems and was heavily leaning towards gtk because of all these factors and against qt because of its reliance on c++. Until all of those factors are replicated well for qt (and by extension kde), I don’t think they’ll see the same level of development.
a few reasons I think, the QT bindings are split between cxx-qt and qmetaobject-rs . Neither of which are super great IMO, but even if they were, we have UI frame works like slint and egui which are already becoming quite good, slint has a good native look that resembles QT so people wanting that design can use that instead.
It's worth stating that QT is an optional backend and is only used for native styling, even the pure rust, Native styling still looks close to native. QT is fully optional and is not a dep even for linux apps
Qt with C++ is a spectacular environment to develop UI apps in. Coupled with QtQuick it's even better. It's perhaps only outclassed by Flutter. As others have mentioned, there's lots of inertia behind GTK+. There's also past issues with licensing which made the OSS community prefer GTK+ to Qt.
I've no idea what's involved in using Qt in Rust but people starting new UI apps in C and GTK+ today are likely doing a disservice to themselves and the larger OSS community that could contribute to development and maintenance.
No specific rust experience with either, but some thoughts on the popularity reasons outside of the language:
I suspect a bit part of this difference in framework popularity may be due to GTK being more attached to gnome and friends, and by extension, Ubuntu (for better or worse, the most used desktop distro for quite a while) Most of the time that'll be mainline Ubuntu which has always been GTK.
So if a developer or company is going to target something, then it may come down to "what is the ideal platform to build on for Ubuntu as our main target? GTK? Cool, that's what we will use." Of course, either framework is just fine, and either framework targets other OSs as well. I don't have any experience with either, but it wouldn't surprise me if the choice of GTK more often is akin to Swift + Apple's toolkits for iphone development being more popular by a large margin than Ionic/Capacitor, React Native, Xamarin, etc, even though the others provide some benefits (and some significant context-dependent downsides, of course)
If i remember correctly, Qt was not fully FOSS for a while, so GTK was much more widely adopted and recommended early on. But that was pre-2005, I think.
I generally don't really think this is the case, there are still plenty of apps from other languages in QT. in fact, for cross platform apps, QT is immensely more popular then GTK is. Rust itself had disproportionately less apps developed in QT then other stuff, (Python for instance). especially when you consider cross platform. and at least for open source anyways. closed source I cant comment on