I have developed an open-source software for process graphics, which offers two different types of licenses: community version (free) and enterprise version (paid service).

The community version software limits the number of nodes that can be created for process graphics. For example, if there are more than 10 nodes, the software will prompt that only the enterprise version supports drawing more process nodes. In this way, enterprise users can obtain product versions with all features by purchasing the enterprise version service.

Because the community version only has a simple limit on the number of process nodes, and other features are completely consistent with the enterprise version, how can I implement this restriction function without letting community version users bypass it. If it's just a simple count comparison and warning prompt, some community version users may only need to modify the program code of this limited function to bypass this threshold. So, how can I implement such a feature?

  • 4
    Are you asking how to implement something in free software that its users can't modify? And if so, are you aware that the right to modify is one of the four freedoms of free software?
    – MadHatter
    Commented May 30 at 7:34
  • With respect, you also don't seem to be very good at accepting answers to questions you've asked. You have another question, well over five years old, with several well-received answers; it's well past time you either accepted one (by clicking the tick outline) or indicated what, if anything, remains unanswered in it. You might want to consider doing the same for this one, too! That's the social compact, and I apologise if you already know this.
    – MadHatter
    Commented Jun 7 at 7:56
  • 1
    – Bes Ley
    Commented Jun 9 at 1:29

1 Answer 1


The simple answer here is "you can't do that", at least not while keeping the community version as open source; the freedom to modify is one of the fundamental freedoms of free / open source software.

So what can you do?

  1. Add actually true new functionality in the paid version, not an arbitrary gatekeeping check.
  2. License the community version under an open source license which means people may be prepared to pay for a different license. The most obvious choice here is the (A)GPL due to its copyleft nature.
  3. Release the community version under a non-open source license. This obviously means you give up the benefits of having an open source version.
  • 1
    For point 2 it would be more correct/more specific to mention copyleft or "non-permissive licenses". (A)GPL are examples of copyleft/non-permissive open source licenses. MIT and BSD are examples of non-copyleft or "permissive" licenses. Both categories are classified as open source.
    – Brandin
    Commented May 31 at 8:45
  • Sure, but virtually nobody is going to pay for a different license for permissively licensed code. Commented May 31 at 8:56
  • 2
    Yes I mean that's why you should mention that in point 2 the key point is that you're choosing specifically to license under a non-permissive license for strategic purposes. If you license under a permissive license, then that obviously serves no strategic purpose. This is also for clarification of terms -- both permissive and non-permissive are considered as open-source, but only copyleft (aka non-permissive) serve this strategic purpose.
    – Brandin
    Commented May 31 at 14:21
  • 1
    @Brandin I think the sentence may be intended to read as "Choose a license which means people may want to pay for another license (e.g. GPL/AGPL)" rather than "choose an open source license (e.g. GPL/AGPL). This implies people may be prepared to pay for another license.". I think having the "e.g." in the middle makes it a bit harder to read. Commented Jun 2 at 12:22
  • 1
    Edited to hopefully make it clearer :) Commented Jun 2 at 12:29

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

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