I’ve had a bunch of false starts and several stops while I’ve been trying to build my linux app. I’ve settled on using GTK as the gui tool kit and GNOME as my target environment and flatpak as my packaging and distribution tool. What I have not decided on is the language I want to write my application in. With each language I try, I find something I don’t like about it that keeps me from wanting to use it. I’ve been learning a lot about myself in the process of this and more about what I want and what my goals are with this project.

All along I’d been telling myself a few things I want. “I want it to be a compiled language”, “I want it to be approachable for new developers”, “I want it to be a well supported language (community wise)”, “I want to be able to have good editor support. (intellisense, linting, etc…)”, “I don’t want a language where whitespace matters to the compiler / interpreter (cough python cough)”, and “I want it to have language bindings for GTK (and hopefully GTK templates)”.

I’d recently read a couple of articles by Tobias Bernard of the GNOME project called “Linux is not a platform” and I immediately was like “He’s right”. If you are going to develop for Windows, Microsoft has an editor, a go to language, and a butt ton of documentation. They have “Jon Skeet”’s everywhere and able to answer even the dumbest of questions a new developer could ask, as well as tons of other resources. It’s the same for Apple (both iOS and MacOS) and for Android. With Windows, you use C#. With Apple, Swift. With Android, Kotlin. Linux, there isn’t a single central “go to” language.

In Tobias’ article, he said that the only “Linux platform” out there is “Elementary OS”. Elementary OS provides an SDK for developers, a single distro to target, an app store to publish their app to, application guidelines, and a supported programming language (Vala).

I suppose I’ve been wanting to help with this cause. I’ve been hoping to be able to gain experience and then write about it. And that’s one reason I’ve been so picky.

I’ve been wanting to choose a stack that I can say “You should use this same setup” and “Here’s where you go for help” to a new developer. The things I’d been telling myself I want mostly reflect that. But some of the things have not. “I want a compiled language” doesn’t support that. It’s also not necassary for most kinds of applications. “I don’t want a language where whitespace matters to the compiler / interpreter” is another.

It’s kind of a hard realization, but I haven’t been using python, just because of whitespace. It has everything else I need or want.

At this point, I’ve discounted rust because I’ve found it’s learning curve high and becuase I have spent far to much time fighting with the compiler / borrow checker. I still love rust (or at least the idea of it) but I can’t recommend it to noobs because of that alone.

I’ve discounted vala because there isn’t a package ecosystem for it, and also because I hit a really cryptic error that I can’t debug easily because of the weird way it compiles to c (my error is in a .vapi file btw) and I can’t find any similar answer / question on stack overflow.

D has proven to be really viable actually. The only snag I’ve hit is linking to a local library while using the mesonbuild, and lack of gtk template integration (for some reason it bothers me not having it in O.O. languages).

This has been kind of rambly, but a little therapeutic for me. It’s helped me to still keep my project alive by identifying blocking issues and by doing some introspection of myself.