I'm creating a new self-hosted open source software under the Apache License 2.0, but at some point of the development I figured out that I need an object storage to manage generated files, because I think the PostgreSQL is not the best approach to this.

With the premise that my software is going to run without internet or with restrictive connections, and I don't want my final user to have cost issues, I can't use Azure Blob Storage, AWS S3 or other cloud services.

During my researches I found the minio, with a good library to use with .NET, support the same protocols as AWS S3 and have Docker support. But I'm stuck in the licenses description.

The minio uses AGPLv3, but I don't understand if I can use it into my project keeping in mind that I'm not going to modify the source code (using the Docker image only and referencing in my docker-compose installation file). And if the user has a private company for example, will he need to pay a minio license?

Can someone help with this, please? I tried to read the choose a license guide, but I'm having issues with this interpretation.

  • 1
    Are you wedded to the Apache2 license for your software? Or are you using that only because you're using some Apache upstream software?
    – MadHatter
    Nov 9, 2023 at 12:09
  • @MadHatter I chose the Apache2 license because i want to be more permissive, and analyzing the options i though it was the best for my software. Nov 9, 2023 at 12:18
  • 1
    Are you willing to relicense your software as GPL v3? The two licenses allow that combination, although a combined program that incorporates both the GPLv3 software and the AGPLv3 software will still itself need to be effectively AGPL licensed, as mentioned in the Answer. Whether putting it all onto a docker image together makes it count as one combined program is harder to analyze, but from your description it's probably better to assume "yes, it makes it combined" than otherwise. See also gnu.org/licenses/gpl-faq.html#AGPLv3CorrespondingSource
    – Brandin
    Nov 9, 2023 at 14:42
  • Are you concerned about the usage of the minio docker image or about the usage of the minio .net library?
    – Bergi
    Nov 10, 2023 at 1:12

2 Answers 2


Minio's non-commercially-licensed offering is AGPLv3. Assuming that the FSF's position on dynamic linking creating derivative works is correct, and assuming that you're linking the minio library into your distributed executable, then you can do it, but you can't license your work under Apache2; instead, the software that you distribute must be licensed AGPLv3 in its entirety.

If you are wedded to a permissive licence for your creation, you'll need to find a different library; sorry.

  • 1
    Thanks for the answer! I really want a permissive licence for my creation. I will try to find another library that fit my needs. Nov 9, 2023 at 13:22

MinIO supports an API compatible with that of Amazon S3. You can freely use MinIO server under its AGPL license.

In particular:

i'm not going to modify the source code (using the Docker image only and referencing in my docker-compose installation file).

You will need to distribute the complete, corresponding source code of MinIO that you are using. Since you will be using the upstream image, that should be relatively straightforward.

And if the user has a private company for example, will he need to pay a minio license?

No. They could use it under the AGPL as well. They could use a commercial offering, but they don't need to.

The protocol is based on connections over TCP, this does not make the license apply to the client. In fact, I would recommend to make your software configurable so it can work with multiple providers supporting that API, such as MinIO, Amazon S2, Backblaze...

Note that even though they will all support the same API on paper, there are probably small variations.

However, you also mention that it provides “a good library”. If you link to a MinIO library under AGPL license, then you would have to apply the AGPL license to your whole client program.

In summary, the server license shouldn't be a problem, as your client will be communicating with another program over a TCP connection with a defined API. But if you use an AGPL library, then you would need to convey the rest of your code under the AGPL as well.

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.