A place to cache linked articles (think custom and personal wayback machine)
Du kan inte välja fler än 25 ämnen Ämnen måste starta med en bokstav eller siffra, kan innehålla bindestreck ('-') och vara max 35 tecken långa.

index.html 22KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180
  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>Paying people to work on open source is good actually (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://jacobian.org/2024/feb/16/paying-maintainers-is-good/">
  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>Paying people to work on open source is good actually</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://jacobian.org/2024/feb/16/paying-maintainers-is-good/" 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. <article class="leading-7 tracking-tight lg:w-2/3 lg:pr-4"><h1 class="mb-4 text-4xl font-light leading-tight tracking-tighter">Paying people to work on open source is good actually</h1><p><em>Warning: rant ahead. I’m writing from a place of frustration and not particularly interested in trying to moderate my tone. If you don’t want to hear me yell about open source for a while, please skip this one.</em></p><hr><p>Earlier this week, in a moment of frustration. I <a href="https://social.jacobian.org/@jacob/111914179201102152">wrote on Mastodon</a>:</p><blockquote><p>“We believe that open source should be sustainable and open source maintainers should get paid!”</p><p>Maintainer: *introduces commercial features*
  76. “Not like that”</p><p>Maintainer: *works for a large tech co*
  77. “Not like that”</p><p>Maintainer: *takes investment*
  78. “Not like that”</p></blockquote><p>This went mildly viral, and I got a ton of arguments and pushback. (Also a lot of “right on"s, which was nice.) I think some of that pushback was bad-faith and uncharitable reads, but some was coming from well-intentioned misunderstandings or misreadings of my snarky toot. That’s my fault for talking around what I mean instead of coming out and saying it. So that’s this post: upgrading my shitpost to a slightly-more-considered rant.</p><p>My fundamental position is that <strong>paying people to work on open source is good</strong>, full stop, no exceptions. <strong>We need to stop criticizing maintainers getting paid, and start celebrating.</strong> Yes, all of the mechanisms are flawed in some way, but that’s because <em>the world</em> is flawed, and it’s not the fault of the people taking money. Yelling at maintainers who’ve found a way to make a living is wrong.</p><h2 id="why-this-matters">Why this matters</h2><p>This is of course a personal issue: I’ve been involved in open source communities for over twenty years now and have many colleagues and friends from those communities who would love nothing more than to make open source their jobs. Most can’t, and that sucks. Those who can end up getting nastygrams criticizing their financial choices and questioning their morality.</p><p>But it’s deeper that that. Open source is <em>good for humanity</em>. It’s only slightly hyperbolic to say that open source is one of the most notable collective successes of humankind as a species! It’s one of the few places where essentially all of humanity works together on something that benefits everyone. A world without open source would be substantially worse than the world we live in.</p><p>So, I want people who want to work on open source to be able to do so, and should be able to live comfortable lives, with their basic needs met. They’re contributing to something that is good for humanity; they shouldn’t have to sacrifice to do so!</p><h2 id="definitions">Definitions</h2><p>Part of the problem with The Discourse is a lack of shared agreement on what the core terms mean. Because I used the term “open source” in my original toot, one of the themes in the replies are people misinterpreting what I mean by “open source” (or, even more exhausting, relitigating the “open source vs free software” debate).</p><p>So if I’m going to have half a chance of explaining what I really mean I need to start by defining what these terms mean to me:</p><h3 id="open-source--free-software">“open source” / “free software”</h3><p>Note the deliberate use of lower case. I’m <em>not</em> referring to Open Source™ as defined by OSI, nor to Free Software™ as defined by the FSF<sup id="fnref:1"></sup>. I mean these terms in the broadest, most inclusive sense: “software with source code that I can read and modify and release variants of, perhaps under some conditions.” So I’m including OSI and FSF licenses, but also the <a href="https://polyformproject.org/licenses/">Polyform licenses</a> and the <a href="https://www.json.org/license.html">JSON license</a> and, yes <a href="https://mariadb.com/bsl-faq-mariadb/">BSL</a> in my version of “open source”.</p><p>This is perhaps a side point, but the “minimalist” definition of Open Source meaning “only OSI-approved licenses” – or, worse, “the GPL is the only ’true’ Free Software license” – is part of the problem here. I want to see more experimentation and variety in licensing options, and if that means introducing some additional restrictions beyond “anyone can use this for any purpose” I’m pretty okay with that. In my book, a broad spectrum of licenses from <a href="https://blueoakcouncil.org/license/1.0.0">Blue Oak</a> to <a href="https://mariadb.com/bsl-faq-mariadb/">BSL</a> (and even more restrictive than BSL) “count” as open source.</p><p>So, in this piece, I’m going to use “open source” to mean anything on this spectrum from “totally unencumbered” to “unencumbered with some restrictions”, and I’m not going to articulate how much “some” would be too much for something to still be considered free. I’ll even use the terms “open source” and “free software” interchangeably just to hammer home how, in this context, the precise definitions of these terms don’t matter to me.</p><p>This stance probably really annoys some folks, and that’s to some degree intentional. Not in the sense that I want to deliberately piss anyone off, but &amp;mldr; I’ll put it this way: if my sloppy use of these terms bothers you <em>in the context of talking about how people make their living</em>, it implies that you care more about terminology and definitions than about the people, and I’d like you to sit in that discomfort for a while.</p><h3 id="sustainability">“sustainability”</h3><p>Next, what do I mean when I talk about “sustainability” in open source? People use this term to mean lots of things – good governance, healthy communities, funding, and more.</p><p>When I talk about “sustainability”, though, I mean something very specific: “can maintainers live a decent-to-comfortable lifestyle writing free software?” If open source was “sustainable”, to me, it would mean that people could chose to make writing open source their job, and be assured that they have <em>at a minimum</em> their basic needs met – housing, food, healthcare, etc. Ideally, more than that; I’d love it if writing open source afforded people a comfortable or downright luxurious lifestyle.</p><h2 id="open-source-is-not-sustainable">Open source is not sustainable</h2><p>Almost nobody makes a living writing free software. As a percentage of all software engineers, it’s so few we can basically round down to zero.</p><p>Sure, there are a few companies that employ people to work on open source: Canonical, Red Hat, Hashicorp, and Mozilla come to mind; I’m sure you could name more. But, (a) these companies employ vanishingly few engineers when compared to the millions of engineers out there writing proprietary software and (b) it’s not like every engineer at each of these organizations actually writes only open source; almost all these organizations have business models dependent on some piece of the product being proprietary. So even the biggest open source success stories represent a fraction of a fraction.</p><p>Closer to home, let’s look at Django. By my estimate hundreds of thousands of engineers use Django daily. How many get paid to work on Django itself? <strong>One and a half</strong> – the DSF employs one full-time and one part-time Fellow. That’s the entire population of people who get paid just to work on Django. The numbers are similar to Python itself: millions of people use Python daily, but fewer than a dozen are paid to do so<sup id="fnref:2"></sup>.</p><p>“Sustainability” would mean that something like a dozen people were being paid to work full-time on Django – and being paid something approaching the industry median. It would mean <em>several</em> dozen people working full-time on Python. Heck, just <a href="https://pypi.org/">PyPI</a> by itself ought to have a team of 10-15, <em>minimum</em>, given its scope, scale, and importance.</p><p>Even more importantly, “sustainability” in open source would mean that the <a href="https://xkcd.com/2347/">“random person in Nebraska”</a> maintaining a critical dependency would be living handsomely, and would have several colleagues so they could get a vacation from time to time.</p><p>We don’t live in a world that even remotely approaches this.</p><h2 id="the-dream-fully-automated-luxury-gay-space-communism">The dream: fully automated luxury gay space communism</h2><p>This is usually the point where someone snarkily points out, “you don’t really hate open source, you hate capitalism”. This is one of those statements that is true, but not helpful.</p><p>Yes, the fact that people have to choose between writing open source software and affording decent healthcare is a problem deeply rooted in our current implementation of zero-sum capitalism, and not at all a problem that can be laid at the feet of the free software movement. The dream is that society and governments will recognize free software as the public good that it most certainly is and fund it appropriately. And also fix healthcare, and housing access, and public transportation, and the social safety net, and and and &amp;mldr;</p><p>I am absolutely one million percent on board with this vision, but this shit ain’t gonna happen overnight. Indeed, I doubt it’ll happen in our lifetimes if at all.</p><p>We have to accept the world as it is – even if it’s not the world we want. This means we have to be okay with the idea that maintainers need to be paid. Far too often I see arguments like: “maintainers shouldn’t be paid by private companies because the government should be supporting them.” Sure, this sounds great – but <em>governments aren’t doing this!</em> So this argument reduces to “open source maintainers shouldn’t be paid”. I can’t get on board with that.</p><h2 id="any-time-someone-gets-paid-to-write-open-source-its-a-win">Any time someone gets paid to write open source it’s a win</h2><p>Right now, here in the real world, <strong>sustainability in open source means paying maintainer — and we should be celebrating every time that happens!</strong> Every time a maintainer finds a way to get paid, it’s a win.</p><p>Employed by Microsoft to work on Python? <strong>Win.</strong></p><p>Funded by a grant? <strong>Win.</strong></p><p>Reached a sustainable funding level on Patreon? <strong>Win.</strong></p><p>Raises VC funding to develop free software? <strong>Win.</strong></p><p>Builds a sustainable business on an Open Core model? <strong>Win.</strong></p><p>Hashicorp? <strong>Win.</strong></p><p>Supports an open project with paid hosting options? <strong>Win.</strong></p><p>Successfully uses a non-OSI-approved license to avoid being Amazon’d? <strong>Win.</strong></p><p><strong>Until we have fully automated luxury gay space communism every. single. person. who figures out a mechanism to write free software and still pay rent represents a win and we should celebrate accordingly.</strong></p><h2 id="instead-criticism">Instead, criticism</h2><p>But that’s not what happens. Instead, every time a maintainer finds a way to get paid, people show up to criticize and complain. Non-OSI licenses “don’t count” as open source. Someone employed by Microsoft is “beholden to corporate interests” and not to be trusted. Patreon is “asking for handouts”. Raising money through GitHub sponsors is “supporting Microsoft’s rent-seeking”. VC funding means we’re being set up for a “rug pull” or “enshitification”. Open Core is “bait and switch”.</p><p>None of this is hypothetical; each of these examples are actual things I’ve seen said about maintainers who take money for their work. One maintainer even told me he got criticized for selling t-shirts!</p><p>Look. There are absolutely problems with every tactic we have to support maintainers. It’s true that VC investment comes with strings attached that often lead to problems down the line. It sucks that Patreon or GitHub (and Stripe) take a cut of sponsor money. The additional restrictions imposed by PolyForm or the BSL really do go against the <a href="https://en.wikipedia.org/wiki/The_Free_Software_Definition">Freedom 0</a> ideal. I myself am often frustrated by discovering that some key feature I want out of an open core tool is only available to paid licensees.</p><p><strong>But you can criticize these systems while still supporting and celebrating the maintainers!</strong> Yell at A16Z all you like, I don’t care. (Neither do they.) But yelling at a maintainer because they took money from a VC is directing that anger in the wrong direction. The structural and societal problems that make all these different funding models problematic aren’t the fault of the people trying to make a living doing open source.</p><p>It’s like yelling at someone for shopping at Dollar General when it’s the only store they have access to. Dollar General’s predatory business model absolutely sucks, as do the governmental policies that lead to food deserts, but none of that is on the shoulders of the person who needs milk and doesn’t have alternatives.</p><h2 id="purity-only-serves-to-limit-open-sources-value-to-society">Purity only serves to limit open source’s value to society</h2><p><strong>Many, many more people should be getting paid to write free software, but for that to happen we’re going to have to be okay accepting impure or imperfect mechanisms.</strong> Criticize those mechanisms if you like. Work to change the underlying societal inequities – please!</p><p>But when a maintainer finds a way to get paid, celebrate them. It’s a win for all of us.</p></article>
  79. </article>
  80. <hr>
  81. <footer>
  82. <p>
  83. <a href="/david/" title="Aller à l’accueil"><svg class="icon icon-home">
  84. <use xlink:href="/static/david/icons2/symbol-defs-2021-12.svg#icon-home"></use>
  85. </svg> Accueil</a> •
  86. <a href="/david/log/" title="Accès au flux RSS"><svg class="icon icon-rss2">
  87. <use xlink:href="/static/david/icons2/symbol-defs-2021-12.svg#icon-rss2"></use>
  88. </svg> Suivre</a> •
  89. <a href="http://larlet.com" title="Go to my English profile" data-instant><svg class="icon icon-user-tie">
  90. <use xlink:href="/static/david/icons2/symbol-defs-2021-12.svg#icon-user-tie"></use>
  91. </svg> Pro</a> •
  92. <a href="mailto:david%40larlet.fr" title="Envoyer un courriel"><svg class="icon icon-mail">
  93. <use xlink:href="/static/david/icons2/symbol-defs-2021-12.svg#icon-mail"></use>
  94. </svg> Email</a> •
  95. <abbr class="nowrap" title="Hébergeur : Alwaysdata, 62 rue Tiquetonne 75002 Paris, +33184162340"><svg class="icon icon-hammer2">
  96. <use xlink:href="/static/david/icons2/symbol-defs-2021-12.svg#icon-hammer2"></use>
  97. </svg> Légal</abbr>
  98. </p>
  99. <template id="theme-selector">
  100. <form>
  101. <fieldset>
  102. <legend><svg class="icon icon-brightness-contrast">
  103. <use xlink:href="/static/david/icons2/symbol-defs-2021-12.svg#icon-brightness-contrast"></use>
  104. </svg> Thème</legend>
  105. <label>
  106. <input type="radio" value="auto" name="chosen-color-scheme" checked> Auto
  107. </label>
  108. <label>
  109. <input type="radio" value="dark" name="chosen-color-scheme"> Foncé
  110. </label>
  111. <label>
  112. <input type="radio" value="light" name="chosen-color-scheme"> Clair
  113. </label>
  114. </fieldset>
  115. </form>
  116. </template>
  117. </footer>
  118. <script src="/static/david/js/instantpage-5.1.0.min.js" type="module"></script>
  119. <script>
  120. function loadThemeForm(templateName) {
  121. const themeSelectorTemplate = document.querySelector(templateName)
  122. const form = themeSelectorTemplate.content.firstElementChild
  123. themeSelectorTemplate.replaceWith(form)
  124. form.addEventListener('change', (e) => {
  125. const chosenColorScheme = e.target.value
  126. localStorage.setItem('theme', chosenColorScheme)
  127. toggleTheme(chosenColorScheme)
  128. })
  129. const selectedTheme = localStorage.getItem('theme')
  130. if (selectedTheme && selectedTheme !== 'undefined') {
  131. form.querySelector(`[value="${selectedTheme}"]`).checked = true
  132. }
  133. }
  134. const prefersColorSchemeDark = '(prefers-color-scheme: dark)'
  135. window.addEventListener('load', () => {
  136. let hasDarkRules = false
  137. for (const styleSheet of Array.from(document.styleSheets)) {
  138. let mediaRules = []
  139. for (const cssRule of styleSheet.cssRules) {
  140. if (cssRule.type !== CSSRule.MEDIA_RULE) {
  141. continue
  142. }
  143. // WARNING: Safari does not have/supports `conditionText`.
  144. if (cssRule.conditionText) {
  145. if (cssRule.conditionText !== prefersColorSchemeDark) {
  146. continue
  147. }
  148. } else {
  149. if (cssRule.cssText.startsWith(prefersColorSchemeDark)) {
  150. continue
  151. }
  152. }
  153. mediaRules = mediaRules.concat(Array.from(cssRule.cssRules))
  154. }
  155. // WARNING: do not try to insert a Rule to a styleSheet you are
  156. // currently iterating on, otherwise the browser will be stuck
  157. // in a infinite loop…
  158. for (const mediaRule of mediaRules) {
  159. styleSheet.insertRule(mediaRule.cssText)
  160. hasDarkRules = true
  161. }
  162. }
  163. if (hasDarkRules) {
  164. loadThemeForm('#theme-selector')
  165. }
  166. })
  167. </script>
  168. </body>
  169. </html>