Repository with sources and generator of https://larlet.fr/david/ https://larlet.fr/david/
選択できるのは25トピックまでです。 トピックは、先頭が英数字で、英数字とダッシュ('-')を使用した35文字以内のものにしてください。

index.html 21KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297
  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>Open-source — David Larlet</title>
  13. <meta name="description" content="[En commentaires de l’article] — But really open-source (as in free) is the misnomer here, it should be called free open-source, or FOSS as some correctly name it. — That battle has been fought already, and the accepted term is “source available”, not “open source”.">
  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. <body class="remarkdown h1-underline h2-underline h3-underline em-underscore hr-center ul-star pre-tick" data-instant-intensity="viewport-all">
  53. <article>
  54. <header>
  55. <h1>Open-source</h1>
  56. </header>
  57. <nav>
  58. <p class="center">
  59. <a rel="prev" href="/david/2022/03/18/" title="Publication précédente : Temps">← Précédent</a> •
  60. <nobr>
  61. <a href="/david/" title="Aller à l’accueil"
  62. ><svg class="icon icon-home">
  63. <use
  64. xlink:href="/static/david/icons2/symbol-defs-2022-03.svg#icon-home"
  65. ></use>
  66. </svg>
  67. Accueil</a
  68. >
  69. </nobr>
  70. <nobr>
  71. <a href="/david/recherche/" title="Aller à la page de recherche"
  72. ><svg class="icon icon-search">
  73. <use
  74. xlink:href="/static/david/icons2/symbol-defs-2022-03.svg#icon-search"
  75. ></use>
  76. </svg>
  77. Recherche</a
  78. >
  79. </nobr>
  80. • <a rel="next" href="/david/2022/04/02/" title="Publication suivante : Recherche">Suivant →</a>
  81. </p>
  82. </nav>
  83. <hr>
  84. <blockquote lang="en">
  85. <p><em>[En commentaires de l’article]</em><br />
  86. — But really open-source (as in free) is the misnomer here, it should be called free open-source, or FOSS as some correctly name it.<br />
  87. — That battle has been fought already, and the accepted term is <mark>“source available”</mark>, not “open&nbsp;source”.</p>
  88. <p><cite><em><a href="https://germano.dev/sse-websockets/#comments">Server-Sent Events: the alternative to WebSockets you should be using</a></em>&nbsp;(<a href="/david/cache/2022/b17f8ac80615c86cade89dd81c8aa50b/">cache</a>)</cite></p>
  89. </blockquote>
  90. <p>Cela fait longtemps que je souhaite aborder ce sujet. Il y a la traditionnelle ambigüité entre «&nbsp;libre&nbsp;» et «&nbsp;gratuit&nbsp;» qui vient d’un quiproquo de traduction-trahison de <em>free</em> en anglais. Mais il y a quelque chose de plus profond entre <strong>rendre du code disponible</strong> —&nbsp;librement utilisable au sens de sa licence&nbsp;— et le <strong>maintenir en vie</strong>. Si <q>l’Open-Source c’est de la solidarité entre développeurs</q> (<a href="/david/blog/2013/open-source-solidarite/">ce qui est déjà pas mal</a>) et que la <a href="https://www.bortzmeyer.org/free-software-open-source.html">distinction avec le logiciel libre</a>&nbsp;(<a href="/david/cache/2022/850c5e99f499d9703c9b9bc116914429/">cache</a>) est si floue, toute la différence se situe au niveau des échanges et de leur&nbsp;gouvernance.</p>
  91. <p>Le code en tant que tel, lorsqu’il est publié, est déjà mort. (Comme une pensée écrite mais je digresse.) C’est l’effort qui est mis pour continuer à l’alimenter, à le guider, ensemble, qui est intéressant. Il faut peut-être un nouveau terme pour désigner cela d’ailleurs, je proposerais bien <strong>«&nbsp;inclusive-source&nbsp;»</strong> avec une définition qu’il faudrait co-définir (pour rester cohérent) mais dont les grandes lignes à titre d’exemple pourraient&nbsp;être&nbsp;:</p>
  92. <ul>
  93. <li>le ou la contributeur·ice principal·e participe a moins de 80&#8239;% du&nbsp;code&#8239;;</li>
  94. <li>il y a plusieurs administrateur·ices du dépôt&nbsp;principal&#8239;;</li>
  95. <li>les discussions et la gouvernance s’effectuent de manière&nbsp;publique&#8239;;</li>
  96. <li>etc&nbsp;etc.</li>
  97. </ul>
  98. <p>Il y a très peu de dépôt populaires qui répondent ne serait-ce qu’à ces trois critères. Et c’est tout a fait acceptable. L’importance de créer une catégorie explicite est de pouvoir aussi faire des choix éclairés lors de ses propres contributions, d’avoir le sentiment de s’impliquer pour participer à un <em>bien commun</em> (lâchons les gros mots). Les étoiles Microsoft Github ne sont pas forcément un bon indicateur pour évaluer la santé d’un produit. Et donc sa&nbsp;pérennité.</p>
  99. <p>On voit aussi qu’il est facile de se heurter aux limites de règles strictes/mesurables si on en vient à ajouter des indications du type «&nbsp;l’équipe d’administration est <a href="https://thom4.net/2022/03/06/pluriversite/">pluriversifiée</a>&nbsp;(<a href="/david/cache/2022/ae3792ebced6f8b2b12b04723d982462/">cache</a>)&nbsp;» qui seraient pourtant essentielles pour un écosystème sain. Il est beaucoup mentionné en ce moment la notion de réciprocité (pécuniaire) dans l’usage de l’open-source, il y aurait peut-être des choses à creuser pour rendre les attentes explicites à ce niveau, indépendamment de la&nbsp;licence.</p>
  100. <p>Comment arriver à une définition légère et vérifiable&#8239;? Dans quel·s espace·s discuter de ces distinctions&#8239;? Comment <strong>ne pas</strong> en faire un label&#8239;? Qu’en est-il des <a href="/david/stream/2018/04/01/">questions éthiques</a>&#8239;?</p>
  101. <p><em>Note&nbsp;: au passage je retrouve <a href="/david/blog/2016/inclusive-developer/">Inclusive developer</a> qui a 5&nbsp;ans et où j’écrivais <q lang=en>turn open-source into free software (more in a future article)</q>, c’est maintenant chose&nbsp;initiée.</em></p>
  102. <hr />
  103. <p>Le jour même, <a href="https://open-time.net/post/2022/03/23/Open-source">réaction de Franck au sujet de Dotclear</a>&nbsp;(<a href="/david/cache/2022/bfc65237a09e49939b31ba887d7e3fc8/">cache</a>).</p>
  104. <h2 id="open-links">Open links <a href="#open-links" title="Ancre vers cette partie">#</a></h2>
  105. <blockquote>
  106. <p>💔 L’examen des propos tenus par leurs employés lors de trois grandes conférences open source révèle une division claire entre, d’un côté, les grands groupes de type Gafam et, de l’autre, les sociétés de taille plus réduite. Face au modèle économique et aux prétentions communautaires des premières, les secondes affichent une vision critique et plus axée sur la soutenabilité des projets. Leurs représentants insistent sur l’importance des licences et du respect des principes «&nbsp;libristes&nbsp;», quand les employés des Gafam répètent que la question ne présente aujourd’hui plus <mark>guère d’intérêt</mark> pour une majorité de&nbsp;contributeurs.</p>
  107. <p><cite><em><a href="https://www.monde-diplomatique.fr/2022/01/O_NEIL/64221">Le pillage de la communauté des logiciels libres</a></em>&nbsp;(<a href="/david/cache/2022/8d9cffcd9bdc116b8934310706def4bc/">cache</a>)</cite></p>
  108. </blockquote>
  109. <blockquote lang="en">
  110. <p>💯 Q: Who maintains&nbsp;dataklasses?</p>
  111. <p>A: If you’re using it, you do. <mark>You</mark> maintain&nbsp;dataklasses.</p>
  112. <p><cite><em><a href="https://github.com/dabeaz/dataklasses#questions-and-answers">dataklasses: A different spin on dataclasses.</a></em>&nbsp;(<a href="/david/cache/2022/891705d1555d09a941fd1f7685de9370/">cache</a>)</cite></p>
  113. </blockquote>
  114. <blockquote lang="en">
  115. <p>💰 If you can make sponsorship happen, great: you should do that. But if not… <mark>how about reaching out to the maintainers and offering to hire them for an hour-long “consultancy” speaking engagement&nbsp;instead?</mark></p>
  116. <p>Thanks to the rise of remote working and Zoom, giving a talk no longer requires traveling to a venue—which can easily turn an hour-long opportunity into a full&nbsp;day.</p>
  117. <p>One-off paid speaking opportunities are much more likely to fit into a regular company’s model of how money should spent that monthly&nbsp;donations.</p>
  118. <p><cite><em><a href="https://simonwillison.net/2022/Feb/23/support-open-source/">Support open source that you use by paying the maintainers to talk to your team</a></em>&nbsp;(<a href="/david/cache/2022/9eac0872e78f3de333ff5df423060de2/">cache</a>)</cite></p>
  119. </blockquote>
  120. <blockquote lang="en">
  121. <p>🤕 For every issue closed, three new issues showed up. I love open source, but it felt endless and unmanageable. As burnout encroached, I went into self-preservation mode. I did a bit here and there, but sought refuge for my mental health in video games and comic books instead of working nights and weekends. Years went by and having children deleted any concept of spare time. […]</p>
  122. <p>But financials are one part of the sustainable open source equation. <mark>There’s an emotional cost</mark> to having a publicly available project that hundreds or thousands of people and companies depend on as&nbsp;well.</p>
  123. <p><cite><em><a href="https://daverupert.com/2021/12/sustaining-maintaining/">Sustaining Maintaining</a></em>&nbsp;(<a href="/david/cache/2022/ed0eff49e75f35733437d71da03b0af3/">cache</a>)</cite></p>
  124. </blockquote>
  125. <blockquote lang="en">
  126. <p>🍌 This is why I am very careful about how I make “useful” software and release it to the world without any solid way for me to get paid for my efforts. I simply do not want to be in a situation where my software that I develop as a passion project on the side is holding people’s companies together. That’s why I make software how and where I do. Like, no offense, but I really do not want to go unpaid for my efforts. The existing leech culture of <mark>“Open Source” being a pool of free labor</mark> makes it hard for me to want to have my side projects be actually useful like that unless you pay&nbsp;me.</p>
  127. <p><cite><em><a href="https://christine.website/blog/open-source-broken-2021-12-11">“Open Source” is Broken</a></em>&nbsp;(<a href="/david/cache/2022/f57abf8bb9e96e5cb5cfe845d76729f5/">cache</a>)</cite></p>
  128. </blockquote>
  129. <blockquote lang="en">
  130. <p>💍 Starting a company, anytime, anywhere, for virtually anything, is an extra set of commitments <em>on top</em> of being an open source maintainer. It is more like going <mark>from being engaged to being married</mark> to your project, rather than a free solution to balance maintainer responsibilities with new compensatory&nbsp;income.</p>
  131. <p><cite><em><a href="https://nadim.computer/posts/2021-12-12-maintainers.html">On Paying Open Source Maintainers</a></em>&nbsp;(<a href="/david/cache/2022/acd4b5cdd3ebf13e74a102563aa90b9a/">cache</a>)</cite></p>
  132. </blockquote>
  133. <blockquote lang="en">
  134. <p>⚖️ When you hear rallying cries to fund open source, or complaints that open source maintainers are overburdened and under-thanked, it’s usually due to the misapplication of healthy open source principles. With liberal licenses, open source projects grant a lot of freedom, and that means it’s easy for <mark>the relationship between maintainers and users to form a toxic imbalance</mark> if they aren’t both careful and vigilant. Just like healthy personal relationships, healthy open source relationships establish clear boundaries and exhibit mutual respect to&nbsp;succeed.</p>
  135. <p>With proper boundaries, a healthier, more helpful community can be fostered; developers and maintainers won’t be over-burdened, companies and other users still get what they need, and expectations and requirements are satisfied on both sides. Establishing boundaries does not have to conflict with the freedoms granted from liberal licenses. And crucially, boundaries can be established without switching&nbsp;licenses.</p>
  136. <p>Too often, we often talk about what open source licenses grant the users. Instead, we should place equal emphasis on what open source licenses grant the&nbsp;developers.</p>
  137. <p><cite><em><a href="https://matt.life/writing/the-asymmetry-of-open-source">The Asymmetry of Open Source</a></em>&nbsp;(<a href="/david/cache/2022/e8d6bd5b11ae399009cf9258869be09c/">cache</a>)</cite></p>
  138. </blockquote>
  139. <blockquote lang="en">
  140. <p>⏳ Here is the thing: making a project’s code accessible to any audience is just a small piece of running an open-source project. Take GitHub, for example: you can turn off the issue tracker and turn off project discussions, but you cannot turn off the ability for people to create pull requests. And I get that, the whole “fork it, change it, and submit your changes upstream” culture is a huge part of open source - and one part I really like about (F)OSS&nbsp;projects.</p>
  141. <p>The problem, though, is that reviewing pull requests, paying adequate attention, and providing helpful feedback takes <mark>a lot of time and energy.</mark> Reviewing code sometimes feels harder than writing code, and I do believe that this is true to a certain extend: you not only have to understand the intentions of the person writing the code, you also have to think about how this new code fits into the existing system and if there are any side-effects that might be tricky to catch from looking at the implementation&nbsp;itself.</p>
  142. <p><cite><em><a href="https://overengineer.dev/blog/2021/12/12/why-not-everything-i-do-is-open-or-free.html">Why not everything I do is “Open” or “Free”</a></em>&nbsp;(<a href="/david/cache/2022/571d5d3f9d63d9ec4a8107e5abd15941/">cache</a>)</cite></p>
  143. </blockquote>
  144. <nav>
  145. <p class="center">
  146. <a rel="prev" href="/david/2022/03/18/" title="Publication précédente : Temps">← Précédent</a> •
  147. <a href="/david/2022/" title="Liste des publications récentes">↑ En 2022</a>
  148. • <a rel="next" href="/david/2022/04/02/" title="Publication suivante : Recherche">Suivant →</a>
  149. </p>
  150. </nav>
  151. </article>
  152. <hr>
  153. <footer>
  154. <p>
  155. <nobr>
  156. <a href="/david/" title="Aller à l’accueil"
  157. ><svg class="icon icon-home">
  158. <use
  159. xlink:href="/static/david/icons2/symbol-defs-2022-03.svg#icon-home"
  160. ></use>
  161. </svg>
  162. Accueil</a
  163. >
  164. </nobr>
  165. <nobr>
  166. <a href="/david/log/" title="Accès au flux RSS"
  167. ><svg class="icon icon-rss2">
  168. <use xlink:href="/static/david/icons2/symbol-defs-2022-03.svg#icon-rss2"></use>
  169. </svg>
  170. Suivre</a
  171. >
  172. </nobr>
  173. <nobr>
  174. <a href="http://larlet.com" title="Go to my English profile" data-instant
  175. ><svg class="icon icon-user-tie">
  176. <use xlink:href="/static/david/icons2/symbol-defs-2022-03.svg#icon-user-tie"></use>
  177. </svg>
  178. Pro</a
  179. >
  180. </nobr>
  181. <nobr>
  182. <a href="mailto:david%40larlet.fr" title="Envoyer un courriel"
  183. ><svg class="icon icon-mail">
  184. <use xlink:href="/static/david/icons2/symbol-defs-2022-03.svg#icon-mail"></use>
  185. </svg>
  186. Email</a
  187. >
  188. </nobr>
  189. <nobr>
  190. <abbr
  191. class="nowrap"
  192. title="Hébergeur : Alwaysdata, 62 rue Tiquetonne 75002 Paris, +33184162340"
  193. ><svg class="icon icon-hammer2">
  194. <use xlink:href="/static/david/icons2/symbol-defs-2022-03.svg#icon-hammer2"></use>
  195. </svg>
  196. Légal</abbr
  197. >
  198. </nobr>
  199. </p>
  200. <template id="theme-selector">
  201. <form>
  202. <fieldset>
  203. <legend><svg class="icon icon-brightness-contrast">
  204. <use xlink:href="/static/david/icons2/symbol-defs-2022-03.svg#icon-brightness-contrast"></use>
  205. </svg> Thème</legend>
  206. <label>
  207. <input type="radio" value="auto" name="chosen-color-scheme" checked> Auto
  208. </label>
  209. <label>
  210. <input type="radio" value="dark" name="chosen-color-scheme"> Foncé
  211. </label>
  212. <label>
  213. <input type="radio" value="light" name="chosen-color-scheme"> Clair
  214. </label>
  215. </fieldset>
  216. </form>
  217. </template>
  218. </footer>
  219. <script src="/static/david/js/instantpage-5.1.0.min.js" type="module"></script>
  220. <script>
  221. function loadThemeForm(templateName) {
  222. const themeSelectorTemplate = document.querySelector(templateName)
  223. const form = themeSelectorTemplate.content.firstElementChild
  224. themeSelectorTemplate.replaceWith(form)
  225. form.addEventListener('change', (e) => {
  226. const chosenColorScheme = e.target.value
  227. localStorage.setItem('theme', chosenColorScheme)
  228. toggleTheme(chosenColorScheme)
  229. })
  230. const selectedTheme = localStorage.getItem('theme')
  231. if (selectedTheme && selectedTheme !== 'undefined') {
  232. form.querySelector(`[value="${selectedTheme}"]`).checked = true
  233. }
  234. }
  235. const prefersColorSchemeDark = '(prefers-color-scheme: dark)'
  236. window.addEventListener('load', () => {
  237. let hasDarkRules = false
  238. for (const styleSheet of Array.from(document.styleSheets)) {
  239. let mediaRules = []
  240. for (const cssRule of styleSheet.cssRules) {
  241. if (cssRule.type !== CSSRule.MEDIA_RULE) {
  242. continue
  243. }
  244. // WARNING: Safari does not have/supports `conditionText`.
  245. if (cssRule.conditionText) {
  246. if (cssRule.conditionText !== prefersColorSchemeDark) {
  247. continue
  248. }
  249. } else {
  250. if (cssRule.cssText.startsWith(prefersColorSchemeDark)) {
  251. continue
  252. }
  253. }
  254. mediaRules = mediaRules.concat(Array.from(cssRule.cssRules))
  255. }
  256. // WARNING: do not try to insert a Rule to a styleSheet you are
  257. // currently iterating on, otherwise the browser will be stuck
  258. // in a infinite loop…
  259. for (const mediaRule of mediaRules) {
  260. styleSheet.insertRule(mediaRule.cssText)
  261. hasDarkRules = true
  262. }
  263. }
  264. if (hasDarkRules) {
  265. loadThemeForm('#theme-selector')
  266. }
  267. })
  268. </script>
  269. </body>
  270. </html>