Licensing and Python Plugins

Hello all,

I’m currently evaluating Orthanc, and if we decide to use it, we may want to develop a python plugin for it. According to the FAQ page, I would need to request a “Dual License” from Osmis in order to write this plugin. However, the Python Plugin For Orthanc page in the Orthanc Book says that I would need to disclose the source code to the Orthanc community, but it does not say anything about a “Dual License.”

Let’s just say I’m writing a python plugin that may not be useful to anyone but my company. It will be running on an Orthanc instance that’s running in AWS, and that instance will be accessed through the REST API. My company is a for-profit entity.

  1. Does my python plugin need to be disclosed to the Orthanc community?
  2. Do I need to obtain a “Dual License” from Osmis?

Thank you for considering my question.


Thanks for your interest in Orthanc.

The Python scripts that are run by the Orthanc server through the Python plugin are derived work from Orthanc (as they can’t be run without Orthanc). By the way, the same holds for Lua scripts.

If your AWS server runs some AGPL-licensed plugin for Orthanc (such as the PostgreSQL plugin, one of the S3 plugins or one of the Web viewers), you are “triggering” the AGPL protection that requires you to give back to the Orthanc community, which forces you to publicly disclose the source code of your Python scripts under the GPL or the AGPL license (this choice is up to you).

The facts of whether you consider your plugin as useful or useless to people outside of your company, as well as whether your company is for-profit or nonprofit organization, don’t have any impact here. You have to share your code in either case.

If you don’t want to respect the AGPL license by keeping the source code of your Python/Lua scripts private, then you can buy a “license exception” (aka. a “dual license”) by Osimis. On the other hand, if you do accept to contribute back by sharing your code, then you don’t have to buy a license exception.

Very importantly, don’t consider buying a license exception as a “punishment”, but instead as a “contribution” to the Orthanc ecosystem. Buying a license exception means that you acknowledge people who allowed you to vastly reduce the development costs of your company. We need financial support from the industry to make Orthanc sustainable in the long term, to the benefit of the entire community of medical imaging (which includes your company).

Kind Regards,

NB: For other people reading this thread, also check the dedicated page in the Orthanc Book:

Dear Sebastien,

I have a question about this, in your table you wrote that anything that is using the external RestAPI of Orthanc could be proprietary software and thus do not have publish it’s code.

If you take OrthancToolsJS, it is exclusively made for Orthanc, it uses only Orthanc RestAPIs, it could theorically run without orthanc (the NodeJS and React front end will run) but it would be completly useless without Orthanc (unless you want to play with a GUI that does nothing).

Typically to be functional OrthancToolsJS needs Orthanc. Is it not enough to consider some third party app as dependent to Orthanc and thus needs to respect the copyleft even if it is using only the RestAPIs ?

On my side I have no problem as everything I made is GPL / AGPL, but just wanted to understand if the RestAPI interaction is enough to consider software independant even if the calling third party app is designed only for Orthanc as a DICOM backend ?

Best regards,


Hello Salim,

Again, I’m not a lawyer. What follows is my own personal interpretation.

There is a major distinction between OrthancToolsJS and the question of the original poster: In your case, you don’t provide Orthanc on an AWS server to customers, you use unmodified versions of Orthanc, and you publicly provide your source code, so the AGPL is not triggered for those three reasons.

Regarding the question about a proprietary software interacting with an AGPL-licensed software through network communications, check out the FAQ from the Free Software Foundation:

"In AGPLv3, what counts as “interacting with [the software (Orthanc)] remotely through a computer network?
If the program is expressly designed to accept user requests and send responses over a network, then it meets these criteria. Common examples of programs that would fall into this category include web and mail servers, interactive web-based applications, and servers for games that are played online. [This is the case of Orthanc]
If a program is not expressly designed to interact with a user through a network, but is being run in an environment where it happens to do so, then it does not fall into this category. For example, an application is not required to provide source merely because the user is running it over SSH, or a remote X session. [This is not the case of Orthanc]"

I also remember the goal of the AGPL license:

“The GNU Affero General Public License is a modified version of the ordinary GNU GPL version 3. It has one added requirement: if you run a modified program on a server and let other users communicate with it there, your server must also allow them to download the source code corresponding to the modified version running there.”

My understanding is the following: The AGPL is about the server-side code, not about the client-side code. If some client software (such as OrthancToolsJS) contacts some Orthanc server that is running somewhere on a cloud server, the source code of this client software is allowed to be kept proprietary. However, if the cloud server runs a modified version of Orthanc (i.e. if some custom C/C++ plugin, Lua script, Python script is installed, or if there were modifications applied to the source code), with at least one AGPL-licensed plugin (PostgreSQL, MySQL, S3, Orthanc/Osimis/Stone Web viewers…), and if this Orthanc server can be accessed by some external client, then all the source code that leads to this modified version of Orthanc must be published under the GPL or AGPL license.



OK thanks !
Best regards,


Thank you, Sebastien (and everybody) for the clarification.