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