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