I currently have a C# application that I want to convert over to Qt/C++ 5.10.0 but I am having an issue with QT licensing. This application is given away for free, but it has a service that the user can upgrade to gain more features but it's not mandatory.
My application is closed sourced, meaning that we don't share the source code of the product because this would lead to hacking and people stealing the service. Or worse competitors figuring out what took me years to develop.
Scenario #1 - Open Source - Dynamic Linking
I think I can develop the closed source application as long as I dynamically link against the framework, meaning that the customer can change the framework of QT if they choose. This makes the software hackable because they can change the QT Framework to include hacks that reveal almost anything and to include changing the function of the main developed program. Also if I made any changes to the Qt Framework I would need to make those changes open source.
There is so much discussion on this matter. I am not sure if I have to open source my product or just provide links to QT Framework and cite my program is built on Qt. If I have to open source my program it's not worth even starting to build with Qt since I can't protect it.
Scenario #2 - Commercial License - Static Linking
To combat this, I thought this would mean I needed a commercial license. With a commercial license, we could statically link against the framework and have everything in the .exe, I know this is not hack proof, but it makes my application a lot harder to hack and that's the goal. In this scenario, I could make all the changes I wanted to the QT framework without having to share anything.
After I bought a license for the commercial version I discovered that I can't use static linking because one of the main components uses WebEngine and it does not support static linking after Qt version 4.7. So I am back to Dynamic linking again as the only option?
What License Can I use with these options?
- I don't plan to make any changes to QT Framework. If I did I would submit changes and provide source code for the changes, with no problem.
- I don't want to provide source code to my actual program, but it can be easily hacked anyway if I use dynamic linking anyway.
- I don't mind providing a link to Qt or showing the logo.
- I don't mind buying a commercial license but I feel a little heartbroken because I can't use any of the features of a commercial license to protect my code. If I am reduced to dynamically linking I prefer to use the open source (free) version. If only the WebEngine was able to statically link, this question would be a no-brainer.
- I want to protect my source code in some way to make it difficult for hackers. I want the extra level of protection, so I can sleep at night knowing that while my application is not hack proof, it's a bit harder for a script kiddie to decompile the application.
- The software is given away for free but it does have an option to upgrade and use additional services from our main server. Most of the heavy lifting is actually done on our server.
- We actually make less than $5,000 a year. We do not see our software grossing over $50,000 anytime soon since it's a very tight niche market. This is our hobby project that has grown over the years.
What are my options if I wanted to continue to use QT 5.10.0+ ?
In an effort to try to lead the questions on what can and can't be done and what's actually hearsay.
What I can do can do in the open source version.
- Consult a lawyer. There are so many twists and turns only a lawyer may understand it.
- No Support from QT Support Team, you're on your own. You may gain help from other users in the forum of QT which is still pretty good.
- You can develop a closed source project but you must link dynamically, where anyone can reapply different modified/open QT Framework versions for relink. You may statically compile the open source version as long as you provide full source code so others may also compile your complete code. No private code allowed if you do this option.
- As long as you don't make changes to the QT Framework you do not have to provide any source code.
- If you modify the QT framework you must submit the changes to QT and provide your software and the QT framework as open source, because your software is not relinkable until the changes are made public.
- You can code sign your own private program and the QT bindings, DLL/LIB and other sources, but you are not allowed to modify your private code to prevent modified versions of the QT Framework to dynamically relink with your code. Your private code has to remain open and relinkable.
- You don't have to display the Qt Logo, but it's highly recommended by QT. You may not hide file names that would allow anyone to find out you're using QT.
I must have a commercial version if I wanted to do this.
- No lawyer needed it's pretty cut and dry.
- You get limited support if you're an INDIE user and full support if you're not a INDIE user.
- I must have a commercial version for a closed source for profit to link statically.
- Make all the changes you want and keep everything private.
- If you have to dynamically link because you need modules such as WEBENGINE, you can code sign DLL/LIB and other resources and if the code sign changes, you can prevent your software from running. You can restrict QT Framework versions from Modifications.
- Displaying the QT Logo is optional, you can hide all aspects that you're using QT.