Writing Gnome Apps with Swift

Overall reaction to Swift + GTK/libadwaita

  • Many find a SwiftUI-like, declarative API over GTK4/libadwaita close to an “ideal” Linux desktop framework, especially for those who already like SwiftUI.
  • Others are wary of new UI stacks that may remain immature, under‑maintained, and niche, making them risky for production apps.
  • Some see this mainly as a proof that “SwiftUI-style cross‑platform UI is possible,” not yet something to bet a product on.

Swift as a language & ecosystem

  • Several commenters praise Swift as modern, expressive, and pleasant, especially combined with SwiftUI and structured concurrency.
  • Criticisms include: ARC and class/struct split, historical threading/concurrency pain (partly addressed by async/await and upcoming Swift 6 data‑race safety), and Apple‑steered evolution with lots of new features.
  • Linux support is debated: official packages target only a few distros, but users report community packages and tools (swiftenv) making Swift usable on many distributions, with Foundation still incomplete in places.
  • Language tooling: sourcekit‑lsp + VS Code and Emacs LSP are reported as solid; some wish for an “Xcode‑lite” cross‑platform IDE.

Cross‑platform UI vs platform‑native

  • Strong skepticism about “write once, run everywhere”: past attempts (Java, Smalltalk, early Flutter, various cross‑platform stacks) often felt non‑native or died off.
  • Others point to Qt/QML as a counterexample that is mature, used in real products, and capable of very native‑feeling apps when carefully styled.
  • GTK on Windows/macOS is widely seen as weak; people doubt GTK4 as a serious cross‑platform base despite its strengths on GNOME.

Comparisons & alternatives

  • Qt/QML and pure Qt are repeatedly suggested as the most practical cross‑platform native toolkit today; libadwaita is preferred by GNOME‑centric users.
  • Flutter is cited as working on Linux/desktop (e.g., Ubuntu’s installer), but concerns about Google’s long‑term commitment surface.
  • Rust+GTK bindings, Vala, GJS/TypeScript, and other DSLs (Relm, QML, various Swift wrappers) are mentioned as existing non‑C options.

Licensing & runtime concerns

  • There is debate about the Swift Flatpak runtime’s GPLv3 license: some argue it’s like a container and doesn’t infect apps; others note that, in general, linking against a GPL runtime can create obligations unless an explicit exception exists.
  • How this applies specifically to Flatpak’s Swift runtime remains somewhat unclear in the thread.