Mercurial > hg > orthanc-book
annotate Sphinx/source/faq/licensing.rst @ 660:a6e371768a70
dicom-as-json
author | Sebastien Jodogne <s.jodogne@gmail.com> |
---|---|
date | Thu, 29 Apr 2021 12:41:31 +0200 |
parents | 53992cb7fa7f |
children | 41bae819d80b |
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>`, | | | | | | | |
610e6be26a71
some clarification about dual licensing
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
525
diff
changeset
|
88 | creating a :ref:`Lua script <lua>`, or | | | | | | | |
610e6be26a71
some clarification about dual licensing
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
525
diff
changeset
|
89 | creating a :ref:`Python plugin <python-plugin>`. | | | | | | | |
610e6be26a71
some clarification about dual licensing
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
525
diff
changeset
|
90 | 2 possible cases: | | | | | | | |
610e6be26a71
some clarification about dual licensing
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
525
diff
changeset
|
91 +----+------------------------------------------------+---------------+-------+--------+--------------+------------------------+-------------------+ |
610e6be26a71
some clarification about dual licensing
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
525
diff
changeset
|
92 | | 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
|
93 +----+------------------------------------------------+---------------+-------+--------+--------------+------------------------+-------------------+ |
610e6be26a71
some clarification about dual licensing
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
525
diff
changeset
|
94 | | 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
|
95 +----+------------------------------------------------+---------------+-------+--------+--------------+------------------------+-------------------+ |
610e6be26a71
some clarification about dual licensing
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
525
diff
changeset
|
96 | Using a derived version of the GPL-licensed | No | Yes | Yes | Yes | Dual license | Yes | |
525 | 97 | code of Orthanc, or using a derived version of | | | | | | | |
202 | 98 | some GPL-licensed plugin, or reusing their original | | | | | | | |
99 | code in a third-party system | | | | | | | | |
199 | 100 +-----------------------------------------------------+---------------+-------+--------+--------------+------------------------+-------------------+ |
533
610e6be26a71
some clarification about dual licensing
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
525
diff
changeset
|
101 | Using a derived version of some AGPL-licensed | No | No | Yes | Yes | Dual license | Dual license | |
202 | 102 | plugin, or reusing its original code in a | | | | | | | |
103 | third-party system | | | | | | | | |
199 | 104 +-----------------------------------------------------+---------------+-------+--------+--------------+------------------------+-------------------+ |
533
610e6be26a71
some clarification about dual licensing
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
525
diff
changeset
|
105 | **For viewers**: Using a derived version of the | No | No | Yes | Yes | Dual license | Dual license | |
524 | 106 | :ref:`Orthanc Web Viewer <webviewer>`, of the | | | | | | | |
525 | 107 | :ref:`Osimis Web Viewer <osimis_webviewer>`, of the | | | | | | | |
523 | 108 | :ref:`Stone Web Viewer <stone>`, or of the sample | | | | | | | |
109 | applications of Stone of Orthanc (AGPL license) | | | | | | | | |
199 | 110 +-----------------------------------------------------+---------------+-------+--------+--------------+------------------------+-------------------+ |
111 | |
533
610e6be26a71
some clarification about dual licensing
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
525
diff
changeset
|
112 .. raw:: html |
610e6be26a71
some clarification about dual licensing
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
525
diff
changeset
|
113 |
610e6be26a71
some clarification about dual licensing
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
525
diff
changeset
|
114 <p align="center"> |
610e6be26a71
some clarification about dual licensing
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
525
diff
changeset
|
115 <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
|
116 <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
|
117 </a> |
610e6be26a71
some clarification about dual licensing
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
525
diff
changeset
|
118 </p> |
610e6be26a71
some clarification about dual licensing
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
525
diff
changeset
|
119 |
610e6be26a71
some clarification about dual licensing
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
525
diff
changeset
|
120 |
201 | 121 **Notes:** |
122 | |
123 * The wording "third-party system" is very broad, as it encompasses | |
124 many possibilities. It can for instance be a Web application, a | |
125 heavyweight desktop application, an automated script, or more | |
202 | 126 generally any system that takes advantage of Orthanc as a service in |
127 its global architecture. | |
201 | 128 |
533
610e6be26a71
some clarification about dual licensing
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
525
diff
changeset
|
129 * 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
|
130 touch with `Osimis <https://www.osimis.io/>`__, the commercial |
011b01ccf52d
fixing external hyperlinks
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
353
diff
changeset
|
131 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
|
132 grant a `license exception |
201 | 133 <https://www.fsf.org/blogs/rms/selling-exceptions>`__ to your |
202 | 134 company for the Orthanc core and its :ref:`associated official |
135 plugins <plugins-official>`. | |
201 | 136 |
137 * If you reuse code from Orthanc or one of its associated plugins, you | |
138 must mention the copyright of the Orthanc project. | |
199 | 139 |
201 | 140 * An Orthanc plugin cannot be licensed under a permissive license |
203 | 141 (MIT, BSD, Apache...) because it cannot run independently of the |
142 Orthanc SDK, which implies that the plugin and the Orthanc core form | |
143 a single combined program, which in turn means that the plugin | |
144 should be licensed under GPLv3 by `copyleft | |
145 <https://en.wikipedia.org/wiki/Copyleft>`__ contamination. Check out | |
146 the `license compatibility matrix on Wikipedia | |
201 | 147 <https://en.wikipedia.org/wiki/License_compatibility#Compatibility_of_FOSS_licenses>`__. |
203 | 148 Here is the corresponding entry about this topic in the `GPL FAQ |
149 <https://www.gnu.org/licenses/gpl-faq.en.html#GPLPlugins>`__: *"If | |
150 the main program dynamically links plug-ins, and they make function | |
151 calls to each other and share data structures, we believe they form | |
152 a single combined program, which must be treated as an extension of | |
153 both the main program and the plug-ins. [...] If the main program | |
154 and the plugins are a single combined program then this means you | |
155 must license the plug-in under the GPL or a GPL-compatible free | |
156 software license and distribute it with source code in a | |
157 GPL-compliant way."* | |
201 | 158 |
159 * If you deal with medical applications in Europe, note that Osimis | |
160 sells **CE-approved** versions of a Web viewer plugin. | |
161 | |
162 * 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
|
163 <https://link.springer.com/article/10.1007/s10278-018-0082-y>`__ |
201 | 164 in your scientific work. |
165 | |
202 | 166 * This is our own simplified, technical interpretation of the GPLv3+ |
167 and AGPLv3+ in the very specific context of Orthanc. It is not | |
168 intended to be a complete guide to copyleft licensing. Please get in | |
169 touch with the `Free Software Foundation <https://www.fsf.org/>`__ | |
170 for more legal information. | |
199 | 171 |
172 | |
173 .. _cla: | |
174 | |
175 Contributing to the code of Orthanc | |
176 ----------------------------------- | |
177 | |
202 | 178 Contributed vs. internal code |
199 | 179 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ |
180 | |
202 | 181 It is important to make the distinction between contributed code and |
182 internal code: | |
199 | 183 |
202 | 184 * **Contributed code** refers to source code that takes advantage of |
199 | 185 Orthanc and/or that extends Orthanc, such as new :ref:`plugins |
186 <plugins>`, :ref:`Lua scripts <lua>`, or any higher-level | |
187 application that uses the :ref:`REST API <rest>` of Orthanc. This | |
188 code can live outside of the official source repositories of the | |
202 | 189 Orthanc ecosystem. External contributors can distribute such |
190 contributed code on whatever platform they prefer, in a way that is | |
191 fully uncoupled from the Orthanc project, and keep the intellectual | |
199 | 192 property of their developments. Such contributors are however kindly |
193 invited to index their contributions in the `dedicated repository on | |
203 | 194 GitHub <https://github.com/jodogne/OrthancContributed>`__, and |
195 contributed plugins should also be indexed in the :ref:`Orthanc Book | |
196 <plugins-contributed>`. | |
199 | 197 |
198 * **Internal code** refers to source code that only makes sense if | |
199 embedded within the Orthanc core or within one of the official | |
200 plugins. This includes new features and bugfixes. The way to | |
201 contribute to the internal code of the Orthanc ecosystem is | |
202 described in the sections below. | |
203 | |
204 | |
204 | 205 **Important:** You should always favor the :ref:`creation of a new |
206 plugin <creating-plugins>` over modifications to the internal code | |
207 (see below)! | |
208 | |
209 | |
199 | 210 |
211 Contributor License Agreement | |
212 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | |
213 | |
214 It is necessary for the Orthanc project to make sure that the internal | |
215 code of Orthanc can be interfaced with proprietary systems, as those | |
216 are still unfortunately everywhere in the healthcare market. This | |
217 forces us to require all the intellectual property over the source | |
218 code of Orthanc to be centralized, with the University Hospital of | |
219 Liège together with the Osimis company acting as the official | |
220 guardians of the whole Orthanc ecosystem. This centralization also | |
221 enables the dual licensing scheme described above, which in turn | |
222 allows Osimis to collect money from the industry in order to fund | |
223 further free and open-source development of the Orthanc ecosystem to | |
224 the benefit of the worldwide community of medical imaging, according | |
225 to a virtuous cycle. | |
226 | |
227 As a consequence, before any code can be accepted into the official | |
228 repositories of Orthanc, the individual code contributors must sign a | |
229 `Contributor License Agreement (CLA) | |
230 <https://en.wikipedia.org/wiki/Contributor_License_Agreement>`__. Here | |
231 is the procedure: | |
232 | |
233 1. Download the individual CLA (ICLA) form from the `Orthanc homepage | |
234 <https://www.orthanc-server.com/resources/2019-02-12-IndividualContributorLicenseAgreementOrthanc.pdf>`__. | |
235 | |
236 2. Print the document, then write down your signed initials on pages 1 | |
237 and 2, and sign page 3. | |
238 | |
239 3. Return a scanned copy of the document to e-mail ``orthanc-legal@osimis.io``. | |
240 | |
241 4. Wait for confirmation from the Osimis company. | |
242 | |
243 **Important:** This form is only valid for individual contributors | |
244 acting as physical persons. If your company wishes to become | |
202 | 245 contributor as a juridical person, please request a Corporate CLA at |
246 the same e-mail address: ``orthanc-legal@osimis.io``. | |
199 | 247 |
248 | |
361 | 249 .. _submitting_code: |
250 | |
199 | 251 Submitting code |
252 ^^^^^^^^^^^^^^^ | |
253 | |
254 Once the CLA onboarding process has succeeded, use `Mercurial | |
255 <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
|
256 repository of interest. All the repositories are centralized on our |
987fbbc2b59e
leaving bitbucket wrt. bug tracker
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
361
diff
changeset
|
257 `self-hosted Mercurial server <https://hg.orthanc-server.com/>`__. |
199 | 258 |
361 | 259 A :ref:`dedicated page <repositories>` explains how to submit |
260 :ref:`simple patches <hg-patch>` or :ref:`full branches <hg-bundle>`. | |
199 | 261 |
262 **Some words of warning:** | |
263 | |
264 * It is your responsibility to make sure that you have the | |
265 intellectual property over all the source code you commit into | |
266 Orthanc. | |
267 | |
268 * In the case of a doubt wrt. a potential contribution, please discuss | |
269 it on the `Orthanc Users | |
270 <https://groups.google.com/forum/#!forum/orthanc-users>`__ | |
271 discussion group before starting the actual development. |