I want to distribute my software under license like Creative Commons Attribution - Non commercial - Share Alike license, i.e.

  • Redistribution of source code and binaries is freely.
  • Modified version of program have to be distributed under the same license. Attribution to original project should be supplied to.
  • Restrict any kind of commercial usage.

However CC does not recommend to use their licenses for software. Is there this kind of software license I could apply? Better if public license, but as far as I know US laws says that only EULA could restrict usage of received copy?

  • 4
    What do you exactly mean by non commercial? This is exactly the reason why CC shouldn't be used for software. I think that your best bet is to go with GPL 3, or AGPL 3. Sep 25, 2011 at 18:04
  • I think even CC doesn't really like the NC part. It's a big question what might be considered "commercial"
    – johannes
    Sep 25, 2011 at 18:13
  • 2
    A license can't restrict use. If you look at all the exclusive rights in 17 USC 106 you'll see that none of them have anything to do with use. This is why licenses (like the GPL) restrict distribution and modification, not use. Sep 25, 2011 at 21:13
  • @David: Wait, so how do EULAs work with "For educational purposes only", "Not for business/commercial use", "For evaluation purposes only" etc?
    – SF.
    Sep 26, 2011 at 7:37
  • 4
    @SF: EULAs are agreements (contracts), not licenses (offers). He was asking about a license -- and he couldn't use an agreement, since one of his requirements is free redistribution. (If you have to agree to something to receive/use it, it's not free.) Sep 26, 2011 at 15:59

4 Answers 4


Your requirements restrict the use of the software, so at least by the definition of open source from the OSI (definition of open source), it is therefore not open source, so you will find no help in open source licenses. So forget AGPL, GPL, BSD, Apache, MIT, etc.

I also looked at the Aladdin license as suggested by @thiton. This does not restrict commercial use, only sale (just as @thiton pointed out). If that is not strong enough, you may want to start with the wording from, say, MIT license and add you restrictions (but don't call it the MIT license of course, and don't call it open source).

Like crypto, licensing is hard, and rolling your own is tricky. The world doesn't like more licenses (they add friction), and is part of why OSI exists - to catalog and promote existing "good" licenses for open source so people don't roll their own. Hope it works out.


The Aladdin free public license (AFPL) is a typical license prohibiting reselling your code (but using it in-house in a commercial enterprise is allowed). Use with care, though, because of the legal caveats the comments have mentioned, and because most distributions will (for good reason) never include a program licensed under the AFPL.

  • Thanks a lot for this info, I don't care if distros won't include my program at he moment, but pity if it has legal problems.
    – Nick
    Oct 3, 2011 at 19:12

I'm not a lawyer, but I'm quite certain that the legal wording of CC isn't suited to software; there are many suitable open source software licenses.

Liberal licenses include ("liberal" here means both open and closed source products can be derived and commercialized) :

  1. MIT License
  2. BSD License
  3. Apache License

Reciprocal licenses include ("reciprocal" here means only open source products can be derived and commercialized):

  1. General Public License (GPL)
  2. Lesser General Public License (LGPL)
  3. Mozilla Public License (MPL)

For your needs, GPL is the best match: free use and redistribution of sources and binaries, reciprocation of any changes released, and derived products must be released under the same license.

Note that even with GPL, commercialization is still possible, albeit with a strong imposition of open source. If you don't want any commercialization, you may have to draft your own license.


The argument that the definition of "non commercial" is debatable has nothing to do with the CC license in particular and would equally apply to any other license in the world that has such a clause, so this is no argument against using a CC license for software.

The real reason why CC is not recommended for software is that there are typically different distribution forms for software: Source code, compiled code, transpiled code, etc. and CC does not address that at all, as for other media no such distinction exists. The result is that in some cases it isn't clear if a CC requirement only applies to the source code itself, to either the source code or a compiled/transpiled representation of it, or even to both equally.

Software licenses typically define that compiled/transpiled versions of source codes are not derived works but are in fact the same work in a different distribution form and that for the license it plays no role in what form a work is distributed, the same license conditions apply. Also in case of Copyleft licenses, they also define that whoever distributes a compiled/transpiled form, must also distribute the original source code; again, CC has no such requirement.

If using the CC "SA" attribute, it is guaranteed that derived works has equal protection and BY-SA 4.0 is even one-way compatible with GPLv3 (you can release CC BY-SA 4.0 code under GPLv3 if you like, as GPLv3 enforces all requirements of CC BY-SA 4.0 and even beyond it). So with "SA" attribute, compiled code shares the same license as source code for sure but also forces any work based upon your work to also use that license. That is a problem, if other parts of that derived work use a different license and conditions of that different license make it impossible to release the derived work as a whole under the CC license.

E.g. let's assume I write an app that uses your CC SA code. Because of "SA" my entire app (a derived work) must be released as CC SA. However, my app also uses code under a license that requires that I grant patent rights to users. If I release that app under CC SA, I would not grant those patent rights and thus violate the other license. But if I release it under a license that grants those patent rights, that would not be CC anymore and thus I had violated the SA constraint. So I can mix the source codes in a source repo (unless any source code has a license that also forbids that) and also distribute that source code but there is no license I could use to release a binary built from that source code that would not violate either one of these two licenses.

If using the "NC" attribute, it is not compatible with other software licenses anymore, as other licenses do typically allow any form of commercial usage. You can mix CC NC code with other licenses but only if the CC code stays under CC license on every redistribution.

And the NC attribute is sticky, meaning it will inherit to derived works. Derived works must be released also under a CC NC license or under a custom license with such a restriction and the later one is not recommend as writing licenses is a task for lawyers, not for software developers. If you write a custom license and mess up, your license may have loopholes and not provide the desired or required protection level and in that case the owner of the original work could sue you, as you would then be violating the CC license requirements. So to be safe, you will have release derived works also under any CC NC license, which makes "NC" as sticky as "SA" in practice.

So if you use CC SA or CC NC code for a project, you can mix in code under BSD or MIT or Apache license but the resulting product basically has to be CC SA or CC NC again, which is okay to permissive licenses as BSD/MIT/Apache; they allow the resulting product to have a different license than the the source code, also a more restrictive one and don't require any license requirements to carry over to the final product.

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.