A place to cache linked articles (think custom and personal wayback machine)
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

index.html 13KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241
  1. <!doctype html><!-- This is a valid HTML5 document. -->
  2. <!-- Screen readers, SEO, extensions and so on. -->
  3. <html lang="en">
  4. <!-- Has to be within the first 1024 bytes, hence before the `title` element
  5. See: https://www.w3.org/TR/2012/CR-html5-20121217/document-metadata.html#charset -->
  6. <meta charset="utf-8">
  7. <!-- Why no `X-UA-Compatible` meta: https://stackoverflow.com/a/6771584 -->
  8. <!-- The viewport meta is quite crowded and we are responsible for that.
  9. See: https://codepen.io/tigt/post/meta-viewport-for-2015 -->
  10. <meta name="viewport" content="width=device-width,initial-scale=1">
  11. <!-- Required to make a valid HTML5 document. -->
  12. <title>The fundamentals of the AGPLv3 (archive) — David Larlet</title>
  13. <meta name="description" content="Publication mise en cache pour en conserver une trace.">
  14. <!-- That good ol' feed, subscribe :). -->
  15. <link rel="alternate" type="application/atom+xml" title="Feed" href="/david/log/">
  16. <!-- Generated from https://realfavicongenerator.net/ such a mess. -->
  17. <link rel="apple-touch-icon" sizes="180x180" href="/static/david/icons2/apple-touch-icon.png">
  18. <link rel="icon" type="image/png" sizes="32x32" href="/static/david/icons2/favicon-32x32.png">
  19. <link rel="icon" type="image/png" sizes="16x16" href="/static/david/icons2/favicon-16x16.png">
  20. <link rel="manifest" href="/static/david/icons2/site.webmanifest">
  21. <link rel="mask-icon" href="/static/david/icons2/safari-pinned-tab.svg" color="#07486c">
  22. <link rel="shortcut icon" href="/static/david/icons2/favicon.ico">
  23. <meta name="msapplication-TileColor" content="#f7f7f7">
  24. <meta name="msapplication-config" content="/static/david/icons2/browserconfig.xml">
  25. <meta name="theme-color" content="#f7f7f7" media="(prefers-color-scheme: light)">
  26. <meta name="theme-color" content="#272727" media="(prefers-color-scheme: dark)">
  27. <!-- Is that even respected? Retrospectively? What a shAItshow…
  28. https://neil-clarke.com/block-the-bots-that-feed-ai-models-by-scraping-your-website/ -->
  29. <meta name="robots" content="noai, noimageai">
  30. <!-- Documented, feel free to shoot an email. -->
  31. <link rel="stylesheet" href="/static/david/css/style_2021-01-20.css">
  32. <!-- See https://www.zachleat.com/web/comprehensive-webfonts/ for the trade-off. -->
  33. <link rel="preload" href="/static/david/css/fonts/triplicate_t4_poly_regular.woff2" as="font" type="font/woff2" media="(prefers-color-scheme: light), (prefers-color-scheme: no-preference)" crossorigin>
  34. <link rel="preload" href="/static/david/css/fonts/triplicate_t4_poly_bold.woff2" as="font" type="font/woff2" media="(prefers-color-scheme: light), (prefers-color-scheme: no-preference)" crossorigin>
  35. <link rel="preload" href="/static/david/css/fonts/triplicate_t4_poly_italic.woff2" as="font" type="font/woff2" media="(prefers-color-scheme: light), (prefers-color-scheme: no-preference)" crossorigin>
  36. <link rel="preload" href="/static/david/css/fonts/triplicate_t3_regular.woff2" as="font" type="font/woff2" media="(prefers-color-scheme: dark)" crossorigin>
  37. <link rel="preload" href="/static/david/css/fonts/triplicate_t3_bold.woff2" as="font" type="font/woff2" media="(prefers-color-scheme: dark)" crossorigin>
  38. <link rel="preload" href="/static/david/css/fonts/triplicate_t3_italic.woff2" as="font" type="font/woff2" media="(prefers-color-scheme: dark)" crossorigin>
  39. <script>
  40. function toggleTheme(themeName) {
  41. document.documentElement.classList.toggle(
  42. 'forced-dark',
  43. themeName === 'dark'
  44. )
  45. document.documentElement.classList.toggle(
  46. 'forced-light',
  47. themeName === 'light'
  48. )
  49. }
  50. const selectedTheme = localStorage.getItem('theme')
  51. if (selectedTheme !== 'undefined') {
  52. toggleTheme(selectedTheme)
  53. }
  54. </script>
  55. <meta name="robots" content="noindex, nofollow">
  56. <meta content="origin-when-cross-origin" name="referrer">
  57. <!-- Canonical URL for SEO purposes -->
  58. <link rel="canonical" href="https://www.fsf.org/bulletin/2021/fall/the-fundamentals-of-the-agplv3">
  59. <body class="remarkdown h1-underline h2-underline h3-underline em-underscore hr-center ul-star pre-tick" data-instant-intensity="viewport-all">
  60. <article>
  61. <header>
  62. <h1>The fundamentals of the AGPLv3</h1>
  63. </header>
  64. <nav>
  65. <p class="center">
  66. <a href="/david/" title="Aller à l’accueil"><svg class="icon icon-home">
  67. <use xlink:href="/static/david/icons2/symbol-defs-2021-12.svg#icon-home"></use>
  68. </svg> Accueil</a> •
  69. <a href="https://www.fsf.org/bulletin/2021/fall/the-fundamentals-of-the-agplv3" title="Lien vers le contenu original">Source originale</a>
  70. <br>
  71. Mis en cache le 2024-02-17
  72. </p>
  73. </nav>
  74. <hr>
  75. <p>The GNU Affero General Public License version 3 (AGPLv3) is the most
  76. protective of computer user freedom, yet it remains the most
  77. misunderstood of the GNU family of licenses. The AGPLv3 was created to
  78. solve a very specific problem: how to protect a user’s rights when the
  79. program in question is being utilized over a network. In this article
  80. we will cover where it came from, how we benefit from it, and why a
  81. developer should consider it.</p>
  82. <p>The <a href="https://www.gnu.org/licenses/agpl-3.0.html">AGPLv3</a> traces its origins to a company called Affero,
  83. Inc. Affero was established in 2001, and they provided a platform for
  84. interactive “Web applications” like discussion forums, mailing lists,
  85. email, and blogs. Affero wanted to be sure that users could access the
  86. source code for these applications, and that anyone who built
  87. derivatives from them would also share alike. The copyleft license of
  88. choice at the time was the GNU General Public License version two
  89. (GPLv2). However, the GPLv2 was written when the client/server
  90. paradigm was not widespread; it could not provide the copyleft
  91. assurance desired for Affero's platform. That is to say, one could
  92. obtain Affero’s source code, modify it, and allow users access to the
  93. program over a network without the obligation of releasing its source
  94. code to the public. With this dilemma in mind and some help from the
  95. FSF, the Affero General Public License version one (AGPLv1) was
  96. published in March 2002 by Affero. In November of 2007, the AGPL
  97. joined the GNU family of licenses with version three, giving us a
  98. freedom-protecting copyleft license for an increasingly networked
  99. world.</p>
  100. <p>Simply put, the AGPLv3 is effectively the GPLv3, but with an
  101. additional licensing term that ensures that users who interact over a
  102. network with modified versions of the program can receive the source
  103. code for that program. In both licenses, sections four through six
  104. provide the terms that give users the right to receive the source code
  105. of a program. These terms cover the distribution of verbatim or
  106. modified source code as well as compiled executable binaries. However,
  107. they only apply when a program is distributed, or more specifically,
  108. conveyed to a recipient. Using a program over a network is not
  109. "conveying." It is important to note that this only applies to the
  110. code running on the server, and not for example to the JavaScript
  111. programs that your browser may download and run locally — these <em>are</em>
  112. conveyed to you.</p>
  113. <p>The AGPLv3 does not adjust or expand the definition of
  114. conveying. Instead, it includes an additional right that if the
  115. program is expressly designed to accept user requests and send
  116. responses over a network, the user is entitled to receive the source
  117. code of the version being used. For license compatibility reasons,
  118. written into section 13 of both the GPLv3 and the AGPLv3 is the
  119. explicit permission to link or combine any covered work under the
  120. other license. Paraphrased from the GPLv3 section 13; you have
  121. permission to link or combine any covered work with a work licensed
  122. under the AGPLv3 into a single combined work. The GPLv3 license will
  123. continue to apply to the part which is the covered work, but the
  124. special requirements of the AGPLv3, section 13, will apply to the
  125. combined work.</p>
  126. <p>When confronted with a choice between the AGPLv3 and GPLv3, a
  127. developer may think that their program doesn’t need the extra
  128. protection afforded by the AGPLv3, but who knows what the future may
  129. hold! For now, their program does not get used over a network, but
  130. someday it might. We encourage developers to consider carefully
  131. whether their program <em>could</em> be deployed by someone else as part of a
  132. network service. By choosing the AGPLv3 (or any later version) in
  133. these situations, the developer can future-proof their program in case
  134. someone takes the project in that direction.</p>
  135. <p>See the <a href="https://www.gnu.org/licenses/why-affero-gpl.html">Why the Affero GPL</a>? licensing page for more information
  136. when considering the AGPLv3. To learn more about the AGPL and the GNU
  137. family of licenses visit <a href="https://www.gnu.org/licenses/gpl-faq.html">Frequently Asked Questions about the GNU
  138. Licenses</a>.</p>
  139. <p><em>Copyright © 2021 Free Software Foundation, Inc. This article is individually licensed under the Creative Commons <a href="https://creativecommons.org/licenses/by-sa/4.0/">Attribution-ShareAlike 4.0 International license</a>.</em></p>
  140. </article>
  141. <hr>
  142. <footer>
  143. <p>
  144. <a href="/david/" title="Aller à l’accueil"><svg class="icon icon-home">
  145. <use xlink:href="/static/david/icons2/symbol-defs-2021-12.svg#icon-home"></use>
  146. </svg> Accueil</a> •
  147. <a href="/david/log/" title="Accès au flux RSS"><svg class="icon icon-rss2">
  148. <use xlink:href="/static/david/icons2/symbol-defs-2021-12.svg#icon-rss2"></use>
  149. </svg> Suivre</a> •
  150. <a href="http://larlet.com" title="Go to my English profile" data-instant><svg class="icon icon-user-tie">
  151. <use xlink:href="/static/david/icons2/symbol-defs-2021-12.svg#icon-user-tie"></use>
  152. </svg> Pro</a> •
  153. <a href="mailto:david%40larlet.fr" title="Envoyer un courriel"><svg class="icon icon-mail">
  154. <use xlink:href="/static/david/icons2/symbol-defs-2021-12.svg#icon-mail"></use>
  155. </svg> Email</a> •
  156. <abbr class="nowrap" title="Hébergeur : Alwaysdata, 62 rue Tiquetonne 75002 Paris, +33184162340"><svg class="icon icon-hammer2">
  157. <use xlink:href="/static/david/icons2/symbol-defs-2021-12.svg#icon-hammer2"></use>
  158. </svg> Légal</abbr>
  159. </p>
  160. <template id="theme-selector">
  161. <form>
  162. <fieldset>
  163. <legend><svg class="icon icon-brightness-contrast">
  164. <use xlink:href="/static/david/icons2/symbol-defs-2021-12.svg#icon-brightness-contrast"></use>
  165. </svg> Thème</legend>
  166. <label>
  167. <input type="radio" value="auto" name="chosen-color-scheme" checked> Auto
  168. </label>
  169. <label>
  170. <input type="radio" value="dark" name="chosen-color-scheme"> Foncé
  171. </label>
  172. <label>
  173. <input type="radio" value="light" name="chosen-color-scheme"> Clair
  174. </label>
  175. </fieldset>
  176. </form>
  177. </template>
  178. </footer>
  179. <script src="/static/david/js/instantpage-5.1.0.min.js" type="module"></script>
  180. <script>
  181. function loadThemeForm(templateName) {
  182. const themeSelectorTemplate = document.querySelector(templateName)
  183. const form = themeSelectorTemplate.content.firstElementChild
  184. themeSelectorTemplate.replaceWith(form)
  185. form.addEventListener('change', (e) => {
  186. const chosenColorScheme = e.target.value
  187. localStorage.setItem('theme', chosenColorScheme)
  188. toggleTheme(chosenColorScheme)
  189. })
  190. const selectedTheme = localStorage.getItem('theme')
  191. if (selectedTheme && selectedTheme !== 'undefined') {
  192. form.querySelector(`[value="${selectedTheme}"]`).checked = true
  193. }
  194. }
  195. const prefersColorSchemeDark = '(prefers-color-scheme: dark)'
  196. window.addEventListener('load', () => {
  197. let hasDarkRules = false
  198. for (const styleSheet of Array.from(document.styleSheets)) {
  199. let mediaRules = []
  200. for (const cssRule of styleSheet.cssRules) {
  201. if (cssRule.type !== CSSRule.MEDIA_RULE) {
  202. continue
  203. }
  204. // WARNING: Safari does not have/supports `conditionText`.
  205. if (cssRule.conditionText) {
  206. if (cssRule.conditionText !== prefersColorSchemeDark) {
  207. continue
  208. }
  209. } else {
  210. if (cssRule.cssText.startsWith(prefersColorSchemeDark)) {
  211. continue
  212. }
  213. }
  214. mediaRules = mediaRules.concat(Array.from(cssRule.cssRules))
  215. }
  216. // WARNING: do not try to insert a Rule to a styleSheet you are
  217. // currently iterating on, otherwise the browser will be stuck
  218. // in a infinite loop…
  219. for (const mediaRule of mediaRules) {
  220. styleSheet.insertRule(mediaRule.cssText)
  221. hasDarkRules = true
  222. }
  223. }
  224. if (hasDarkRules) {
  225. loadThemeForm('#theme-selector')
  226. }
  227. })
  228. </script>
  229. </body>
  230. </html>