Every now and then, I check the state of affairs in Linux GUI development (well …. the last time was six years ago). For the last few years I have been developing on all kinds of different platforms, Windows .NET, Android, Web. All these platforms are a breeze to develop in, my favourite for quick application development being C#.NET. And because I have been working in C#.NET a lot lately, I decided to see how the GUI development in Linux holds up to that in 2015.
Defining the needs
Obviously, before we can start developing, we will be needing tools. For my research I decided to only install tools that are readily available in my distribution’s repository, so a simple
sudo dnf install <tool> gets me where I want to be.
There are some other important things we need to lay down as well:
- The tool should have a (reasonably) good UI layouter, preferable with drag-and-drop.
- The tool/framework/language should need as little boiler plate code as possible.
- I should be able to have a working example within maximum 30 minutes.
- The resulting program should be native. Otherwise, I might just’ve used an web application or Java.
These demands aren’t too much to ask for, as they are available on other platforms already (the UI editor of Visual Studio is great and my first Android app took me 30 minutes between installing the IDE to having it on my phone).
I will be rating each tool I find, bearing in mind I’d give Visual Studio 2010 9/10 and Android Studio 8.5/10.
We start with an oldie and hopefully goodie. Anjuta has been the tool I have been using to create some applications in the distant past. It was OK then, but in my last tests it crashed a lot on me. Let’s see what we got now. I will be using Anjuta 3.16.0.
Installing was a breeze, I thought. Until I actually started it up and tried to create a UI application (using GTK+ and C), it immediately complained about missing packages. After having these installed, I hit the “Run” button, only to see it was missing even more! I didn’t want to go more into it; this is already taking too long. I don’t want to search the internet for these kind of simple things. It should Just Work.
I should mention though that the included UI builder (Glade) is quite OK.
Rating: 5/10, native, didn’t work “out of the box”, decent UI builder
Python with wxWidgets
This one was a little harder to setup. I had to download the IDE (I used LiClipse) but I think standard Eclipse from the repository, together with the PyDev plugin would work as well. Getting wxWidgets/WxPython installed was a little search-and-install away.
Creating an app is all about coding, I didn’t find a UI builder of any kind. Looking at the documentation, it looks like I have to code my UI.
Rating: 5/10, not native, fairly easy to set up, no UI builder
This looks promising! Installing is only a simple
dnf install monodevelop and it starts quickly. Four clicks later, I have boiler plate code and a clear project layout. This feels quite at home for Visual Studio developers. It only needed one extra package installed (gtk-sharp2), but that was only one `sudo dnf install` away. Within a few minutes, I was happily programming away and I actually created a simple “Hello World” app in under 30 minutes. It still had some bugs and some things are a little awkward, but this is the best until now.
Rating: 7/10, not native, really easy to set up, decent UI builder
The install is from a download, no package available in the repository. Installing worked, but I couldn’t even start a simple command line project, because some plugins weren’t enabled. Couldn’t enable them either.
Rating: 4/10, not native, couldn’t even start a simple Java project
GUI development in Linux is still buggy and hard to set up. It needs a lot of boiler plate code or handcrafted code to create user interfaces. Your best bet is to use one of the cross-platform tools, such as Mono or WxWidgets.
Note that this isn’t about getting these tools to work. It is about getting it to work fast and easy. Developers want to get developing on their own projects, we don’t want to spend time hunting down libraries, fixing configuration files or installing software. And the competition (e.g. Visual Studio, Android Studio) gives us that, those tools are the reference.