I was originally going to send you an email about this, but I think posting this as a public issue here on github makes it easier to potentially include others in the discussion, and also allow you in future a place you can link to for anyone interested in the outcome.
As an up front comment, I really like this library, what it does, how it does it, and the issues it solves in similar tools. That said, I can't use this library, despite really wanting to, even though almost all the code I write is opensource.
The license you've chosen is the strongest level of protection possible, and I understand your reasons for choosing it based on your comments[1][2] but I think you haven't entirely considering the implications and I hope I can change your mind.
The problem is that the license you've picked is incompatible with every other opensource license other than AGPL itself, and GPLv3[3], and even there the interaction is not great. If this was a final product rather than a library, that would be fine, since it would encourage that code is always written against the core codebase and no one does any customization without sharing it back. I would personally use GPL and AGPL for end service projects. But as a library you are limiting who can use it so heavily that no one easily can, or will do so without realising they are breaking your own license in doing so, and actually need to change their license to one that is compatible (GPLv3 or AGPL). Not to mention that even with the GPL license, the interaction with AGPL requires that the part of their code which runs on a network that uses your AGPL library must be opensource and is itself compatible with the AGPL license or is AGPL itself [4]. This means they really need to break the part that uses your library out into something they can easily share (or make AGPL), or just make their whole project using you library AGPL outright.
What this actually does is make it so that only people also using AGPL, and sort of GPLv3, can use this library if they are an opensource project. No MIT, BSD, Apache, or LGPL licensed projects can ever use this. Not even GPLv2. And they can't/won't even pay for your commercial license since they don't ever intend to close source their work. The commercial license doesn't make sense for those projects.
In my particular case I do a bunch of work in the OpenStack community, and the company I work for is heavily focused on opensource first, with large amounts contributions and even donations/support to the opensource projects we use heavily. I live and breath opensource as much as I can, but because everything in OpenStack is Apache licensed I can never touch this library[5].
I have a piece of work I need to do that splits my program into API and a worker system. Dramatiq is my first choice, my other options are mostly Celery, Kuyruk, or writing a smaller thing myself. I can't use Huey or RQ because OpenStack tends towards RabbitMQ over redis, and our own cloud uses RabbitMQ (so running redis for a single service is a no).
Dramatiq is my best option, and has features I want that don't entirely exist as nicely in Celery or Kuyruk, but despite how much I want to use it, I can't, and won't given the license. The OpenStack foundation itself nor the company I work for will be buying a commercial license because it doesn't make sense (our code is opensource), and that license won't apply to anyone forking our code.
So now that you understand the why behind this post, here comes the suggestion, and do know I'm doing this because I want Dramatiq to succeed over the likes of Celery. Please reconsider using a license that is more applicable to a library such as this and is compatible with the majority of opensource licenses in use at present.
Changing your library to something like LGPLv3 still gives you a fairly strong amount of protection, and the library itself if modified must remain opensource, but can be used as is (without modification) by anyone. Yes this means some people can use your library and make money without you ever getting a cent, but it also encourages others to use your software, gives you more people contributing back, and nothing stops you from still offering a commercial license for anyone who wants to modify your code and not share their changes. This gives you most of what you want, while giving people like me working on opensource projects in the more permissive (and now more common) license space a chance to use it and help you make it better.
If you look at the trends in opensource licenses, most are moving towards permissive ones, and of the projects out there, VERY few are using licenses that are compatible with your library[6]. Only 7% are using GPLv3, and less than 1% is on AGPL. This means the majority can't use this library.
Then if we look at the licenses for all the competitor libraries to Dramatiq, all of them use VERY permissive licenses (BSD, or MIT):
https://github.com/rq/rq/blob/master/LICENSE
https://github.com/celery/celery/blob/master/LICENSE
https://github.com/coleifer/huey/blob/master/LICENSE
https://github.com/cenkalti/kuyruk/blob/master/LICENSE
While the GNU foundation docs themselves recommend using GPL over LGPL for new libraries, that is only if there isn't something that already does the same or similar things. Yes Dramatiq is better (imo) than the above alternatives, but not enough to justify using it because of the license it has. In the cases where there are alternatives GNU recommends LGPL:
Using the ordinary GPL is not advantageous for every library. There are reasons that can make it better to use the Lesser GPL in certain cases. The most common case is when a free library's features are readily available for proprietary software through other libraries. In that case, the library cannot give free software any particular advantage, so it is better to use the Lesser GPL for that library.
[7]
I really want to use this library, I'd probably even help fix bugs that I run into, or issues that affect me and gladly contribute back features that make sense. I'd likely even promote it to others that are sick of Celery, or want something a little cleaner. Yet I can't do any of that with the license you've picked, and I bet there will be others who look at Dramatiq and make the same choice, or not realise the license and then run like hell and refactor when they do.
Please reconsider the AGPL, and if you are open to having a discussion about this, lets have one here. Or if that's never going to happen, and you aren't willing to at least have a discussion about that as an option, lets at least have this as a documented confirmation of your choice for anyone else who asks this.
Please let me and others be able to use your library. :)
Foot notes:
- https://dramatiq.io/commercial.html
- https://news.ycombinator.com/item?id=15681066
- https://en.wikipedia.org/wiki/License_compatibility
- https://www.gnu.org/licenses/gpl-faq.html#IfLibraryIsGPL
- https://governance.openstack.org/tc/reference/licensing.html
- https://redmonk.com/sogrady/2017/01/13/the-state-of-open-source-licensing/
- https://www.gnu.org/licenses/why-not-lgpl.en.html