I'm tasked with developing a commercial closed-source application for desktop with GUI. I'm looking for a framework I could use.

Must have:

  • Free or very cheap to use (Qt is not an option)
  • Fast to execute, one execution of some external tools that need to be monitored may take days, hence fast execution is invaluable.
  • Allow Protecting source code: I'll be importing proprietary third party software (even if possibly refactored to a different language) that can only be distributed in protected format. I also don't want customers to see implementation details.
  • Allow creating GUIs
  • Allow creating and updating scientific graphs.
  • Allows developing for Linux

Nice to have:

  • C++ as language
  • Good documentation
  • Widely used on GitHub/StackExchange
  • Allow displaying and updating simple 3D graphics.
  • Allowing to develop for multiple platforms.
  • Statically linked libraries preferred, so I can have a single executable for the whole app.

Context: I've been working with wxWidgets, but I don't seem to find many questions on SO, nor plenty of code on GitHub, plus the documentation is confusion for me, and everything seems to have been made more than 5 years ago. I've considered using Qt, but my company does not qualify for their small-business plan, so it would end up being too expensive for starters.

The app I'm developing will interact with a lot of C code, and should run "fast" (which makes python a little undesirable), have a GUI and be preferably complied in a stand-alone executable. I cannot create a server-based application to run as a service, I need to deliver to the customer's PC, which will be used in locations where internet access may be limited or non-existent.

  • Qt is dual-licensed: it has a commercial license and an LGPL license. The LGPL-licensed version can be used in closed-source apps! The only requirement is: if you modify/extend the Qt itself (which is unlikely but possible), you need to publish the source of your modified Qt version, as LGPL. You still don't need to publish the source of the app you've developed. The same is the case of the answer suggesting gtkmm. – peterh - Reinstate Monica Jul 24 at 11:36
  • @peterh-ReinstateMonica : That is true, and I hadn't noticed. Thank you. But, as a starting point, I'd like both to avoid having to distribute the software with dynamically linked libraries (as LGPL requires) and I'd like to keep out from some danger zones, such as Qt Charts or Qt Data Visualization which are GPLv3 (according to this FAQ) that is, me or someone else using these libraries by mistake. – Mefitico Jul 24 at 13:34
  • AFAIK a static link is no-issue from the view of the (L)GPL. Although it might be problem - having a static link, you have no easy way to prove that you did not violate the LGPL (because you can not prove that your Qt/gtkmm is unmodified). It is not 100% but nearly sure. I suggest to ask opensource.stackexchange.com for more details. If you need to use GPL parts of the Qt, then Qt falls out, but gtkmm (in the answer) remains. – peterh - Reinstate Monica Jul 24 at 14:06
  • @peterh-ReinstateMonica From the Qt FAQ: "With LGPLv3 it is also explicitly stated that the user needs to be able to run the re-linked binary on it’s intended target device.". I'm not at peace with this requirement, though maybe I'm just being stubborn. – Mefitico Jul 24 at 14:51
  • I think this is easy - you can simply compile your code into an object archive (.a) and provide a minimal script which links it with a static Qt. If you want to provide a 100% proof, you can distribute a Docker image which recompiles an official Qt and links it to your app (distributed as a .a). If you want for sure protect your app details, you can also link your app into a single object (.o) with some ld commands. This .o is nearly so un-decompilable as your final binary. – peterh - Reinstate Monica Jul 24 at 15:32

As far as I understand, you want a framework that does it all, that holy grail many are looking for. As I have been working lately with Gtk (more specifically, gtkmm, which is written in C++, in contrast to Gtk, which is in C), I can make a case for it. From what you mentioned, this is what gtkmm covers:

  • It's not only free, it's FOSS (free open source software)
  • It's written in C++ so it's moderately fast (I do not know of any benchmarks, so I can't confirm)
  • It is made with GUIs in mind
  • It's main target is Linux, even though it can run on Windows and OSX (Inkscape is an example of app which does that)
  • Again, the language is C++, but I think you can also use Python, in a flavour of it
  • Here is the documentation
  • The Python version is used in a number of GitHub projects

I know it doesn't answer your question, as being closed source was a must, but these are my two cents.

| improve this answer | |
  • 1
    Yes, it is an answer - he is developing a closed source application, but he does not say this criteria from the library he is using. Gtkmm uses the LGPL license, meaning that although it is an open source software, it is allowed to be used in closed source apps. The LGPL states only, that if the op makes a modification/extension in the gtkmm itself, he needs to publish his gtkmm version as LGPL. But he still does not need to publish the source of his software. More details can be read about on the opensource.stackexchange.com . – peterh - Reinstate Monica Jul 24 at 11:28
  • To be clear, the app I'm developing needs to be closed source from the user point of view. As for myself, I don't really care if the the framework I'm using is open or closed source. Furthermore, my app source needs to be protected. Regarding the python version, I've had bad experiences in the past trying to create a standalone executable that protected my code written in Python. – Mefitico Jul 24 at 14:53
  • 1
    @Mefitico I've seen and used a python -> c compiler which could create C executables. But it was not a complex python code, I do not know if it would work. gtkmm is a c++ library, it only has a python binding. You don't need to use the python binding. – peterh - Reinstate Monica Jul 24 at 15:25

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.