A place to cache linked articles (think custom and personal wayback machine)
您最多选择25个主题 主题必须以字母或数字开头,可以包含连字符 (-),并且长度不得超过35个字符

index.html 13KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230
  1. <!doctype html><!-- This is a valid HTML5 document. -->
  2. <!-- Screen readers, SEO, extensions and so on. -->
  3. <html lang="fr">
  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>Is GitHub a derivative work of GPL’d software? (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. <!-- Documented, feel free to shoot an email. -->
  28. <link rel="stylesheet" href="/static/david/css/style_2021-01-20.css">
  29. <!-- See https://www.zachleat.com/web/comprehensive-webfonts/ for the trade-off. -->
  30. <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>
  31. <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>
  32. <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>
  33. <link rel="preload" href="/static/david/css/fonts/triplicate_t3_regular.woff2" as="font" type="font/woff2" media="(prefers-color-scheme: dark)" crossorigin>
  34. <link rel="preload" href="/static/david/css/fonts/triplicate_t3_bold.woff2" as="font" type="font/woff2" media="(prefers-color-scheme: dark)" crossorigin>
  35. <link rel="preload" href="/static/david/css/fonts/triplicate_t3_italic.woff2" as="font" type="font/woff2" media="(prefers-color-scheme: dark)" crossorigin>
  36. <script>
  37. function toggleTheme(themeName) {
  38. document.documentElement.classList.toggle(
  39. 'forced-dark',
  40. themeName === 'dark'
  41. )
  42. document.documentElement.classList.toggle(
  43. 'forced-light',
  44. themeName === 'light'
  45. )
  46. }
  47. const selectedTheme = localStorage.getItem('theme')
  48. if (selectedTheme !== 'undefined') {
  49. toggleTheme(selectedTheme)
  50. }
  51. </script>
  52. <meta name="robots" content="noindex, nofollow">
  53. <meta content="origin-when-cross-origin" name="referrer">
  54. <!-- Canonical URL for SEO purposes -->
  55. <link rel="canonical" href="https://drewdevault.com/2021/07/04/Is-GitHub-a-derivative-work.html">
  56. <body class="remarkdown h1-underline h2-underline h3-underline em-underscore hr-center ul-star pre-tick" data-instant-intensity="viewport-all">
  57. <article>
  58. <header>
  59. <h1>Is GitHub a derivative work of GPL’d software?</h1>
  60. </header>
  61. <nav>
  62. <p class="center">
  63. <a href="/david/" title="Aller à l’accueil"><svg class="icon icon-home">
  64. <use xlink:href="/static/david/icons2/symbol-defs-2021-12.svg#icon-home"></use>
  65. </svg> Accueil</a> •
  66. <a href="https://drewdevault.com/2021/07/04/Is-GitHub-a-derivative-work.html" title="Lien vers le contenu original">Source originale</a>
  67. </p>
  68. </nav>
  69. <hr>
  70. <p>GitHub recently announced a tool called <a href="https://copilot.github.com">Copilot</a>, a tool which uses machine
  71. learning to provide code suggestions, inciting no small degree of controversy.
  72. One particular facet of the ensuing discussion piques my curiosity: what happens
  73. if the model was trained using software licensed with the GNU General Public
  74. License?</p>
  75. <p><em>Disclaimer: I am the founder of a company which competes with GitHub.</em></p>
  76. <p>The GPL is among a family of licenses considered “copyleft”, which are
  77. characterized by their “viral” nature. In particular, the trait common to
  78. copyleft works is the requirement that “derivative works” are required to
  79. publish their new work under the same terms as the original copyleft license.
  80. Some weak copyleft licenses, like the Mozilla Public License, only apply to any
  81. changes to specific files from the original code. Stronger licenses like the GPL
  82. family affect the broader work that any GPL’d code has been incorporated into.</p>
  83. <p><a href="https://twitter.com/mitsuhiko/status/1410886329924194309">A recent tweet by @mitsuhiko</a> notes that Copilot can be caused to
  84. produce, verbatim, the famous fast inverse square root function from Quake III
  85. Arena: a codebase distributed under the GNU GPL 2.0 license. This raises an
  86. interesting legal question: is the work produced by a machine learning system,
  87. or even the machine learning system itself, a derivative work of the inputs to
  88. the model? <a href="https://twitter.com/eevee/status/1410037309848752128">Another tweet</a> suggests that, if the answer is “no”,
  89. GitHub Copilot can be used as a means of washing the GPL off of code you want to
  90. use without obeying its license. But, what if the answer is “yes”?</p>
  91. <p>I won’t take a position on this question, but I will point out something
  92. interesting: if the answer is “<em>yes</em>, machine learning models create derivative
  93. works of their inputs”, then GitHub may itself now be considered a derivative
  94. work of copyleft software. Consider this statement from GitHub’s blog post on
  95. the subject:</p>
  96. <blockquote>
  97. <p>During GitHub Copilot’s early development, nearly 300 employees used it in
  98. their daily work as part of an internal trial.</p>
  99. </blockquote>
  100. <p>— <a href="https://docs.github.com/en/github/copilot/research-recitation">Albert Ziegler: A first look at rote learning in GitHub Copilot suggestions</a></p>
  101. <p>If 300 GitHub employees used Copilot as part of their daily workflow, they are
  102. likely to have incorporated the output of Copilot into nearly every software
  103. property of GitHub, which provides network services to users. If the model was
  104. trained on software using the GNU Affero General Public License (AGPL), and the
  105. use of this model created a derivative work, this may entitle all GitHub users
  106. to receive a copy of GitHub’s source code under the terms of the AGPL,
  107. effectively forcing GitHub to become an open source project. I’m normally
  108. against GPL enforcement by means of pulling the rug out from underneath someone
  109. who made an honest mistake, but in this case it would certainly be a
  110. fascinating case of comeuppance.</p>
  111. <p>Following the Copilot announcement, many of the ensuing discussions hinted to me
  112. at a broader divide in the technology community with respect to machine
  113. learning. I’ve seen many discussions having to wrestle with philosophical
  114. differences between participants, who give different answers to more fundamental
  115. questions regarding the ethics of machine learning: what rights should be, and
  116. are, afforded to the owners of the content which is incorporated into training
  117. data for machine learning? If I want to publish a work which I <em>don’t</em> want to
  118. be incorporated into a model, or which, if used for a model, would entitle the
  119. public to access to that model, could I? Ought I be allowed to? What if the work
  120. being used is my personal information, collected without my knowledge or
  121. consent? What if the information is used against me, for example in making
  122. lending decisions? What if it’s used against society’s interests at large?</p>
  123. <p>The differences of opinion I’ve seen in the discussions born from this
  124. announcement seem to suggest a substantial divide over machine learning, which
  125. the tech community may have yet to address, or even understand the depth of. I
  126. predict that GitHub Copilot will mark one of several inciting events which start
  127. to rub some of the glamour off of machine learning technology and gets us
  128. thinking about the ethical questions it presents.</p>
  129. </article>
  130. <hr>
  131. <footer>
  132. <p>
  133. <a href="/david/" title="Aller à l’accueil"><svg class="icon icon-home">
  134. <use xlink:href="/static/david/icons2/symbol-defs-2021-12.svg#icon-home"></use>
  135. </svg> Accueil</a> •
  136. <a href="/david/log/" title="Accès au flux RSS"><svg class="icon icon-rss2">
  137. <use xlink:href="/static/david/icons2/symbol-defs-2021-12.svg#icon-rss2"></use>
  138. </svg> Suivre</a> •
  139. <a href="http://larlet.com" title="Go to my English profile" data-instant><svg class="icon icon-user-tie">
  140. <use xlink:href="/static/david/icons2/symbol-defs-2021-12.svg#icon-user-tie"></use>
  141. </svg> Pro</a> •
  142. <a href="mailto:david%40larlet.fr" title="Envoyer un courriel"><svg class="icon icon-mail">
  143. <use xlink:href="/static/david/icons2/symbol-defs-2021-12.svg#icon-mail"></use>
  144. </svg> Email</a> •
  145. <abbr class="nowrap" title="Hébergeur : Alwaysdata, 62 rue Tiquetonne 75002 Paris, +33184162340"><svg class="icon icon-hammer2">
  146. <use xlink:href="/static/david/icons2/symbol-defs-2021-12.svg#icon-hammer2"></use>
  147. </svg> Légal</abbr>
  148. </p>
  149. <template id="theme-selector">
  150. <form>
  151. <fieldset>
  152. <legend><svg class="icon icon-brightness-contrast">
  153. <use xlink:href="/static/david/icons2/symbol-defs-2021-12.svg#icon-brightness-contrast"></use>
  154. </svg> Thème</legend>
  155. <label>
  156. <input type="radio" value="auto" name="chosen-color-scheme" checked> Auto
  157. </label>
  158. <label>
  159. <input type="radio" value="dark" name="chosen-color-scheme"> Foncé
  160. </label>
  161. <label>
  162. <input type="radio" value="light" name="chosen-color-scheme"> Clair
  163. </label>
  164. </fieldset>
  165. </form>
  166. </template>
  167. </footer>
  168. <script src="/static/david/js/instantpage-5.1.0.min.js" type="module"></script>
  169. <script>
  170. function loadThemeForm(templateName) {
  171. const themeSelectorTemplate = document.querySelector(templateName)
  172. const form = themeSelectorTemplate.content.firstElementChild
  173. themeSelectorTemplate.replaceWith(form)
  174. form.addEventListener('change', (e) => {
  175. const chosenColorScheme = e.target.value
  176. localStorage.setItem('theme', chosenColorScheme)
  177. toggleTheme(chosenColorScheme)
  178. })
  179. const selectedTheme = localStorage.getItem('theme')
  180. if (selectedTheme && selectedTheme !== 'undefined') {
  181. form.querySelector(`[value="${selectedTheme}"]`).checked = true
  182. }
  183. }
  184. const prefersColorSchemeDark = '(prefers-color-scheme: dark)'
  185. window.addEventListener('load', () => {
  186. let hasDarkRules = false
  187. for (const styleSheet of Array.from(document.styleSheets)) {
  188. let mediaRules = []
  189. for (const cssRule of styleSheet.cssRules) {
  190. if (cssRule.type !== CSSRule.MEDIA_RULE) {
  191. continue
  192. }
  193. // WARNING: Safari does not have/supports `conditionText`.
  194. if (cssRule.conditionText) {
  195. if (cssRule.conditionText !== prefersColorSchemeDark) {
  196. continue
  197. }
  198. } else {
  199. if (cssRule.cssText.startsWith(prefersColorSchemeDark)) {
  200. continue
  201. }
  202. }
  203. mediaRules = mediaRules.concat(Array.from(cssRule.cssRules))
  204. }
  205. // WARNING: do not try to insert a Rule to a styleSheet you are
  206. // currently iterating on, otherwise the browser will be stuck
  207. // in a infinite loop…
  208. for (const mediaRule of mediaRules) {
  209. styleSheet.insertRule(mediaRule.cssText)
  210. hasDarkRules = true
  211. }
  212. }
  213. if (hasDarkRules) {
  214. loadThemeForm('#theme-selector')
  215. }
  216. })
  217. </script>
  218. </body>
  219. </html>