Mercurial > hg > orthanc-book
annotate Sphinx/source/faq/licensing.rst @ 999:3b62529bfe91
added java plugin
author | Sebastien Jodogne <s.jodogne@gmail.com> |
---|---|
date | Tue, 19 Dec 2023 13:36:11 +0100 |
parents | 1316bc62b5d5 |
children | 5d4701d8fe28 |
rev | line source |
---|---|
199 | 1 .. _licensing: |
2 | |
3 | |
4 Licensing of the Orthanc ecosystem | |
5 ================================== | |
6 | |
7 .. contents:: | |
8 | |
9 | |
10 Philosophy | |
11 ---------- | |
12 | |
13 The objectives of the Orthanc ecosystem is to share technical | |
201 | 14 knowledge about :ref:`DICOM <dicom-guide>`, to build a consistent |
15 platform for developing medical imaging software, and to foster | |
16 scientific collaborations in medical imaging by subscribing to the | |
17 `open-science paradigm | |
18 <https://en.wikipedia.org/wiki/Open_science>`__. To this end, Orthanc | |
19 is provided as free and open-source software to the benefit of the | |
20 worldwide community of medical imaging. | |
199 | 21 |
22 In order to support this objective of global knowledge sharing, the | |
23 Orthanc project enforces reciprocity. If someone finds Orthanc useful | |
24 to her academic work or to her business, the community of medical | |
25 imaging should gain an advantage from this use by enlarging the | |
26 knowledge base. This virtuous circle guarantees the fact that Orthanc | |
27 will be developed in a sustainable way in the long-term, to the | |
28 benefit of all stakeholders. Predatory behaviors should be prevented, | |
201 | 29 while preserving the freedoms of the users of Orthanc, including the |
199 | 30 commercial uses. |
31 | |
32 According to this philosophy, the University Hospital of Liège decided | |
201 | 33 to release the Orthanc ecosystem under the `GPLv3+ license |
34 <https://www.gnu.org/licenses/gpl-3.0.en.html>`__ in 2012. The GPL is | |
35 a strong copyleft license that is recognized worldwide, and that is | |
36 designed to enforce reciprocity. | |
199 | 37 |
38 As Orthanc is lightweight and designed for Web applications and for | |
39 sharing medical images over Internet, it has been quickly deployed on | |
40 cloud platforms in order to host large amount of data. Orthanc | |
41 considers this use as very legitimate, for instance for scientific | |
42 purpose (think of open-data databases) or for societal needs (think of | |
43 teleradiology platforms in developing countries). Unfortunately, the | |
44 GPL does not protect from predatory commercial behaviors over cloud | |
45 platforms because of the so-called "`ASP loophole | |
201 | 46 <https://en.wikipedia.org/wiki/GNU_Affero_General_Public_License>`__", |
525 | 47 that does not enforce derived versions of a free and open-source |
201 | 48 software running on a server to be given back to the community. |
199 | 49 |
50 For this reason, the plugins that provide scalability-related or | |
51 cloud-related features (for instance the :ref:`PostgreSQL | |
201 | 52 <postgresql>` and :ref:`Web viewer <webviewer>` plugins that are |
199 | 53 necessary for Web applications distributed at a large scale) were |
201 | 54 released under the stronger `AGPLv3+ licence |
55 <https://www.gnu.org/licenses/why-affero-gpl.en.html>`__. | |
199 | 56 This license protects the community of medical imaging by ensuring |
57 that the features included in Orthanc instances running in remote | |
58 servers are publicly available as well. | |
59 | |
60 | |
61 Guidelines | |
62 ---------- | |
63 | |
64 Over the years, it was observed that people fear the use of GPL and | |
65 AGPL licenses, that are wrongly considered as preventing commercial | |
66 uses. This is most often a wrong assumption, given that the Orthanc | |
200 | 67 server is a standalone executable, not a software library. |
199 | 68 |
69 The following table provides a simple summary of the most common | |
523 | 70 situations, and indicates whether the use is **accepted ("Yes"), |
533
610e6be26a71
some clarification about dual licensing
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
525
diff
changeset
|
71 forbidden ("No"), or restricted ("Dual license")**: |
199 | 72 |
73 +-----------------------------------------------------+--------------------------------------------------------------------------------------------+ | |
201 | 74 | | Mode of distribution of the third-party system, or of the third-party plugin/script | |
199 | 75 +-----------------------------------------------------+---------------+-------+--------+--------------+------------------------+-------------------+ |
201 | 76 | Usage of the Orthanc ecosystem | Permissive | GPLv3 | AGPLv3 | Internal use | Proprietary software | Proprietary cloud | |
353 | 77 | | (MIT, BSD, | | | | distributed to clients | platform or Web | |
78 | | Apache...) | | | | | portal | | |
199 | 79 +=====================================================+===============+=======+========+==============+========================+===================+ |
80 | Using Orthanc as such, even if some AGPL-licensed | N/A | N/A | N/A | Yes | Yes | Yes | | |
81 | plugin is installed | | | | | | | | |
82 +-----------------------------------------------------+---------------+-------+--------+--------------+------------------------+-------------------+ | |
533
610e6be26a71
some clarification about dual licensing
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
525
diff
changeset
|
83 | Calling Orthanc from a third-party system | Yes | Yes | Yes | Yes | Yes | Yes | |
199 | 84 | (using REST API or DICOM protocol), even if some | | | | | | | |
85 | AGPL-licensed plugin is installed | | | | | | | | |
86 +-----------------------------------------------------+---------------+-------+--------+--------------+------------------------+-------------------+ | |
533
610e6be26a71
some clarification about dual licensing
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
525
diff
changeset
|
87 | Creating a :ref:`C/C++ plugin <plugins>`, | | | | | | | |
999 | 88 | creating a :ref:`Lua script <lua>`, | | | | | | | |
89 | creating a :ref:`Python plugin <python-plugin>`, or | | | | | | | | |
90 | creating a :ref:`Java plugin <java-plugin>`. | | | | | | | | |
533
610e6be26a71
some clarification about dual licensing
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
525
diff
changeset
|
91 | 2 possible cases: | | | | | | | |
610e6be26a71
some clarification about dual licensing
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
525
diff
changeset
|
92 +----+------------------------------------------------+---------------+-------+--------+--------------+------------------------+-------------------+ |
610e6be26a71
some clarification about dual licensing
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
525
diff
changeset
|
93 | | Case 1: No AGPL-licensed plugin is in use | No | Yes | Yes | Yes | Dual license | Yes | |
610e6be26a71
some clarification about dual licensing
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
525
diff
changeset
|
94 +----+------------------------------------------------+---------------+-------+--------+--------------+------------------------+-------------------+ |
610e6be26a71
some clarification about dual licensing
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
525
diff
changeset
|
95 | | Case 2: Some AGPL-licensed plugin is in use | No | Yes | Yes | Yes | Dual license | Dual license | |
610e6be26a71
some clarification about dual licensing
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
525
diff
changeset
|
96 +----+------------------------------------------------+---------------+-------+--------+--------------+------------------------+-------------------+ |
610e6be26a71
some clarification about dual licensing
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
525
diff
changeset
|
97 | Using a derived version of the GPL-licensed | No | Yes | Yes | Yes | Dual license | Yes | |
525 | 98 | code of Orthanc, or using a derived version of | | | | | | | |
202 | 99 | some GPL-licensed plugin, or reusing their original | | | | | | | |
100 | code in a third-party system | | | | | | | | |
199 | 101 +-----------------------------------------------------+---------------+-------+--------+--------------+------------------------+-------------------+ |
533
610e6be26a71
some clarification about dual licensing
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
525
diff
changeset
|
102 | Using a derived version of some AGPL-licensed | No | No | Yes | Yes | Dual license | Dual license | |
202 | 103 | plugin, or reusing its original code in a | | | | | | | |
104 | third-party system | | | | | | | | |
199 | 105 +-----------------------------------------------------+---------------+-------+--------+--------------+------------------------+-------------------+ |
533
610e6be26a71
some clarification about dual licensing
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
525
diff
changeset
|
106 | **For viewers**: Using a derived version of the | No | No | Yes | Yes | Dual license | Dual license | |
524 | 107 | :ref:`Orthanc Web Viewer <webviewer>`, of the | | | | | | | |
525 | 108 | :ref:`Osimis Web Viewer <osimis_webviewer>`, of the | | | | | | | |
523 | 109 | :ref:`Stone Web Viewer <stone>`, or of the sample | | | | | | | |
110 | applications of Stone of Orthanc (AGPL license) | | | | | | | | |
199 | 111 +-----------------------------------------------------+---------------+-------+--------+--------------+------------------------+-------------------+ |
112 | |
533
610e6be26a71
some clarification about dual licensing
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
525
diff
changeset
|
113 .. raw:: html |
610e6be26a71
some clarification about dual licensing
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
525
diff
changeset
|
114 |
610e6be26a71
some clarification about dual licensing
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
525
diff
changeset
|
115 <p align="center"> |
610e6be26a71
some clarification about dual licensing
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
525
diff
changeset
|
116 <a href="mailto:info@osimis.io?subject=Request for a dual license"> |
610e6be26a71
some clarification about dual licensing
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
525
diff
changeset
|
117 <b>Click here to request a dual license</b> |
610e6be26a71
some clarification about dual licensing
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
525
diff
changeset
|
118 </a> |
610e6be26a71
some clarification about dual licensing
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
525
diff
changeset
|
119 </p> |
610e6be26a71
some clarification about dual licensing
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
525
diff
changeset
|
120 |
610e6be26a71
some clarification about dual licensing
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
525
diff
changeset
|
121 |
201 | 122 **Notes:** |
123 | |
124 * The wording "third-party system" is very broad, as it encompasses | |
125 many possibilities. It can for instance be a Web application, a | |
126 heavyweight desktop application, an automated script, or more | |
202 | 127 generally any system that takes advantage of Orthanc as a service in |
128 its global architecture. | |
201 | 129 |
533
610e6be26a71
some clarification about dual licensing
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
525
diff
changeset
|
130 * If your use case falls in a "**Dual license**" cell, please get in |
358
011b01ccf52d
fixing external hyperlinks
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
353
diff
changeset
|
131 touch with `Osimis <https://www.osimis.io/>`__, the commercial |
011b01ccf52d
fixing external hyperlinks
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
353
diff
changeset
|
132 partner of the Orthanc project that is the only entity entitled to |
011b01ccf52d
fixing external hyperlinks
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
353
diff
changeset
|
133 grant a `license exception |
201 | 134 <https://www.fsf.org/blogs/rms/selling-exceptions>`__ to your |
202 | 135 company for the Orthanc core and its :ref:`associated official |
136 plugins <plugins-official>`. | |
201 | 137 |
138 * If you reuse code from Orthanc or one of its associated plugins, you | |
139 must mention the copyright of the Orthanc project. | |
199 | 140 |
201 | 141 * An Orthanc plugin cannot be licensed under a permissive license |
203 | 142 (MIT, BSD, Apache...) because it cannot run independently of the |
143 Orthanc SDK, which implies that the plugin and the Orthanc core form | |
144 a single combined program, which in turn means that the plugin | |
145 should be licensed under GPLv3 by `copyleft | |
146 <https://en.wikipedia.org/wiki/Copyleft>`__ contamination. Check out | |
147 the `license compatibility matrix on Wikipedia | |
201 | 148 <https://en.wikipedia.org/wiki/License_compatibility#Compatibility_of_FOSS_licenses>`__. |
203 | 149 Here is the corresponding entry about this topic in the `GPL FAQ |
150 <https://www.gnu.org/licenses/gpl-faq.en.html#GPLPlugins>`__: *"If | |
151 the main program dynamically links plug-ins, and they make function | |
152 calls to each other and share data structures, we believe they form | |
153 a single combined program, which must be treated as an extension of | |
154 both the main program and the plug-ins. [...] If the main program | |
155 and the plugins are a single combined program then this means you | |
156 must license the plug-in under the GPL or a GPL-compatible free | |
157 software license and distribute it with source code in a | |
158 GPL-compliant way."* | |
201 | 159 |
160 * If you deal with medical applications in Europe, note that Osimis | |
161 sells **CE-approved** versions of a Web viewer plugin. | |
162 | |
163 * You are kindly invited to cite the `reference paper about Orthanc | |
358
011b01ccf52d
fixing external hyperlinks
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
353
diff
changeset
|
164 <https://link.springer.com/article/10.1007/s10278-018-0082-y>`__ |
201 | 165 in your scientific work. |
166 | |
202 | 167 * This is our own simplified, technical interpretation of the GPLv3+ |
168 and AGPLv3+ in the very specific context of Orthanc. It is not | |
169 intended to be a complete guide to copyleft licensing. Please get in | |
170 touch with the `Free Software Foundation <https://www.fsf.org/>`__ | |
171 for more legal information. | |
199 | 172 |
173 | |
174 .. _cla: | |
175 | |
176 Contributing to the code of Orthanc | |
177 ----------------------------------- | |
178 | |
202 | 179 Contributed vs. internal code |
199 | 180 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ |
181 | |
202 | 182 It is important to make the distinction between contributed code and |
183 internal code: | |
199 | 184 |
202 | 185 * **Contributed code** refers to source code that takes advantage of |
199 | 186 Orthanc and/or that extends Orthanc, such as new :ref:`plugins |
187 <plugins>`, :ref:`Lua scripts <lua>`, or any higher-level | |
188 application that uses the :ref:`REST API <rest>` of Orthanc. This | |
189 code can live outside of the official source repositories of the | |
202 | 190 Orthanc ecosystem. External contributors can distribute such |
191 contributed code on whatever platform they prefer, in a way that is | |
192 fully uncoupled from the Orthanc project, and keep the intellectual | |
199 | 193 property of their developments. Such contributors are however kindly |
194 invited to index their contributions in the `dedicated repository on | |
203 | 195 GitHub <https://github.com/jodogne/OrthancContributed>`__, and |
196 contributed plugins should also be indexed in the :ref:`Orthanc Book | |
197 <plugins-contributed>`. | |
199 | 198 |
199 * **Internal code** refers to source code that only makes sense if | |
200 embedded within the Orthanc core or within one of the official | |
201 plugins. This includes new features and bugfixes. The way to | |
202 contribute to the internal code of the Orthanc ecosystem is | |
203 described in the sections below. | |
204 | |
205 | |
204 | 206 **Important:** You should always favor the :ref:`creation of a new |
207 plugin <creating-plugins>` over modifications to the internal code | |
208 (see below)! | |
209 | |
210 | |
199 | 211 |
212 Contributor License Agreement | |
213 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | |
214 | |
215 It is necessary for the Orthanc project to make sure that the internal | |
216 code of Orthanc can be interfaced with proprietary systems, as those | |
217 are still unfortunately everywhere in the healthcare market. This | |
218 forces us to require all the intellectual property over the source | |
219 code of Orthanc to be centralized, with the University Hospital of | |
844 | 220 Liège, the Osimis company and the UCLouvain university acting as the |
221 official guardians of the whole Orthanc ecosystem. This centralization | |
222 also enables the dual licensing scheme described above, which in turn | |
199 | 223 allows Osimis to collect money from the industry in order to fund |
224 further free and open-source development of the Orthanc ecosystem to | |
225 the benefit of the worldwide community of medical imaging, according | |
226 to a virtuous cycle. | |
227 | |
228 As a consequence, before any code can be accepted into the official | |
229 repositories of Orthanc, the individual code contributors must sign a | |
230 `Contributor License Agreement (CLA) | |
231 <https://en.wikipedia.org/wiki/Contributor_License_Agreement>`__. Here | |
232 is the procedure: | |
233 | |
234 1. Download the individual CLA (ICLA) form from the `Orthanc homepage | |
235 <https://www.orthanc-server.com/resources/2019-02-12-IndividualContributorLicenseAgreementOrthanc.pdf>`__. | |
236 | |
237 2. Print the document, then write down your signed initials on pages 1 | |
238 and 2, and sign page 3. | |
239 | |
240 3. Return a scanned copy of the document to e-mail ``orthanc-legal@osimis.io``. | |
241 | |
242 4. Wait for confirmation from the Osimis company. | |
243 | |
244 **Important:** This form is only valid for individual contributors | |
245 acting as physical persons. If your company wishes to become | |
202 | 246 contributor as a juridical person, please request a Corporate CLA at |
247 the same e-mail address: ``orthanc-legal@osimis.io``. | |
199 | 248 |
249 | |
361 | 250 .. _submitting_code: |
251 | |
199 | 252 Submitting code |
253 ^^^^^^^^^^^^^^^ | |
254 | |
255 Once the CLA onboarding process has succeeded, use `Mercurial | |
256 <https://en.wikipedia.org/wiki/Mercurial>`__ to fork the official | |
445
987fbbc2b59e
leaving bitbucket wrt. bug tracker
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
361
diff
changeset
|
257 repository of interest. All the repositories are centralized on our |
991
1316bc62b5d5
migration to UCLouvain servers
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
984
diff
changeset
|
258 `self-hosted Mercurial server <https://orthanc.uclouvain.be/hg/>`__. |
199 | 259 |
361 | 260 A :ref:`dedicated page <repositories>` explains how to submit |
261 :ref:`simple patches <hg-patch>` or :ref:`full branches <hg-bundle>`. | |
199 | 262 |
263 **Some words of warning:** | |
264 | |
265 * It is your responsibility to make sure that you have the | |
266 intellectual property over all the source code you commit into | |
267 Orthanc. | |
268 | |
269 * In the case of a doubt wrt. a potential contribution, please discuss | |
984
46e2941b57dd
replace link to google users group by link to discourse
Alain Mazy <am@osimis.io>
parents:
844
diff
changeset
|
270 it on the `Orthanc Users discussion forum |
46e2941b57dd
replace link to google users group by link to discourse
Alain Mazy <am@osimis.io>
parents:
844
diff
changeset
|
271 <https://discourse.orthanc-server.org>`__ |
199 | 272 discussion group before starting the actual development. |