I think the GPL is an anti-open source license. I think you should either open up your source code or you should keep it closed. You shouldn’t pretend it is open and then use it as a way of forcing other people to open up their source code. Utilities and libraries under the GPL are poison to a project. Anything under the Affero GPL license is even worse.
One thing that is very telling about the GPL is that they strongly recommend that you do not modify the license and they state that modified versions of the GPL are not compatible with the GPL. In other words, they say they believe in open source, except when it comes to their own license.
I will not touch GPL’d source code. I will use software which has source code under the GPL, but I prefer not to.
When I release source code, it is under a modified MIT license that adds a single restriction (plus a clarification). Nobody can take my code, modify it, and then put it under a more restrictive license. This means it is not compatible with the GPL and nobody can GPL my code. Yes, I realize that somebody can take my work and use it commercially and not release their changes or updates. That isn’t a disadvantage because it encourages innovation. If somebody creates a proprietary innovation on top of my software, it is likely to be one of (1) a huge innovation with a lot of work behind it that the developer deserves to be able to keep proprietary, (2) something small but useful, which will be duplicated by others, or (3) something that nobody except one developer cares about. If my software can help any of those happen, I’m happy. Overall, the pros of actually being open and free outweigh the disadvantages.
There is another approach. You do not force a single license on the entire project. This would allow somebody to contribute a module which is under a license that they prefer. This would take some thought, but I think it would be possible. Not surprisingly, this approach is not compatible with the GPL.
Here is my modified license, in Python source. Of course you are free to take it and even modify it.
license_text = """
__PRODUCT_DESCRIPTION_HERE__
Copyright (c) __YEAR_AND_CREATOR__
Written by __AUTHOR__
Permission is hereby granted, free of charge, to any person
obtaining a copy of this software and associated documentation
files (the "Software"), to deal in the Software without restriction,
including without limitation the rights to use, copy, modify, merge,
publish, distribute, sublicense, and/or sell copies of the Software,
and to permit persons to whom the Software is furnished to do so,
subject to the following conditions:
The above copyright notice and this permission notice shall be
included in all copies or substantial portions of the Software.
Every individual file within the Software must include either this
entire copyright and permission notice or one of the following
abbreviated notices which incorporates this notice by reference:
This software is covered by the copyright and license notice
in <FILENAME>, which can be considered to be included here by
reference.
See FILENAME for license notice.
If you create a derivative work of this software, you are not
required to distribute the source code, no matter how you use
the software. However, if you do choose to distribute the source
code of your derivative work, you may only do so under this license,
modified appropriately to add your copyright and/or authorship
in addition to the existing copyright notice. You may not replace
the copyright notice, substitute a different license, or add
an additional license.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
"""
license_note = """
This license is not compatible with the GPL. You may not incorporate
this software or any part of it, or any derivative work of it, into
any project under the GPL.
"""
def get_license():
return license_text