Comments on RavenDB licensing
There appears to be some confusion with regards to RavenDB licensing terms. In part, this is because some people believe that it is priced too highly.
There is currently a debate going on in the mailing list, which I suggest you’ll join. Yes, I am open sourcing the decision process for the pricing model :-)
That said, leaving the pricing aside, we still need to consider the licensing terms, and what they mean. RavenDB is dual licensed, which means that it is available under a standard commercial license and under the AGPLv3 license. The AGPL is one of the most restrictive OSS licenses. Interestingly enough, if you ask the authors of the AGPL they will probably say that it is one of the most free OSS licenses, but that is a discussion for another time.
The AGPL is similar to the GPL in that it is viral, but it has the additional property that it defines distribution as also including web requests and computer networks. (Oversimplifying a bit, I know, but that is why the AGPL FAQ exists).
RavenDB licensing terms are pretty simple:
- You can use RavenDB with OSS projects (OSI approved licenses), and you don’t have to modify your license to match RavenDB’s licenses. The AGPL doesn’t normally allow it, RavenDB contains a specific exception to allow that.
- If you want to use RavenDB in commercial closed source software, you need to buy a commercial license.
The last statement is where most people have an issue with, so let me be even clearer:
If you are using RavenDB for an internal application that no external user will access, then the distribution clause never comes into effect.
- Note, however, that distributing AGPL applications also include making them available to users / systems outside your own organization.
- Well, the previous point isn’t strictly true, even for internal users, in order to comply with the license, you must allow them a way to get the source.
What if you are using RavenDB as a backend server for your application? RavenDB is never accessed from the outside, so it is not distributed. And even the AGPL doesn’t say that making a web request to an AGPL server forces you to be AGPL’ed. That would be an accurate point, except that RavenDB comes in two pieces, one of which is the server, but the second is the client API. And if you use the client API (which is also licensed under the AGPL), your application now must be AGPL’ed.
That is not a problem, right? RavenDB is a REST based system, you can just write your own client, and license that under the BSD.
Why is that? Because of something called a derived work. If you creating a standard HTTP client (PUT, GET, DELETE, etc) that can work against RavenDB, there is nothing that would stop you from doing that. If, however, your client is built to take advantage of RavenDB’s specific features (replication, transactions, batching, patching, etc), then it stopped being a standard HTTP client and became a derived work of RavenDB. At which point, as you probably guessed, the AGPL kicks in again.
All the legalities aside, my intent is that if you use RavenDB commercially, you pay for a commercial license.