├── 2024 ├── a-tale-of-two-leaders │ ├── dries-and-matt.jpg │ ├── social.webp │ └── the-checkbox.webp ├── a-vision-for-software-commons │ ├── codehosting.webp │ ├── first-commit.png │ ├── invoice-58306118.pdf │ ├── invoice-58306118.webp │ ├── languages.webp │ ├── lets-fix-it-this-way.webp │ └── social.webp ├── distributing-funds-in-open-source │ ├── index.md │ ├── konstantin.png │ ├── pachinko.jpg │ ├── serkan.png │ ├── social.webp │ └── twyw.png ├── fair-source-does-not-equal-software-commons │ └── social.webp ├── funding-the-five-thousand │ ├── a-few-thousand-people.webp │ ├── fair-pay-no-hoops.webp │ └── social.webp ├── leadership-and-power-in-open-source │ ├── old-call.webp │ ├── open-call.webp │ ├── openpress.com.webp │ └── social.webp ├── open-source-is-a-restaurant │ └── social.webp ├── questioning-the-value-of-open-source-software │ ├── figure-1.webp │ ├── languages.webp │ ├── paper.webp │ └── social.webp ├── relicensing-and-rug-pulls │ ├── Percentage_of_Commits_by_Era_and_Relation.webp │ ├── betatesters.webp │ └── social.webp ├── thank-you-ben │ └── social.webp ├── the-case-for-a-new-institution │ └── burnout.webp ├── the-future-of-foss-foundations │ ├── level-3.gif │ ├── osss.webp │ └── social.webp ├── the-historical-case-for-fair-source │ ├── code_rush.webp │ ├── navigator.webp │ ├── not-bad.jpg │ ├── social.webp │ ├── twiki.webp │ └── underlying-points-of-view.webp ├── the-open-source-sustainability-crisis │ └── social.webp ├── towards-software-commons │ ├── corporate-welfare-program.webp │ ├── please-trespass.webp │ └── social.webp ├── welcome-to-open-path │ └── social.webp └── widespread-use-of-a-fair-source-product │ ├── Percentage_of_Commits_by_Era_and_Relation.webp │ ├── atlassian.webp │ ├── dashboard.webp │ └── social.webp ├── 2025 ├── how-to-vote-in-the-2025-osi-election │ └── social.webp ├── luke-missed-the-memo │ └── social.webp ├── open-source-is-a-bad-gift-economy │ ├── index.md │ └── social.webp ├── point-four-of-elons-fork-is-the-scary-one │ └── social.webp └── the-birth-of-the-american-empire │ ├── hail-caesar.webp │ └── social.webp ├── .bundle └── config ├── .gitignore ├── .tool-versions ├── 404.html ├── CNAME ├── Gemfile ├── Gemfile.lock ├── Makefile ├── README.md ├── _config.yml ├── _includes ├── img.html ├── posts.html └── youtube.html ├── _layouts ├── default.html └── post.html ├── _posts ├── 2024-01-04-welcome-to-open-path.md ├── 2024-01-19-the-open-source-sustainability-crisis.md ├── 2024-01-25-questioning-the-value-of-open-source-software.md ├── 2024-02-05-funding-the-five-thousand.md ├── 2024-02-22-towards-software-commons.md ├── 2024-03-05-the-case-for-a-new-institution.md ├── 2024-03-21-relicensing-and-rug-pulls.md ├── 2024-04-01-fair-source-does-not-equal-software-commons.md ├── 2024-04-04-a-vision-for-software-commons.md ├── 2024-04-05-open-source-is-a-restaurant.md ├── 2024-04-26-the-future-of-foss-foundations.md ├── 2024-05-15-widespread-use-of-a-fair-source-product.md ├── 2024-06-20-the-historical-case-for-fair-source.md ├── 2024-10-11-a-tale-of-two-leaders.md ├── 2024-10-14-leadership-and-power-in-open-source.md ├── 2024-11-04-thank-you-ben.md ├── 2025-02-01-point-four-of-elons-fork-is-the-scary-one.md ├── 2025-02-03-the-birth-of-the-american-empire.md ├── 2025-02-25-luke-missed-the-memo.md └── 2025-02-27-how-to-vote-in-the-2025-osi-election.md ├── assets ├── Czarin-Medium.otf ├── banner.webp ├── chadwhitacre.jpg ├── email-header.jpg ├── hero.webp ├── replies.js ├── sentry.svg ├── slice.jpg ├── social │ ├── bluesky.svg │ ├── email.svg │ ├── github.svg │ ├── rss.svg │ └── x.svg └── style.scss ├── bin ├── new └── pub ├── blog.html ├── index.html └── social.webp /.bundle/config: -------------------------------------------------------------------------------- 1 | --- 2 | BUNDLE_PATH: ".bundle" 3 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | .DS_Store 2 | .bundle/ruby 3 | .jekyll-cache 4 | .sass-cache 5 | TODO 6 | _site 7 | _drafts/* 8 | -------------------------------------------------------------------------------- /.tool-versions: -------------------------------------------------------------------------------- 1 | ruby 2.6.5 2 | -------------------------------------------------------------------------------- /2024/a-tale-of-two-leaders/dries-and-matt.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chadwhitacre/openpath/7c807df966f05f79ebb8f1f172a4556857d337dd/2024/a-tale-of-two-leaders/dries-and-matt.jpg -------------------------------------------------------------------------------- /2024/a-tale-of-two-leaders/social.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chadwhitacre/openpath/7c807df966f05f79ebb8f1f172a4556857d337dd/2024/a-tale-of-two-leaders/social.webp -------------------------------------------------------------------------------- /2024/a-tale-of-two-leaders/the-checkbox.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chadwhitacre/openpath/7c807df966f05f79ebb8f1f172a4556857d337dd/2024/a-tale-of-two-leaders/the-checkbox.webp -------------------------------------------------------------------------------- /2024/a-vision-for-software-commons/codehosting.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chadwhitacre/openpath/7c807df966f05f79ebb8f1f172a4556857d337dd/2024/a-vision-for-software-commons/codehosting.webp -------------------------------------------------------------------------------- /2024/a-vision-for-software-commons/first-commit.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chadwhitacre/openpath/7c807df966f05f79ebb8f1f172a4556857d337dd/2024/a-vision-for-software-commons/first-commit.png -------------------------------------------------------------------------------- /2024/a-vision-for-software-commons/invoice-58306118.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chadwhitacre/openpath/7c807df966f05f79ebb8f1f172a4556857d337dd/2024/a-vision-for-software-commons/invoice-58306118.pdf -------------------------------------------------------------------------------- /2024/a-vision-for-software-commons/invoice-58306118.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chadwhitacre/openpath/7c807df966f05f79ebb8f1f172a4556857d337dd/2024/a-vision-for-software-commons/invoice-58306118.webp -------------------------------------------------------------------------------- /2024/a-vision-for-software-commons/languages.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chadwhitacre/openpath/7c807df966f05f79ebb8f1f172a4556857d337dd/2024/a-vision-for-software-commons/languages.webp -------------------------------------------------------------------------------- /2024/a-vision-for-software-commons/lets-fix-it-this-way.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chadwhitacre/openpath/7c807df966f05f79ebb8f1f172a4556857d337dd/2024/a-vision-for-software-commons/lets-fix-it-this-way.webp -------------------------------------------------------------------------------- /2024/a-vision-for-software-commons/social.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chadwhitacre/openpath/7c807df966f05f79ebb8f1f172a4556857d337dd/2024/a-vision-for-software-commons/social.webp -------------------------------------------------------------------------------- /2024/distributing-funds-in-open-source/index.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Distributing Funds in Open Source 3 | excerpt: More experiments please. 4 | noindex: true 5 | --- 6 | Solving the [Open Source sustainability 7 | crisis](/2024/the-open-source-sustainability-crisis/) has two parts: 8 | 9 | 1. unlocking funds from corporations, and 10 | 2. distributing funds to individuals. 11 | 12 | Both are hard. I've [talked 13 | elsewhere](/2024/a-vision-for-software-commons/#three-funding-levers) about the 14 | [three basic approaches](https://spectrum.ieee.org/open-source-crisis) to 15 | solving the first problem. The [Open Source 16 | Pledge](https://opensourcepledge.com/) is one implementation of one of the 17 | approaches. In this post I want to talk about the second part: assuming funds 18 | are flowing, how do we distribute them? 19 | 20 | {% include img.html src="pachinko.jpg" caption="It's not a perfect analogy, but I imagine distribution as a pachinko machine." url="https://www.youtube.com/watch?v=7RTg89WEsXQ" %} 21 | 22 | 23 | ## A Policy Goal 24 | 25 | Let's define a policy goal: **We should distribute money to 26 | individuals to fairly reward past contributions and motivate valuable 27 | future contributions.** Notice these subordinate aims: 28 | 29 | 1. Balance perspectives. Consumers of Open Source want high-quality 30 | software today and into the future. Producers want compensation for past 31 | time spent, and stability to plan for the future. 32 | 33 | 1. Recognize all contributions. Code is the core, but complete 34 | software involves much more, such as testing, documentation, design, and 35 | support. All contributions have some value. 36 | 37 | 1. Focus on individuals. Funding flows are complex, often involving 38 | multiple entities, both for-profit or non-profit. Yet, ultimately, it is 39 | individuals who produce Open Source software, individuals who make corporate 40 | funding decisions, individuals at platforms who develop funding algorithms, 41 | individuals leading projects who make distribution decisions, and individuals 42 | who ultimately receive funds. 43 | 44 | 1. Negotiate fairness. The crux of the problem is optimizing a feeling 45 | of fairness across the wide web of individuals involved. 46 | 47 | Of course, fair compensation is a key contributor to future motivation. Why 48 | not fold down to a single goal of creating future value? Well, on a certain 49 | interpretation of this attribute taken in isolation, we already have an optimal 50 | status quo. Companies receive tremendous value from Open Source. The problem to 51 | solve is maintainer burn-out. The maintainer perspective needs to be explicitly 52 | in view. 53 | 54 | ## Algorithms and People 55 | 56 | There are two basic approaches to distributing funds to individuals. We can 57 | come up with algorithms to distribute funds at scale, and we can empower some 58 | individuals to make direct decisions. All variations of both approaches are 59 | worth trying at this stage. It's early days on Open Source sustainability, a 60 | time for divergence and exploration. Over time and as the sustainability 61 | movement matures, I expect we'll settle into relatively stable, long-lived 62 | patterns. 63 | 64 | ### Algorithms 65 | 66 | I am aware of seven examples of an algorithmic approach: two from individuals, 67 | two from companies, and three products from funding platforms, two of which are 68 | still extant. 69 | 70 | #### Individual Experiments With Algorithmic Distribution 71 | 72 | Let's start by looking at algorithmic Open Source funding experiments from two 73 | generous **individuals**: Serkan Holat and Konstantin Vinogradov. 74 | 75 | [Serkan Holat](https://www.linkedin.com/in/serkanholat/), a software 76 | developer and independent researcher, [launched a monthly funding 77 | experiment](https://dev.to/coni2k/open-source-public-fund-experiment-lc8) 78 | nearly two years ago. He has been running it faithfully ever since, with 79 | [monthly updates on this X/Twitter 80 | thread](https://x.com/coni2k/status/1865379070030033053), and higher-level 81 | write-ups at [six](https://x.com/coni2k/status/1543986591286321152), 82 | [twelve](https://www.linkedin.com/feed/update/urn:li:activity:7022915965306712064/), 83 | and [eighteen 84 | months](https://dev.to/coni2k/open-source-public-fund-experiment-one-and-a-half-years-update-367d). 85 | 86 | {% include img.html src="serkan.png" caption="Each month, Serkan Holat distributes $100 among three projects on Open Collective." url="https://x.com/coni2k/status/1865379070030033053" %} 87 | 88 | Serkan's experiment uses [Rob Pike's Criticality Score 89 | algorithm](https://github.com/ossf/criticality_score), part of the 90 | [OpenSSF](https://openssf.org/) initiative. A project's Criticality Score is a measure of its influence and importance. Serkan takes his monthly budget of 91 | $100, picks three projects at random from Open Collective, and distributes his 92 | budget based on the Criticality Score of each. I love Serkan for doing 93 | this consistently for so long. It's a humble but inspiring experiment. Serkan's 94 | long-term vision is to [fund Open Source through a public tax on proprietary 95 | software](https://podcast.sustainoss.org/175). His experiment points towards a 96 | method for distributing this tax should it ever come about. 97 | 98 | Venture capitalist [Konstanin Vinogradov](https://kvinogradov.com/) 99 | recently conducted an algorithmic funding experiment of his own, framed as "[an 100 | open-source analogue of the S&P 500](https://kvinogradov.com/algo-sponsors/)." 101 | He distributed a budget of $5,000 within the Python ecosystem through GitHub 102 | Sponsors. 103 | 104 | {% include img.html src="konstantin.png" caption="Konstantin Vinogradov sent $5,037 to 866 users via GitHub Sponsors." url="https://kvinogradov.com/algo-sponsors/" %} 105 | 106 | Like Serkan, Konstantin incorporated work from OpenSSF, in this case 107 | the [Scorecard](https://github.com/ossf/scorecard/). Whereas Criticality Score 108 | measures influence and importance, Scorecard measures security 109 | best practices. A lower Scorecard score suggests a project at higher risk of 110 | security compromise. Konstanin's algorithm is a function of Scorecard score, 111 | number of sponsors (another proxy for risk), and number of downloads (a proxy 112 | for value, a rough substitute for Criticality Score). Also like Serkan, 113 | Konstantin's experiment contributes to the development of 114 | a long-term vision: an [Open Source 115 | endowment](https://kvinogradov.com/oss-universities/). 116 | 117 | #### Company Experiments With Algorithmic Distribution 118 | 119 | Serkan and Konstantin are to be commended for their individual initiatives. As 120 | both of their larger visions suggest, corporations are the primary 121 | beneficiaries of Open Source and must ultimately fund it, whether directly or 122 | through government. Let's look at two approaches to algorithmic funding from 123 | **companies**. 124 | 125 | Earlier this year, Microsoft conducted [a one-off 126 | iteration](https://opensource.microsoft.com/blog/2024/06/27/5-things-we-learned-from-sponsoring-a-sampling-of-our-open-source-dependencies/) 127 | of their long-standing [FOSS Fund](https://aka.ms/microsoftfossfund) program 128 | [using an algorithmic 129 | approach](https://github.com/microsoft/OSPO/blob/main/bulk-targeted-sponsorship/README.md) 130 | instead of their usual employee voting process. Employee input was still part 131 | of the equation, but they also looked at number and scale of projects, 132 | individual or organization entity, and requests for support in the sponsors’ 133 | profile. They used data from Ecosyste.ms and supposedly also CHAOSS but I don't 134 | see that. 135 | 136 | Sentry - "[We Just Gave](https://blog.sentry.io/we-just-gave-750-000-dollars-to-open-source-maintainers/)" - only looking at deps and employee input, no external metrics. 137 | 138 | #### Platform Products for Algorithmic Distribution 139 | 140 | These are great but we need basically every company to participate, and ain't nobody got time for that. Therefore we need **platforms**. 141 | 142 | [thanks.dev](https://thanks.dev/home) 143 | 144 | [ecosyste.ms funds](https://funds.ecosyste.ms/) 145 | 146 | Also [StackAid](https://www.stackaid.us/). RIP StackAid. ✌️ 147 | 148 | #### Summary of Algorithmic Approaches 149 | 150 | Here are some design tradeoffs and questions I notice with these approaches: 151 | 152 | 1. Do we incorporate usage data specific to donors (thanks.dev, Microsoft), or 153 | donate based on general data not tied to specific funding sources 154 | (ecosyste.ms, Konstantin)? 155 | 156 | 1. How do we best [balance transparency and resistance to 157 | gamification](https://news.ycombinator.com/item?id=42350238)? 158 | 159 | 1. Can we at least get [post-distribution transparency per 160 | sponsor](https://bsky.app/profile/chadwhitacre.com/post/2lckusuwvas2p) even 161 | if the algorithm is semi-secret? 162 | 163 | #### But What About DAOs? 164 | 165 | A little voice in my head tells me I should also mention [decentralized autonomous 166 | organizations](https://www.investopedia.com/tech/what-dao/) 167 | (DAOs), but to be honest they make little sense to me and feel like an esoteric 168 | waste of time. I don't know of any Open Source-focused ones. I supposed they can 169 | be a scaled-up version of what we find in typescript-eslint, which has [a 170 | point-based system for recognizing 171 | contributions](https://typescript-eslint.io/maintenance/contributor-tiers/). Unlike [Drupal's credit system](https://dri.es/balancing-makers-and-takers-to-scale-and-sustain-open-source), points in typescript-eslint [directly drive compensation](https://typescript-eslint.io/maintenance/contributor-tiers#reimbursement). Crucially, though, they note: 172 | 173 | > We treat everything here as approximate numbers. We're a small enough team to 174 | > informally discuss changes ad hoc and allow off-by-one-or-two months. 175 | 176 | In other words, they operate at a human scale. 177 | 178 | ### People 179 | 180 | Frankly, I find algorithms insufficient. There are too many factors in the 181 | computation of fairness across all individuals involved in the production of 182 | Open Source: 183 | 184 | 1. need 185 | 1. ambition 186 | 1. seniority 187 | 1. stage of life 188 | 1. productivity 189 | 1. cost of living 190 | 1. cultural expectations 191 | 192 | On the one hand, algorithms can offer a level playing field, impartial rules 193 | for all. On the other hand, algorithms are developed by people. They are an 194 | abstraction over decisions by individuals, but without recourse for individuals 195 | unjustly affected to appeal. Let's develop systems that augment rather than 196 | replace human judgement and relationships. 197 | 198 | Models for human decision-making include tried-and-true negotiation of 199 | employment or contractor relationships, as well as grant programs with an 200 | application process. 201 | 202 | - The [Sovereign Tech Agency](https://www.sovereign.tech/) distributes tens of 203 | millions of euros a year for critical digital infrastructure based on direct 204 | decision-making. 205 | - Django has [an active Fellows 206 | program](https://www.djangoproject.com/fundraising/#fellowship-program), as 207 | does [Django CMS](https://www.django-cms.org/en/fellowship-program/). 208 | - Foundations such as 209 | [Python](https://pyfound.blogspot.com/2023/06/announcing-our-new-security-developer.html) 210 | and 211 | [Ruby](https://rubycentral.org/news/ruby-central-welcomes-new-software-engineer-in-residence-sponsored-by-aws/) 212 | have started employing software engineers. 213 | - The PHP Foundation makes this [their raison 214 | d'etre](https://thephp.foundation/foundation/#foundation-activities): "The 215 | primary task of the PHP Foundation is to fund developers to work on PHP." 216 | 217 | Ten years ago I experimented with [a take-what-you-want (twyw) 218 | model](https://gratipay.news/sharing-our-take-what-you-want-story-911dad62ac32) 219 | for distributing funds to individuals within a high-trust Open Source project. In 220 | this scenario, each individual can see what others are taking. Based on that, 221 | they can decide for themselves what is fair for themselves to take. Given 222 | proper management, it can be [a fantastic way to optimize fairness without 223 | ruining intrinsic 224 | motivation](https://opensource.com/open-organization/16/7/compensating-employees-letting-them-take-what-they-want). 225 | Liberapay continues to offer [a "team takes" 226 | implementation](https://en.liberapay.com/about/teams). 227 | 228 | {% include img.html src="twyw.png" caption="Kids ate first in Gratipay's twyw implementation." url="https://opensource.com/open-organization/16/7/compensating-employees-letting-them-take-what-they-want" %} 229 | 230 | ## Attention Is Costly 231 | 232 | Whether we can find algorithms we trust to distribute funds from companies to 233 | individual maintainers, or whether we [continue evolving FOSS 234 | governance](/2024/the-future-of-foss-foundations/) to include directing funding 235 | flows, encapsulation is key to scaling. 236 | 237 | When I buy a cup of coffee, I am not burdened with deciding how much of my five 238 | dollars to distribute to the farmer who grew the beans, and the shipping company 239 | that transported them, and the roaster who roasted them, and the suppliers of 240 | the cup, the paper sleeve, the lid, the milk, and the sugar, and the barista. I 241 | pay for a product. We need the same with Open Source. 242 | 243 | At Sentry [we sponsor upwards of 1,000 244 | projects](https://blog.sentry.io/we-just-gave-750-000-dollars-to-open-source-maintainers). 245 | Classical sponsorship models such as the original [FOSS Contributor 246 | Fund](https://www.oreilly.com/library/view/investing-in-open/9781098111915/) 247 | require way too much attention to each project to work at this scale. This is 248 | also the limitation I see with attempts such as 249 | [Drips](https://www.drips.network/), where "anyone can create a _Drip List_ to 250 | flexibly send funds to a list of up to 200 open-source GitHub repositories and 251 | Ethereum addresses at a time." Who has time for that? Same with issue bounties. 252 | I don't see that scaling, because it depends a lot of attention at a really 253 | fine-grained level. 254 | 255 | I see this mismatched expectation at the project level as well. I hear from 256 | maintainers trying to sell me ad space on their README. Sentry does a handful 257 | of sponsorships for Open Source projects out of our digital marketing budget, 258 | where we're closely tracking ROI of paid logo placement based on click-through 259 | and conversion rates. Our [main funding 260 | program](https://blog.sentry.io/we-just-gave-750-000-dollars-to-open-source-maintainers/) 261 | (which is the pattern for the [Open Source 262 | Pledge](https://opensourcepledge.com/)) operates at a much higher level of 263 | abstractionl. Maybe someone will build DoubleClick for Open Source to scale 264 | this up. Until then I don't have time to pay individual attention to thousands 265 | of placements. 266 | -------------------------------------------------------------------------------- /2024/distributing-funds-in-open-source/konstantin.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chadwhitacre/openpath/7c807df966f05f79ebb8f1f172a4556857d337dd/2024/distributing-funds-in-open-source/konstantin.png -------------------------------------------------------------------------------- /2024/distributing-funds-in-open-source/pachinko.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chadwhitacre/openpath/7c807df966f05f79ebb8f1f172a4556857d337dd/2024/distributing-funds-in-open-source/pachinko.jpg -------------------------------------------------------------------------------- /2024/distributing-funds-in-open-source/serkan.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chadwhitacre/openpath/7c807df966f05f79ebb8f1f172a4556857d337dd/2024/distributing-funds-in-open-source/serkan.png -------------------------------------------------------------------------------- /2024/distributing-funds-in-open-source/social.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chadwhitacre/openpath/7c807df966f05f79ebb8f1f172a4556857d337dd/2024/distributing-funds-in-open-source/social.webp -------------------------------------------------------------------------------- /2024/distributing-funds-in-open-source/twyw.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chadwhitacre/openpath/7c807df966f05f79ebb8f1f172a4556857d337dd/2024/distributing-funds-in-open-source/twyw.png -------------------------------------------------------------------------------- /2024/fair-source-does-not-equal-software-commons/social.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chadwhitacre/openpath/7c807df966f05f79ebb8f1f172a4556857d337dd/2024/fair-source-does-not-equal-software-commons/social.webp -------------------------------------------------------------------------------- /2024/funding-the-five-thousand/a-few-thousand-people.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chadwhitacre/openpath/7c807df966f05f79ebb8f1f172a4556857d337dd/2024/funding-the-five-thousand/a-few-thousand-people.webp -------------------------------------------------------------------------------- /2024/funding-the-five-thousand/fair-pay-no-hoops.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chadwhitacre/openpath/7c807df966f05f79ebb8f1f172a4556857d337dd/2024/funding-the-five-thousand/fair-pay-no-hoops.webp -------------------------------------------------------------------------------- /2024/funding-the-five-thousand/social.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chadwhitacre/openpath/7c807df966f05f79ebb8f1f172a4556857d337dd/2024/funding-the-five-thousand/social.webp -------------------------------------------------------------------------------- /2024/leadership-and-power-in-open-source/old-call.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chadwhitacre/openpath/7c807df966f05f79ebb8f1f172a4556857d337dd/2024/leadership-and-power-in-open-source/old-call.webp -------------------------------------------------------------------------------- /2024/leadership-and-power-in-open-source/open-call.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chadwhitacre/openpath/7c807df966f05f79ebb8f1f172a4556857d337dd/2024/leadership-and-power-in-open-source/open-call.webp -------------------------------------------------------------------------------- /2024/leadership-and-power-in-open-source/openpress.com.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chadwhitacre/openpath/7c807df966f05f79ebb8f1f172a4556857d337dd/2024/leadership-and-power-in-open-source/openpress.com.webp -------------------------------------------------------------------------------- /2024/leadership-and-power-in-open-source/social.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chadwhitacre/openpath/7c807df966f05f79ebb8f1f172a4556857d337dd/2024/leadership-and-power-in-open-source/social.webp -------------------------------------------------------------------------------- /2024/open-source-is-a-restaurant/social.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chadwhitacre/openpath/7c807df966f05f79ebb8f1f172a4556857d337dd/2024/open-source-is-a-restaurant/social.webp -------------------------------------------------------------------------------- /2024/questioning-the-value-of-open-source-software/figure-1.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chadwhitacre/openpath/7c807df966f05f79ebb8f1f172a4556857d337dd/2024/questioning-the-value-of-open-source-software/figure-1.webp -------------------------------------------------------------------------------- /2024/questioning-the-value-of-open-source-software/languages.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chadwhitacre/openpath/7c807df966f05f79ebb8f1f172a4556857d337dd/2024/questioning-the-value-of-open-source-software/languages.webp -------------------------------------------------------------------------------- /2024/questioning-the-value-of-open-source-software/paper.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chadwhitacre/openpath/7c807df966f05f79ebb8f1f172a4556857d337dd/2024/questioning-the-value-of-open-source-software/paper.webp -------------------------------------------------------------------------------- /2024/questioning-the-value-of-open-source-software/social.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chadwhitacre/openpath/7c807df966f05f79ebb8f1f172a4556857d337dd/2024/questioning-the-value-of-open-source-software/social.webp -------------------------------------------------------------------------------- /2024/relicensing-and-rug-pulls/Percentage_of_Commits_by_Era_and_Relation.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chadwhitacre/openpath/7c807df966f05f79ebb8f1f172a4556857d337dd/2024/relicensing-and-rug-pulls/Percentage_of_Commits_by_Era_and_Relation.webp -------------------------------------------------------------------------------- /2024/relicensing-and-rug-pulls/betatesters.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chadwhitacre/openpath/7c807df966f05f79ebb8f1f172a4556857d337dd/2024/relicensing-and-rug-pulls/betatesters.webp -------------------------------------------------------------------------------- /2024/relicensing-and-rug-pulls/social.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chadwhitacre/openpath/7c807df966f05f79ebb8f1f172a4556857d337dd/2024/relicensing-and-rug-pulls/social.webp -------------------------------------------------------------------------------- /2024/thank-you-ben/social.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chadwhitacre/openpath/7c807df966f05f79ebb8f1f172a4556857d337dd/2024/thank-you-ben/social.webp -------------------------------------------------------------------------------- /2024/the-case-for-a-new-institution/burnout.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chadwhitacre/openpath/7c807df966f05f79ebb8f1f172a4556857d337dd/2024/the-case-for-a-new-institution/burnout.webp -------------------------------------------------------------------------------- /2024/the-future-of-foss-foundations/level-3.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chadwhitacre/openpath/7c807df966f05f79ebb8f1f172a4556857d337dd/2024/the-future-of-foss-foundations/level-3.gif -------------------------------------------------------------------------------- /2024/the-future-of-foss-foundations/osss.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chadwhitacre/openpath/7c807df966f05f79ebb8f1f172a4556857d337dd/2024/the-future-of-foss-foundations/osss.webp -------------------------------------------------------------------------------- /2024/the-future-of-foss-foundations/social.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chadwhitacre/openpath/7c807df966f05f79ebb8f1f172a4556857d337dd/2024/the-future-of-foss-foundations/social.webp -------------------------------------------------------------------------------- /2024/the-historical-case-for-fair-source/code_rush.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chadwhitacre/openpath/7c807df966f05f79ebb8f1f172a4556857d337dd/2024/the-historical-case-for-fair-source/code_rush.webp -------------------------------------------------------------------------------- /2024/the-historical-case-for-fair-source/navigator.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chadwhitacre/openpath/7c807df966f05f79ebb8f1f172a4556857d337dd/2024/the-historical-case-for-fair-source/navigator.webp -------------------------------------------------------------------------------- /2024/the-historical-case-for-fair-source/not-bad.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chadwhitacre/openpath/7c807df966f05f79ebb8f1f172a4556857d337dd/2024/the-historical-case-for-fair-source/not-bad.jpg -------------------------------------------------------------------------------- /2024/the-historical-case-for-fair-source/social.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chadwhitacre/openpath/7c807df966f05f79ebb8f1f172a4556857d337dd/2024/the-historical-case-for-fair-source/social.webp -------------------------------------------------------------------------------- /2024/the-historical-case-for-fair-source/twiki.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chadwhitacre/openpath/7c807df966f05f79ebb8f1f172a4556857d337dd/2024/the-historical-case-for-fair-source/twiki.webp -------------------------------------------------------------------------------- /2024/the-historical-case-for-fair-source/underlying-points-of-view.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chadwhitacre/openpath/7c807df966f05f79ebb8f1f172a4556857d337dd/2024/the-historical-case-for-fair-source/underlying-points-of-view.webp -------------------------------------------------------------------------------- /2024/the-open-source-sustainability-crisis/social.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chadwhitacre/openpath/7c807df966f05f79ebb8f1f172a4556857d337dd/2024/the-open-source-sustainability-crisis/social.webp -------------------------------------------------------------------------------- /2024/towards-software-commons/corporate-welfare-program.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chadwhitacre/openpath/7c807df966f05f79ebb8f1f172a4556857d337dd/2024/towards-software-commons/corporate-welfare-program.webp -------------------------------------------------------------------------------- /2024/towards-software-commons/please-trespass.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chadwhitacre/openpath/7c807df966f05f79ebb8f1f172a4556857d337dd/2024/towards-software-commons/please-trespass.webp -------------------------------------------------------------------------------- /2024/towards-software-commons/social.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chadwhitacre/openpath/7c807df966f05f79ebb8f1f172a4556857d337dd/2024/towards-software-commons/social.webp -------------------------------------------------------------------------------- /2024/welcome-to-open-path/social.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chadwhitacre/openpath/7c807df966f05f79ebb8f1f172a4556857d337dd/2024/welcome-to-open-path/social.webp -------------------------------------------------------------------------------- /2024/widespread-use-of-a-fair-source-product/Percentage_of_Commits_by_Era_and_Relation.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chadwhitacre/openpath/7c807df966f05f79ebb8f1f172a4556857d337dd/2024/widespread-use-of-a-fair-source-product/Percentage_of_Commits_by_Era_and_Relation.webp -------------------------------------------------------------------------------- /2024/widespread-use-of-a-fair-source-product/atlassian.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chadwhitacre/openpath/7c807df966f05f79ebb8f1f172a4556857d337dd/2024/widespread-use-of-a-fair-source-product/atlassian.webp -------------------------------------------------------------------------------- /2024/widespread-use-of-a-fair-source-product/dashboard.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chadwhitacre/openpath/7c807df966f05f79ebb8f1f172a4556857d337dd/2024/widespread-use-of-a-fair-source-product/dashboard.webp -------------------------------------------------------------------------------- /2024/widespread-use-of-a-fair-source-product/social.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chadwhitacre/openpath/7c807df966f05f79ebb8f1f172a4556857d337dd/2024/widespread-use-of-a-fair-source-product/social.webp -------------------------------------------------------------------------------- /2025/how-to-vote-in-the-2025-osi-election/social.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chadwhitacre/openpath/7c807df966f05f79ebb8f1f172a4556857d337dd/2025/how-to-vote-in-the-2025-osi-election/social.webp -------------------------------------------------------------------------------- /2025/luke-missed-the-memo/social.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chadwhitacre/openpath/7c807df966f05f79ebb8f1f172a4556857d337dd/2025/luke-missed-the-memo/social.webp -------------------------------------------------------------------------------- /2025/open-source-is-a-bad-gift-economy/index.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Open Source Is a Bad Gift Economy 3 | excerpt: Foo. 4 | noindex: true 5 | --- 6 | {% include img.html src="social.webp" caption="" url="" %} 7 | 8 | Let's take it that an economy is a system by which humans exchange goods and 9 | services. Several such systems are commonly observed, such as armed robbery, 10 | central planning, free trade. Rules for these systems sometimes end up in 11 | as laws and contracts, sometimes in unwritten social expectations. 12 | 13 | The system most of us are most accustomed to is the global market economy: we 14 | give money and get stuff, both parties walk away clean. 15 | 16 | A gift economy is a system of exchange in which gifts carry obligations. The 17 | exchange is agonistic. You are never clean, you're always entangled. 18 | 19 | Open Source is a gift. Does it carry obligations? Is it agonistic? 20 | 21 | Some think it does, some think it doesn't. For those who think it does, the 22 | obligation to reciprocate is ill-defined. Mismatched expectations suck, and 23 | we've got a huge case of just that. 24 | 25 | Who are the parties? 26 | 27 | Producers and consumers. Maybe individuals, but more likely groups: projects 28 | and companies. 29 | 30 | There are three ways to reciprocate: time, product, and money. All are part of 31 | a healthy diet. There's not one exact right answer, but we could stand to be 32 | clearer on the *range* of behaviors that is appropriate for people 33 | 34 | Open Source Pledge is a social contract, right now it's about money and that's 35 | what we're focused on. Some day it could also address product and time. Drupal 36 | and WordPress have systems for time accounting, as does typescript-eslint on a 37 | smaller scale. Companies that offer in-kind can probably give us the fair 38 | market value pretty easily. 39 | 40 | These are all invitations. We're in the realm of social, not legal. We have a 41 | system that makes sharing easy and sustainability hard, vs. the market where 42 | sustainability is easy and sharing is hard. It's good to have both, to 43 | rebalance ever so slightly. 44 | 45 | Open Source is a gift economy because it's based not on clean transactions, but 46 | on gifts of time, money, and resources that carry with them an obligation to 47 | reciprocate. It is a bad gift economy because the rules are not sufficiently 48 | shared between parties. We should make them clear in order to make Open Source 49 | function better. 50 | 51 | Preferential treatment in vendor relations and in marketing. 52 | -------------------------------------------------------------------------------- /2025/open-source-is-a-bad-gift-economy/social.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chadwhitacre/openpath/7c807df966f05f79ebb8f1f172a4556857d337dd/2025/open-source-is-a-bad-gift-economy/social.webp -------------------------------------------------------------------------------- /2025/point-four-of-elons-fork-is-the-scary-one/social.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chadwhitacre/openpath/7c807df966f05f79ebb8f1f172a4556857d337dd/2025/point-four-of-elons-fork-is-the-scary-one/social.webp -------------------------------------------------------------------------------- /2025/the-birth-of-the-american-empire/hail-caesar.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chadwhitacre/openpath/7c807df966f05f79ebb8f1f172a4556857d337dd/2025/the-birth-of-the-american-empire/hail-caesar.webp -------------------------------------------------------------------------------- /2025/the-birth-of-the-american-empire/social.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chadwhitacre/openpath/7c807df966f05f79ebb8f1f172a4556857d337dd/2025/the-birth-of-the-american-empire/social.webp -------------------------------------------------------------------------------- /404.html: -------------------------------------------------------------------------------- 1 | --- 2 | title: 404 Not Found 3 | layout: default 4 | permalink: /404.html 5 | --- 6 | 7 |
8 |

{{ page.title }}

9 |

Sorry, seems the path is gone. 😞

10 |

Head home?

11 |
12 | -------------------------------------------------------------------------------- /CNAME: -------------------------------------------------------------------------------- 1 | openpath.quest -------------------------------------------------------------------------------- /Gemfile: -------------------------------------------------------------------------------- 1 | source 'https://rubygems.org' 2 | # This should be periodically updated to match the version used by GitHub pages. 3 | # See: https://pages.github.com/versions/ 4 | ruby '3.3.4' 5 | gem 'github-pages', group: :jekyll_plugins 6 | -------------------------------------------------------------------------------- /Gemfile.lock: -------------------------------------------------------------------------------- 1 | GEM 2 | remote: https://rubygems.org/ 3 | specs: 4 | activesupport (8.0.2) 5 | base64 6 | benchmark (>= 0.3) 7 | bigdecimal 8 | concurrent-ruby (~> 1.0, >= 1.3.1) 9 | connection_pool (>= 2.2.5) 10 | drb 11 | i18n (>= 1.6, < 2) 12 | logger (>= 1.4.2) 13 | minitest (>= 5.1) 14 | securerandom (>= 0.3) 15 | tzinfo (~> 2.0, >= 2.0.5) 16 | uri (>= 0.13.1) 17 | addressable (2.8.7) 18 | public_suffix (>= 2.0.2, < 7.0) 19 | base64 (0.2.0) 20 | benchmark (0.4.0) 21 | bigdecimal (3.1.9) 22 | coffee-script (2.4.1) 23 | coffee-script-source 24 | execjs 25 | coffee-script-source (1.12.2) 26 | colorator (1.1.0) 27 | commonmarker (0.23.11) 28 | concurrent-ruby (1.3.5) 29 | connection_pool (2.5.3) 30 | csv (3.3.4) 31 | dnsruby (1.72.4) 32 | base64 (~> 0.2.0) 33 | logger (~> 1.6.5) 34 | simpleidn (~> 0.2.1) 35 | drb (2.2.1) 36 | em-websocket (0.5.3) 37 | eventmachine (>= 0.12.9) 38 | http_parser.rb (~> 0) 39 | ethon (0.16.0) 40 | ffi (>= 1.15.0) 41 | eventmachine (1.2.7) 42 | execjs (2.10.0) 43 | faraday (2.13.1) 44 | faraday-net_http (>= 2.0, < 3.5) 45 | json 46 | logger 47 | faraday-net_http (3.4.0) 48 | net-http (>= 0.5.0) 49 | ffi (1.17.2-aarch64-linux-gnu) 50 | ffi (1.17.2-aarch64-linux-musl) 51 | ffi (1.17.2-arm-linux-gnu) 52 | ffi (1.17.2-arm-linux-musl) 53 | ffi (1.17.2-arm64-darwin) 54 | ffi (1.17.2-x86_64-darwin) 55 | ffi (1.17.2-x86_64-linux-gnu) 56 | ffi (1.17.2-x86_64-linux-musl) 57 | forwardable-extended (2.6.0) 58 | gemoji (4.1.0) 59 | github-pages (232) 60 | github-pages-health-check (= 1.18.2) 61 | jekyll (= 3.10.0) 62 | jekyll-avatar (= 0.8.0) 63 | jekyll-coffeescript (= 1.2.2) 64 | jekyll-commonmark-ghpages (= 0.5.1) 65 | jekyll-default-layout (= 0.1.5) 66 | jekyll-feed (= 0.17.0) 67 | jekyll-gist (= 1.5.0) 68 | jekyll-github-metadata (= 2.16.1) 69 | jekyll-include-cache (= 0.2.1) 70 | jekyll-mentions (= 1.6.0) 71 | jekyll-optional-front-matter (= 0.3.2) 72 | jekyll-paginate (= 1.1.0) 73 | jekyll-readme-index (= 0.3.0) 74 | jekyll-redirect-from (= 0.16.0) 75 | jekyll-relative-links (= 0.6.1) 76 | jekyll-remote-theme (= 0.4.3) 77 | jekyll-sass-converter (= 1.5.2) 78 | jekyll-seo-tag (= 2.8.0) 79 | jekyll-sitemap (= 1.4.0) 80 | jekyll-swiss (= 1.0.0) 81 | jekyll-theme-architect (= 0.2.0) 82 | jekyll-theme-cayman (= 0.2.0) 83 | jekyll-theme-dinky (= 0.2.0) 84 | jekyll-theme-hacker (= 0.2.0) 85 | jekyll-theme-leap-day (= 0.2.0) 86 | jekyll-theme-merlot (= 0.2.0) 87 | jekyll-theme-midnight (= 0.2.0) 88 | jekyll-theme-minimal (= 0.2.0) 89 | jekyll-theme-modernist (= 0.2.0) 90 | jekyll-theme-primer (= 0.6.0) 91 | jekyll-theme-slate (= 0.2.0) 92 | jekyll-theme-tactile (= 0.2.0) 93 | jekyll-theme-time-machine (= 0.2.0) 94 | jekyll-titles-from-headings (= 0.5.3) 95 | jemoji (= 0.13.0) 96 | kramdown (= 2.4.0) 97 | kramdown-parser-gfm (= 1.1.0) 98 | liquid (= 4.0.4) 99 | mercenary (~> 0.3) 100 | minima (= 2.5.1) 101 | nokogiri (>= 1.16.2, < 2.0) 102 | rouge (= 3.30.0) 103 | terminal-table (~> 1.4) 104 | webrick (~> 1.8) 105 | github-pages-health-check (1.18.2) 106 | addressable (~> 2.3) 107 | dnsruby (~> 1.60) 108 | octokit (>= 4, < 8) 109 | public_suffix (>= 3.0, < 6.0) 110 | typhoeus (~> 1.3) 111 | html-pipeline (2.14.3) 112 | activesupport (>= 2) 113 | nokogiri (>= 1.4) 114 | http_parser.rb (0.8.0) 115 | i18n (1.14.7) 116 | concurrent-ruby (~> 1.0) 117 | jekyll (3.10.0) 118 | addressable (~> 2.4) 119 | colorator (~> 1.0) 120 | csv (~> 3.0) 121 | em-websocket (~> 0.5) 122 | i18n (>= 0.7, < 2) 123 | jekyll-sass-converter (~> 1.0) 124 | jekyll-watch (~> 2.0) 125 | kramdown (>= 1.17, < 3) 126 | liquid (~> 4.0) 127 | mercenary (~> 0.3.3) 128 | pathutil (~> 0.9) 129 | rouge (>= 1.7, < 4) 130 | safe_yaml (~> 1.0) 131 | webrick (>= 1.0) 132 | jekyll-avatar (0.8.0) 133 | jekyll (>= 3.0, < 5.0) 134 | jekyll-coffeescript (1.2.2) 135 | coffee-script (~> 2.2) 136 | coffee-script-source (~> 1.12) 137 | jekyll-commonmark (1.4.0) 138 | commonmarker (~> 0.22) 139 | jekyll-commonmark-ghpages (0.5.1) 140 | commonmarker (>= 0.23.7, < 1.1.0) 141 | jekyll (>= 3.9, < 4.0) 142 | jekyll-commonmark (~> 1.4.0) 143 | rouge (>= 2.0, < 5.0) 144 | jekyll-default-layout (0.1.5) 145 | jekyll (>= 3.0, < 5.0) 146 | jekyll-feed (0.17.0) 147 | jekyll (>= 3.7, < 5.0) 148 | jekyll-gist (1.5.0) 149 | octokit (~> 4.2) 150 | jekyll-github-metadata (2.16.1) 151 | jekyll (>= 3.4, < 5.0) 152 | octokit (>= 4, < 7, != 4.4.0) 153 | jekyll-include-cache (0.2.1) 154 | jekyll (>= 3.7, < 5.0) 155 | jekyll-mentions (1.6.0) 156 | html-pipeline (~> 2.3) 157 | jekyll (>= 3.7, < 5.0) 158 | jekyll-optional-front-matter (0.3.2) 159 | jekyll (>= 3.0, < 5.0) 160 | jekyll-paginate (1.1.0) 161 | jekyll-readme-index (0.3.0) 162 | jekyll (>= 3.0, < 5.0) 163 | jekyll-redirect-from (0.16.0) 164 | jekyll (>= 3.3, < 5.0) 165 | jekyll-relative-links (0.6.1) 166 | jekyll (>= 3.3, < 5.0) 167 | jekyll-remote-theme (0.4.3) 168 | addressable (~> 2.0) 169 | jekyll (>= 3.5, < 5.0) 170 | jekyll-sass-converter (>= 1.0, <= 3.0.0, != 2.0.0) 171 | rubyzip (>= 1.3.0, < 3.0) 172 | jekyll-sass-converter (1.5.2) 173 | sass (~> 3.4) 174 | jekyll-seo-tag (2.8.0) 175 | jekyll (>= 3.8, < 5.0) 176 | jekyll-sitemap (1.4.0) 177 | jekyll (>= 3.7, < 5.0) 178 | jekyll-swiss (1.0.0) 179 | jekyll-theme-architect (0.2.0) 180 | jekyll (> 3.5, < 5.0) 181 | jekyll-seo-tag (~> 2.0) 182 | jekyll-theme-cayman (0.2.0) 183 | jekyll (> 3.5, < 5.0) 184 | jekyll-seo-tag (~> 2.0) 185 | jekyll-theme-dinky (0.2.0) 186 | jekyll (> 3.5, < 5.0) 187 | jekyll-seo-tag (~> 2.0) 188 | jekyll-theme-hacker (0.2.0) 189 | jekyll (> 3.5, < 5.0) 190 | jekyll-seo-tag (~> 2.0) 191 | jekyll-theme-leap-day (0.2.0) 192 | jekyll (> 3.5, < 5.0) 193 | jekyll-seo-tag (~> 2.0) 194 | jekyll-theme-merlot (0.2.0) 195 | jekyll (> 3.5, < 5.0) 196 | jekyll-seo-tag (~> 2.0) 197 | jekyll-theme-midnight (0.2.0) 198 | jekyll (> 3.5, < 5.0) 199 | jekyll-seo-tag (~> 2.0) 200 | jekyll-theme-minimal (0.2.0) 201 | jekyll (> 3.5, < 5.0) 202 | jekyll-seo-tag (~> 2.0) 203 | jekyll-theme-modernist (0.2.0) 204 | jekyll (> 3.5, < 5.0) 205 | jekyll-seo-tag (~> 2.0) 206 | jekyll-theme-primer (0.6.0) 207 | jekyll (> 3.5, < 5.0) 208 | jekyll-github-metadata (~> 2.9) 209 | jekyll-seo-tag (~> 2.0) 210 | jekyll-theme-slate (0.2.0) 211 | jekyll (> 3.5, < 5.0) 212 | jekyll-seo-tag (~> 2.0) 213 | jekyll-theme-tactile (0.2.0) 214 | jekyll (> 3.5, < 5.0) 215 | jekyll-seo-tag (~> 2.0) 216 | jekyll-theme-time-machine (0.2.0) 217 | jekyll (> 3.5, < 5.0) 218 | jekyll-seo-tag (~> 2.0) 219 | jekyll-titles-from-headings (0.5.3) 220 | jekyll (>= 3.3, < 5.0) 221 | jekyll-watch (2.2.1) 222 | listen (~> 3.0) 223 | jemoji (0.13.0) 224 | gemoji (>= 3, < 5) 225 | html-pipeline (~> 2.2) 226 | jekyll (>= 3.0, < 5.0) 227 | json (2.11.3) 228 | kramdown (2.4.0) 229 | rexml 230 | kramdown-parser-gfm (1.1.0) 231 | kramdown (~> 2.0) 232 | liquid (4.0.4) 233 | listen (3.9.0) 234 | rb-fsevent (~> 0.10, >= 0.10.3) 235 | rb-inotify (~> 0.9, >= 0.9.10) 236 | logger (1.6.6) 237 | mercenary (0.3.6) 238 | minima (2.5.1) 239 | jekyll (>= 3.5, < 5.0) 240 | jekyll-feed (~> 0.9) 241 | jekyll-seo-tag (~> 2.1) 242 | minitest (5.25.5) 243 | net-http (0.6.0) 244 | uri 245 | nokogiri (1.18.8-aarch64-linux-gnu) 246 | racc (~> 1.4) 247 | nokogiri (1.18.8-aarch64-linux-musl) 248 | racc (~> 1.4) 249 | nokogiri (1.18.8-arm-linux-gnu) 250 | racc (~> 1.4) 251 | nokogiri (1.18.8-arm-linux-musl) 252 | racc (~> 1.4) 253 | nokogiri (1.18.8-arm64-darwin) 254 | racc (~> 1.4) 255 | nokogiri (1.18.8-x86_64-darwin) 256 | racc (~> 1.4) 257 | nokogiri (1.18.8-x86_64-linux-gnu) 258 | racc (~> 1.4) 259 | nokogiri (1.18.8-x86_64-linux-musl) 260 | racc (~> 1.4) 261 | octokit (4.25.1) 262 | faraday (>= 1, < 3) 263 | sawyer (~> 0.9) 264 | pathutil (0.16.2) 265 | forwardable-extended (~> 2.6) 266 | public_suffix (5.1.1) 267 | racc (1.8.1) 268 | rb-fsevent (0.11.2) 269 | rb-inotify (0.11.1) 270 | ffi (~> 1.0) 271 | rexml (3.4.1) 272 | rouge (3.30.0) 273 | rubyzip (2.4.1) 274 | safe_yaml (1.0.5) 275 | sass (3.7.4) 276 | sass-listen (~> 4.0.0) 277 | sass-listen (4.0.0) 278 | rb-fsevent (~> 0.9, >= 0.9.4) 279 | rb-inotify (~> 0.9, >= 0.9.7) 280 | sawyer (0.9.2) 281 | addressable (>= 2.3.5) 282 | faraday (>= 0.17.3, < 3) 283 | securerandom (0.4.1) 284 | simpleidn (0.2.3) 285 | terminal-table (1.8.0) 286 | unicode-display_width (~> 1.1, >= 1.1.1) 287 | typhoeus (1.4.1) 288 | ethon (>= 0.9.0) 289 | tzinfo (2.0.6) 290 | concurrent-ruby (~> 1.0) 291 | unicode-display_width (1.8.0) 292 | uri (1.0.3) 293 | webrick (1.9.1) 294 | 295 | PLATFORMS 296 | aarch64-linux-gnu 297 | aarch64-linux-musl 298 | arm-linux-gnu 299 | arm-linux-musl 300 | arm64-darwin 301 | x86_64-darwin 302 | x86_64-linux-gnu 303 | x86_64-linux-musl 304 | 305 | DEPENDENCIES 306 | github-pages 307 | 308 | RUBY VERSION 309 | ruby 3.3.4p94 310 | 311 | BUNDLED WITH 312 | 2.5.11 313 | -------------------------------------------------------------------------------- /Makefile: -------------------------------------------------------------------------------- 1 | .PHONY: default bundle clean 2 | 3 | default: bundle 4 | bundle exec jekyll serve --host 0.0.0.0 --livereload --drafts --future 5 | 6 | bundle: 7 | bundle install 8 | 9 | clean: 10 | rm -rf .bundle/ruby 11 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Open Path 2 | 3 | 4 | 5 | ### Welcome! 6 | 7 | This repo holds the source code for 8 | [openpath.quest](https://openpath.quest/), where I blog 9 | about topics of interest to the Open Source community, the wider tech industry, 10 | and society at large. If you have questions or suggestions, feel free to [open 11 | an issue](https://github.com/chadwhitacre/openpath/issues/new), or reach out on 12 | [email](mailto:chad@zetaweb.com) or 13 | [X](https://twitter.com/chadwhitacre_). 14 | -------------------------------------------------------------------------------- /_config.yml: -------------------------------------------------------------------------------- 1 | plugins: 2 | - jekyll-feed 3 | 4 | # For RSS feed, keep in sync with index.html meta 5 | title: Open Path by Chad Whitacre 6 | excerpt: "Open Source is a gift that's greater than we realize." 7 | author: Chad Whitacre 8 | 9 | sass: 10 | sass_dir: . 11 | exclude: 12 | - "CNAME" 13 | - "Gemfile" 14 | - "Gemfile.lock" 15 | - "Makefile" 16 | - "README.md" 17 | - "bin" 18 | permalink: /:year/:title/ 19 | defaults: 20 | - values: 21 | layout: "post" 22 | -------------------------------------------------------------------------------- /_includes/img.html: -------------------------------------------------------------------------------- 1 | 2 |
3 | 4 | 5 | {% if include.caption != nil %}
{{ include.caption }}
{% endif %} 6 |
7 |
8 | 9 | -------------------------------------------------------------------------------- /_includes/posts.html: -------------------------------------------------------------------------------- 1 | {% for post in include.posts %} 2 |
3 |

4 | {{ post.title }} 5 |

6 |
7 | {% if include.enumerate %}{{ forloop.rindex }} ❧ {% endif %}{{ post.date | date: "%Y-%m-%d" }} ❧ {{ post.excerpt }} 8 |
9 |
10 | {% endfor %} 11 | -------------------------------------------------------------------------------- /_includes/youtube.html: -------------------------------------------------------------------------------- 1 |
2 |
3 |
4 | 9 |
10 |
11 |
12 | -------------------------------------------------------------------------------- /_layouts/default.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | {% capture page_url %}{{ page.url | absolute_url }}{% endcapture %} 5 | {% capture image_url %}{{ page_url }}social.webp{% endcapture %} 6 | 7 | 8 | 11 | 17 | 18 | {% if page.noindex %} 19 | 20 | {% endif %} 21 | 22 | 23 | 24 | {{ page.title }}{% if page.url != '/' %} ❧ Open Path by Chad Whitacre{% 25 | endif %} 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 47 | 52 | 57 | 58 | 61 |
62 | {% if page.url != '/' %} 63 | 64 | {% else %} 65 |
66 | {% endif %} 67 |

OPEN PATH

68 | {% if page.url == '/' %} 69 |

Open Source is a gift that's greater than we realize.

70 | {% include youtube.html video_id="g3DwMGwalrU" %} 71 | {% endif %} 72 | {% if page.url != '/' %} 73 |
74 | {% else %} 75 |
76 | {% endif %} 77 |
78 |
{{ content }}
79 | 128 |
🥺
129 | 130 | 131 | -------------------------------------------------------------------------------- /_layouts/post.html: -------------------------------------------------------------------------------- 1 | --- 2 | layout: default 3 | --- 4 | 5 |
6 | {% if page.noindex %} 7 |
8 | Unlisted Draft 9 |
10 | {% endif %} 11 |

{{ page.title }}

12 |
13 | By Chad Whitacre ❧ Published on {{ 14 | page.date | date: '%B %e, %Y' }} 15 |
16 |
tl;dr {{ page.excerpt }}
17 | {% if page.update %}
update{{ page.update }}
{% endif %} 18 | {% if page.series %}
19 | {% assign posts = site.posts | where: "series", page.series | sort: 'date' | reverse %} 20 | series 21 | 28 |
29 | {% endif %} 30 |
31 | Disclosure / advertisement: I work for 32 | Sentry. 33 |
34 | {{ content }} 35 | 36 | {% if page.bluesky %} 37 |
38 | Replies 39 |
40 |
41 | 42 | 45 | {% endif %} 46 |
47 | -------------------------------------------------------------------------------- /_posts/2024-01-04-welcome-to-open-path.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Welcome to Open Path 3 | excerpt: Open Path is a new blog by Chad Whitacre about Open Source, tech, and society. 4 | --- 5 | 6 | Greetings! Welcome to [Open Path](/). The purpose of this blog is to contribute 7 | to important conversations about topics that matter to the Open Source 8 | community, the wider tech industry, and society at large. In this intro post 9 | I'll give you a little background on myself, and sketch the big picture for the 10 | direction of this blog. 11 | 12 | ## A Little About Me 13 | 14 | My name is [Chad 15 | Whitacre](https://chadwhitacre.com/), and I've been involved in Open Source 16 | since 2001, soon after Christine Peterson [coined the 17 | term](https://opensource.com/article/18/2/coining-term-open-source-software). I 18 | participated in the Python web development boom in the 2000s that gave rise to 19 | Django and Flask. During this time, I experienced first-hand the tension 20 | between volunteer Open Source work and paid closed source work, so I spent the 21 | 2010s as founder of a crowdfunding startup called Gittip (later Gratipay). Now, 22 | here in the 2020s, I am Head of Open Source at 23 | [Sentry](https://sentry.io/welcome/), an application monitoring company with 24 | deep roots in the Open Source community. 25 | 26 | In the past I've published on the [Gittip](https://blog.gittip.com/) and 27 | [Gratipay](https://gratipay.news) blogs, as well as [on 28 | OpenSource.com](https://opensource.com/users/whit537). In my current role I 29 | publish [on Sentry's blog](https://blog.sentry.io/authors/chad-whitacre/), but 30 | there is more I need to say than makes sense to post there. With Open Path I am 31 | establishing a platform for myself to explore themes in Open Source and beyond. 32 | 33 | ## Why? So I Won't Get Fined 34 | 35 | To be honest, I'm irrationally terrified to start blogging again. A 36 | psychologist evaluated me in 2018 (a routine part of kidney donation). He 37 | diagnosed me with PTSD from all of the online conflict related to the end of 38 | Gittip (Gratipay). 2015–2017 did, in fact, suck. 39 | 40 | In one sense, then, [I'm just here so I won't get 41 | fined](https://www.youtube.com/watch?v=rmABbHSOTqQ). I work for Sentry, and my job 42 | requires me to be a "thought leader," so I need a platform. Others at Sentry 43 | have theirs: 44 | 45 | - [David Cramer](https://cra.mr/)—[technical 46 | co-founder](https://github.com/getsentry/sentry/commit/3c2e87573d3bd16f61cf08fece0638cc47a4fc22), my boss 47 | - [Armin Ronacher](https://lucumr.pocoo.org/)—[employee 48 | 1](https://blog.sentry.io/welcome-armin-ronacher/), principle architect 49 | - [Ben 50 | Vinegar](https://benv.ca/)—[employee 51 | 2](https://blog.sentry.io/welcome-ben-vinegar/), my former boss 52 | 53 | Those are theirs. This is mine. 54 | 55 | Now, I'm a mission-driven guy. I naturally tend to want to relate my work in 56 | the world back to crisp fundamentals. Sentry's mission is **to enable 57 | developers to ship with confidence**, so that guides my work in Open Source at 58 | Sentry. 59 | 60 | Our Open Source Program Office (OSPO) has four programs: 61 | 62 | 1. _Self-hosted._ Our business model is SaaS, but we want all developers to be 63 | able to use Sentry and Codecov. My team is responsible for our self-hosted 64 | offerings, which are suitable out-of-the-box for small-volume and 65 | proof-of-concept deployments, and can serve as blueprints for more robust 66 | setups. 67 | 68 | 1. _Community engagement._ Open Source is the de facto development model for 69 | developers society-wide. Practically speaking, my team maintains GitHub 70 | automations to help us stay on top of inbound issues. 71 | 72 | 1. _Licensing and compliance._ We work closely with Legal to ensure compliance 73 | with the terms of the licenses of the components we use, and to properly 74 | license the software we ourselves produce. 75 | 76 | 1. _Funding._ We give lots of money to Open Source projects. It's fun. 77 | 78 | I see (1) as directly related to our mission. My team "enables developers" by 79 | making Sentry and Codecov available to use in a way they couldn't otherwise. I 80 | see (2) as one degree removed. When developers have trouble using our products, 81 | we want to hear about it, so we can help them out and potentially improve the 82 | products. 83 | 84 | I see (3) and (4) as further removed from Sentry's mission, narrowly 85 | understood. Our licensing and funding activities do not directly help Sentry 86 | and Codecov users ship their own software with confidence. If you squint, you 87 | could be like, "Well, Sentry and Codecov need a strong Open Source supply chain 88 | in order to be stable products." Meh, maybe. I think this only really gets 89 | interesting when we start talking about the state of the Open Source ecosystem 90 | as a whole, beyond just our own products. 91 | 92 | Broadly understood, Sentry's mission includes solving the [Open Source 93 | sustainability crisis](/2024/the-open-source-sustainability-crisis/). We want 94 | to enable developers to ship with confidence, meaning: 95 | 96 | - for developers in general, confidence in the security and overall quality of 97 | their Open Source dependencies; and 98 | - for noncommercial Open Source developers, confidence that we've collectively, 99 | financially got their back. 100 | 101 | Both are way bigger than Sentry, and that's where thought leadership enters my 102 | job description. Hence, this blog. 103 | 104 | ## Really Why? The Lens of Love 105 | 106 | Sentry's mission is to enable developers to ship with confidence, but this is 107 | my platform, not Sentry's. These are my opinions, not those of my employer. 108 | What is my mission? What are the fundamentals I care about? 109 | 110 | I wrote about this when Gratipay was dying its slow death. 111 | [**Love**](https://opensource.com/open-organization/16/9/openness-means-to-what-end) 112 | is the word. That's the lens I come back to, trite and loaded as it may be. 113 | Open Source is not an end in itself. To get from Open Source to Love and back, 114 | we have a lot of ground to cover: 115 | 116 | - will 117 | - trust 118 | - unity 119 | - voices 120 | - service 121 | - conflict 122 | - scarcity 123 | - fairness 124 | - legalism 125 | - activism 126 | - freedom 127 | - diversity 128 | - gratitude 129 | - authority 130 | - hierarchy 131 | - humanity 132 | - producers 133 | - obedience 134 | - resistance 135 | - generosity 136 | - journalism 137 | - economics 138 | - consumers 139 | - community 140 | - submission 141 | - resentment 142 | - productivity 143 | - employment 144 | - corporations 145 | - post-scarcity 146 | - sustainability 147 | - confrontation 148 | - future of work 149 | - platform decay 150 | - open companies 151 | - exit to community 152 | - individual and group 153 | - governing the commons 154 | 155 | Like I say, I naturally tend to want to relate my work in the world back to 156 | fundamentals. If I'm going to blog in my own voice on my own platform, I'm not 157 | sure how I'll be able to avoid going down rabbit holes such as these. 🐰🕳️ 158 | 159 | I do think Open Source is one of the most interesting things going right now, 160 | precisely because it does touch on so many fundamental questions about what it 161 | means to be human in the world. I'm terrified at the prospect of engaging these 162 | questions publicly—to press the metaphor, this path seems to be starting out along the 163 | edge of a cliff! 164 | 165 | Hopefully [Open Path](https://openpath.quest/) leads to a good 166 | place. Hopefully I won't get fined. 167 | 168 | Thanks for visiting! 💃 169 | -------------------------------------------------------------------------------- /_posts/2024-01-19-the-open-source-sustainability-crisis.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: The Open Source Sustainability Crisis 3 | excerpt: What is Open Source sustainability? Fair pay, no hoops. Why is it in crisis? Burnout. 4 | bluesky: https://bsky.app/profile/chadwhitacre.com/post/3lbvmt5wtgk2q 5 | homepage_rank: 1 6 | --- 7 | 8 | Let's get [the XKCD reference](https://xkcd.com/2347/) out of the way, shall we? 9 | 10 | {% include img.html src="https://imgs.xkcd.com/comics/dependency_2x.png" url="https://xkcd.com/2347/" orientation="portrait" %} 11 | 12 | Okay, now let's talk about the Open Source sustainability crisis. The purpose 13 | of this post is to define terms. What is Open Source sustainability? Why do I 14 | say it is in crisis? My answers are that sustainability is when people are 15 | getting paid _without jumping through hoops_, and we're in a crisis because 16 | people aren't _and they're burning out_. 17 | 18 | ## What is Open Source Sustainability? 19 | 20 | Open Source sustainability is when any smart, motivated person can produce 21 | widely adopted Open Source software and get paid fairly without jumping through 22 | hoops. 23 | 24 | Consider these four examples: 25 | 26 | 1. [**Jordan Harband**](https://twitter.com/ljharb) is a smart, motivated 27 | person who produces [widely adopted Open Source 28 | software](https://github.com/ljharb) and [can't get paid fairly without jumping 29 | through 30 | hoops](https://thenewstack.io/open-source-needs-maintainers-but-how-can-they-get-paid/). 31 | 32 | 1. [**Josh Goldberg**](https://www.joshuakgoldberg.com/) is a smart, motivated 33 | person who produces [widely adopted Open Source 34 | software](https://github.com/JoshuaKGoldberg) and [can't get paid fairly 35 | without jumping through 36 | hoops](https://twitter.com/JoshuaKGoldberg/status/1737229604442517902). 37 | 38 |

My yearly income milestones as an independent open source person:
* 2022: minimum wage for NYC (~$35k/year)
* 2023: livable wage for NYC (~$60k/year)
* 2024 goal: entry level software developer salary (~$100k/year)

goals.

— Josh Goldberg 💖 (@JoshuaKGoldberg) December 19, 2023
39 | 40 | 1. [**Filippo Valsorda**](https://filippo.io/) is a smart, motivated person who 41 | produces [widely adopted Open Source 42 | software](https://github.com/FiloSottile) and can't get paid fairly without 43 | [jumping through hoops](https://words.filippo.io/full-time-maintainer/). 44 | 45 | 1. [**Caleb Porzio**](https://calebporzio.com/) is a smart, motivated person 46 | who produces [widely adopted Open Source 47 | software](https://github.com/calebporzio) and can't get [paid 48 | fairly](https://calebporzio.com/i-just-hit-dollar-100000yr-on-github-sponsors-heres-how-i-did-it) 49 | without [jumping through hoops](https://calebporzio.com/sponsorware). 50 | 51 | Those are four people at the top of the Open Source game, clearly illustrating 52 | that we have not reached Open Source sustainability yet. We've hardly begun. 53 | For, sustainability means the opportunity to produce Open Source software and 54 | get paid fairly without jumping through hoops is widely available to many, many 55 | people. 56 | 57 | How many? There are [30 58 | million](https://www.statista.com/statistics/627312/worldwide-developer-population/) 59 | developers in the world. The largest tech companies each employ on the order of 60 | magnitude of 10,000 to 100,000 of us. The sustainable Open Source community 61 | taken as a whole will be roughly the same size. Open Source is [a sleeping tech 62 | giant](https://gratipay.news/your-company-should-probably-pay-2000-per-person-for-open-source-9205443e209d). 63 | 64 | - 1 person sustained - a glimpse 65 | - 10 people - a glimmer 66 | - 100 - a milestone 67 | - 1,000 - progress 68 | - 10,000 - arrival 69 | - 100,000 - success 70 | 71 | Today we are at zero. 72 | 73 | ## What's Wrong With Hoops? 74 | 75 | Hoops are boring. We've had scarcity-based economic relations for millenia. 76 | Open Source is designed for a different world. It presents the first real 77 | opportunity in our society to begin to develop a post-scarcity economic model 78 | at scale. That likely wants unpacking in [a future 79 | post](https://github.com/chadwhitacre/openpath/issues/15). For now, I assert 80 | that our creative use of [well-trodden 81 | paths](https://twitter.com/eigenjoy/status/862412458517962752) is Open Source 82 | _subsidization_, not _sustainability_. 83 | 84 |

If you're interested in monetizing your open-source project, I made this handy chart for you: pic.twitter.com/2yAjCRt78T

— Nate (@eigenjoy) May 10, 2017
85 | 86 | As I define it, Open Source sustainability means no hoops, no "New Role" in 87 | Nate's chart. Self-determined individuals freely produce Open Source software, 88 | and get paid in proportion to their productivity without having to also become 89 | tech influencers, or sell contracts, or any other shenanigans. Those can who 90 | want to. I envision a world where we don't have to. 91 | 92 | ## What is the Sustainability Crisis? 93 | 94 | High-profile security kerfuffles such as Heartbleed and Log4Shell often come to 95 | mind when we think about Open Source in crisis. But, while they draw attention 96 | to the sustainability crisis, the crisis is not about security. Microsoft pays 97 | [100,000](https://devblogs.microsoft.com/engineering-at-microsoft/welcome-to-the-engineering-at-microsoft-blog/) 98 | developers and still has [plenty of security 99 | issues](https://msrc.microsoft.com/update-guide/vulnerability). Yes, companies 100 | and governments should [care about Open Source security](https://openssf.org/), 101 | and those efforts can contribute to what I'm calling sustainability, but 102 | security is a proxy concern. Let's call that the Open Source security crisis. 103 | 104 | Just as the security crisis is adjacent to the sustainability crisis, so is the 105 | [Open Source 106 | diversity](https://en.wikipedia.org/wiki/Diversity_in_open-source_software) 107 | crisis: Open Source is markedly less demographically diverse than software 108 | engineering in general. We have not just inequality of outcome but inequality of 109 | opportunity. 110 | [35%](https://www.statista.com/statistics/617136/digital-population-worldwide/) 111 | of people don't even have Internet access yet, let alone free time to hack on 112 | Open Source projects. Structural inequalities can be thought of as the largest 113 | of hoops to jump through in order to get paid fairly for producing widely 114 | adopted Open Source software. We should [directly address this wider diversity 115 | crisis](https://www.outreachy.org/), and, we should work on resolving the 116 | sustainability crisis. 117 | 118 | Open Source has created an economic value vacuum. Our society depends 119 | utterly on the common pool resource of Open Source software, and this commons 120 | is severely underprovisioned. How do we know? The real indicator of the Open 121 | Source sustainability crisis as I define it is **maintainer burnout**. 122 | 123 |

Log4j maintainers have been working sleeplessly on mitigation measures; fixes, docs, CVE, replies to inquiries, etc. Yet nothing is stopping people to bash us, for work we aren't paid for, for a feature we all dislike yet needed to keep due to backward compatibility concerns. https://t.co/W2u6AcBUM8

— Volkan Yazıcı (@yazicivo) December 10, 2021
124 | 125 | We have a long-standing pattern of chewing people up and spitting them out, as 126 | youthful idealism and enthusiasm give way to resentment and depression. We see 127 | it most clearly when a high-profile vulnerability shines a spotlight, but it 128 | plays out much more widely in less visible circumstances. For example, here is 129 | how **Marc Grabanski** tells [his 130 | story](https://blog.opencollective.com/frontend-masters/): 131 | 132 | > I created an open source component that literally every website or piece of 133 | > software at the time used, and often still do. Go to the WordPress control 134 | > panel and there's my date picker. But in 15 years, the only money I ever got 135 | > for that was $400 from a guy who needed me to add a specific feature. I think I 136 | > got a handful of change thrown at me through PayPal, like $50 bucks. There was 137 | > no economic sustainability whatsoever. 138 | > 139 | > There was a long time where I was doing open source almost more time than my 140 | > full time job, and getting paid nothing. I just burnt out. I stopped writing 141 | > and contributing to open source. I never built up my GitHub profile when that 142 | > came around. I just gave up, because what's the point when all you get is 143 | > constant issues? You give and give and give, and people just take and take and 144 | > take. 145 | > 146 | > My open source success went from a major blessing to a great curse. It was 147 | > one of the darkest times in my life. Something that started out with such hope 148 | > and light ended up just being about getting thousands of emails. 149 | 150 | There was no viral moment when we collectively realized that we were taking 151 | advantage of Marc. We quietly crushed him without ever noticing. [There are 152 | many such cases](https://blog.tidelift.com/maintainer-burnout-is-real). 153 | 154 |
155 | Update 156 | From Marc: 157 |
The thing I'd add to that, is I was able to create a network 158 | that eventually led to Frontend Masters. My story is not all doom and gloom 159 | like it is portrayed in the article. But it def wasn't a given I'd be able to 160 | capitalize on the networking opportunities that OSS gave me."
161 |
162 | 163 | ## The Path Lies Through Platforms 164 | 165 | Funding platforms are critical to achieving Open Source sustainability. Maybe 166 | you want to classify "join a platform" under "jump through hoops." It's not the 167 | same, though. 168 | 169 |
170 |

171 | If you are an open-source maintainer, I would recommend creating an account 172 | on 173 | @thanks_dev. I've received $268 in 2 months, and the only thing I did was create 175 | an account and click on "withdraw". 👍🏻 176 | pic.twitter.com/WHyAA75oRZ 177 |

178 | — Nuno Maduro (@enunomaduro) 179 | December 29, 2023 183 |
184 | 185 | Building platforms and recruiting devs to receive free money is easy. The main 186 | options today are [GitHub Sponsors](https://github.com/sponsors), [Open 187 | Collective](https://opencollective.com/), and 188 | [Tidelift](https://tidelift.com/). I'm also rooting for 189 | [Thanks.dev](https://thanks.dev/home) (they are helping me a lot at Sentry) and 190 | [Liberapay](https://liberapay.com/) (they are a fork of Gittip/Gratipay). 191 | 192 | What's hard is opening the corporate floodgates. Companies receive outsized 193 | value from Open Source, and companies control nearly all the funds. How do we 194 | open the floodgates? _tl;dr_ Taxes and social pressure. More on that in [a 195 | future post](https://github.com/chadwhitacre/openpath/issues/14). 196 | -------------------------------------------------------------------------------- /_posts/2024-01-25-questioning-the-value-of-open-source-software.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Questioning “The Value of Open Source Software” 3 | excerpt: The new HBS working paper seems fundamentally flawed to me, though it has some helpful parts. 4 | update: 'I posted some further thoughts on the Sustain forum, including an email I sent to the authors.' 5 | --- 6 | 7 | Harvard Business School (HBS) recently published a working paper titled, "[The 8 | Value of Open Source 9 | Software](https://papers.ssrn.com/sol3/papers.cfm?abstract_id=4693148)," 10 | authored by postdoc [Manuel 11 | Hoffmann](https://www.linkedin.com/in/manuel-hoffmann-b4798773/), assistant 12 | professor [Frank Nagle](https://www.linkedin.com/in/frank-nagle/), and grad 13 | student [Yanuo Zhou](https://www.linkedin.com/in/yanuo-zhou/). The Linux 14 | Foundation sponsored the research, which builds on the [Census 15 | II](https://www.linuxfoundation.org/research/census-ii-of-free-and-open-source-software-application-libraries) 16 | project. 17 | 18 | {% include img.html src="./paper.webp" url="https://papers.ssrn.com/sol3/papers.cfm?abstract_id=4693148" orientation="portrait" %} 19 | 20 | Here is [Frank's 21 | tl;dr](https://www.linkedin.com/feed/update/urn:li:activity:7153860222812372993/): 22 | 23 | > If OSS didn't exist, companies would spend 3.5 times more on software than 24 | > they currently do. More precisely, our results show a cost of $4.15 billion 25 | > if society had to replace these packages once (e.g., OSS still exists, but 26 | > all of the most widely used packages were deleted and had to be rewritten), 27 | > but a cost of $8.8 trillion if each company that uses these packages had to 28 | > rewrite every package it uses (e.g., if OSS didn't exist at all). 29 | 30 | Okay, so that's three headline results: 31 | 32 | 1. If OSS didn't exist, companies would spend 3.5 times more on software than 33 | they currently do. 34 | 35 | 2. It would cost $4.15 billion to rebuild all the OSS that currently existed 36 | at the end of 2020 (when the snapshot behind Census II was taken, if I have 37 | it right). 38 | 39 | 3. It would cost $8.8 trillion if each company separately rebuilt all 40 | the OSS it was using at the end of 2020. 41 | 42 | The first result is derived from the third. The working paper estimates that actual 43 | software spending was $3.4 trillion in 2020, and 3.4 + 8.8 = 12.2 trillion, 44 | which is 3.5x the 3.4 actual (page 18). The third result is derived from the 45 | second, multiplying an estimate of the cost to rebuild each piece of OSS 46 | software by an estimate of the number of companies using each piece (p. 13). So 47 | the flow of the argument is, given an end-of-2020 snapshot: 48 | 49 | 1. It would cost $4.15 billion to rebuild all OSS. 50 | 51 | 2. It would cost $8.8 trillion in aggregate for each company to rebuild all of 52 | the OSS they use. 53 | 54 | 3. Companies spent $3.4 trillion for all software they use, besides what they 55 | got for free from OSS. 56 | 57 | 4. Therefore, if OSS didn't exist, companies would have to have spent 3.5 times 58 | more on software than they in fact did. 59 | 60 | Now, I did find some interesting things in this working paper. The first step 61 | in the argument (i.e., the second headline result) seems fine as far as it 62 | goes, as it is based on [COCOMO II](https://en.wikipedia.org/wiki/COCOMO), 63 | which seems pretty well-established (though I'm sure it is messy under the 64 | hood). I learned some basic economics language ([stock and 65 | flow](https://en.wikipedia.org/wiki/Stock_and_flow) variables). I learned about 66 | [GHTorrent](https://gousios.org/bibliography/G13.html) and 67 | [BuiltWith](https://builtwith.com/). The appendix on the goods market analysis 68 | of the value of Open Source seems helpful. The data on the number of 69 | programmers responsible for producing the bulk of OSS (p. 20) is quite 70 | intriguing. I'm going to have to revisit my assumption in [my previous 71 | post](https://openpath.quest/2024/the-open-source-sustainability-crisis/) 72 | that "[t]he sustainable Open Source community taken as a whole will be roughly 73 | the same size" as a big tech company, i.e., 10,000 to 100,000 engineers. It 74 | seems likely to be off by an order of magnitude. I aim to do that in [a future 75 | post](https://github.com/chadwhitacre/openpath/issues/20). 76 | 77 | That said, **I do not accept headline result 1 ("companies would spend 3.5 times 78 | more")**, because I think result 3 ("it would cost $8.8 trillion") is irrelevant. 79 | 80 | ## A Critical Flaw? 81 | 82 | Step 2 in the argument seems critically flawed to me. If so, result 3 is 83 | misleading, and result 1 is false. The options for acquiring software are buy, 84 | borrow, or build. Borrow means OSS. If we take that off the table, companies 85 | still have two options: buy or build. The build option is what the $8.8 86 | trillion estimates. The working paper calls this the "labor market valuation 87 | approach." 88 | 89 | > The thought experiment is that we live in a world where OSS does not exist 90 | > and has to be _recreated at each firm_ that uses a given piece of OSS. (p. 12, emphasis added) 91 | 92 | This is the main methodology in the working paper, and the source of the 93 | "3.5x" headline result. 94 | 95 | But what about the buy option? Surely if OSS ceased to exist, companies would 96 | step in to fill the gap. The authors do explore this option. They call it the 97 | "goods market valuation approach." 98 | 99 | > With the goods market approach, the thought experiment is still that we live 100 | > in a world where OSS does not exist, but it has to be _recreated via one firm_ 101 | > that then charges a price for a good that is currently free. (p. 38, emphasis added) 102 | 103 | This seems to me a much more fruitful comparison than the labor market 104 | approach, because it is much closer to what we would expect to actually happen 105 | in an alternate timeline without OSS. 106 | 107 | Compared to the result of the labor market approach, $8.8 trillion, the result 108 | of the goods market approach is **four orders of magnitude lower, at $177 109 | million** (p. 37). If I'm reading it right, using this for step 2 (result 3) 110 | weakens the argument to the point of failure, and result 1 essentially 111 | disappears: 3.4 + 0.000177 = $3.400177 trillion. If so, **companies would spend 112 | 1.00005 times more** on software than they currently do, if OSS didn't exist. 113 | 114 | The working paper includes the goods market approach in an appendix, and does 115 | not report the result in its abstract. I propose either making a better case 116 | for using the labor market approach, or revising the working paper to make the 117 | goods market approach primary (either drop the labor market approach or move it 118 | to an appendix). As it stands, the use of the labor market approach over the 119 | goods market approach as the primary methodology of this research seems to me 120 | to render results 1 and 3 valueless. 121 | 122 | ## Also, What's Up with Golang? 123 | 124 | Something else that jumped out at me in the working paper is the decision to 125 | include Go: 126 | 127 | > Finally, for some analyses we dig deeper and show the top 5 programming 128 | > languages (as classified by GitHub, 2022 for the year 2020; the year our data 129 | > is from). The top 5 programming languages contain C (including C# and C++), 130 | > Java, JavaScript, Python, and Typescript. We also add Go to this list of top 131 | > languages since it is an increasingly widely used language in OSS. (pp. 132 | > 11-12) 133 | 134 | Looking at [the GitHub data 135 | referenced](https://octoverse.github.com/2022/top-programming-languages), 136 | Golang is not even in the top 10. 137 | 138 | {% include img.html src="./languages.webp" url="https://octoverse.github.com/2022/top-programming-languages" %} 139 | 140 | Why was Go included when other languages weren't? The reason given, "it is an 141 | increasingly widely used language in OSS," is not satisfying. There are other 142 | questions to consider, such as why C# and C++ are folded into C, but Typescript 143 | is not folded into JavaScript. The Go discrepancy jumps out in particular 144 | because including it has a dramatically outsized impact in the demand-side 145 | analysis. 146 | 147 | {% include img.html src="./figure-1.webp" %} 148 | 149 | I don't find in the working paper that there is a direct connection between the 150 | headline results and the choice of languages to include for the deeper analyses 151 | as in Figure 1. Neither do I find any links to open data behind the working 152 | paper so I can investigate for myself. 153 | 154 | ## Conclusion 155 | 156 | Years ago, I likewise attempted to estimate the [value of Open Source 157 | software](https://gratipay.news/open-source-captures-almost-none-of-the-value-it-creates-9015eb7e293e), 158 | which I've since used to 159 | [inform](https://gratipay.news/your-company-should-probably-pay-2000-per-person-for-open-source-9205443e209d) 160 | my 161 | [attempts](https://blog.sentry.io/we-just-gave-500-000-dollars-to-open-source-maintainers/) 162 | to [tackle](https://fossfunders.com/) the [Open Source sustainability 163 | crisis](https://openpath.quest/2024/the-open-source-sustainability-crisis/). 164 | Estimates like this are always a messy business, involving lots of assumptions 165 | and hand-waving. Still, they are vital to understanding the nature and scope of 166 | the crisis. We need good work in this area. 167 | 168 | I do not accept the primary result of the "[Value of Open Source 169 | Software](https://papers.ssrn.com/sol3/papers.cfm?abstract_id=4693148)" working 170 | paper, that companies would spend 3.5 times more on software if OSS didn't 171 | exist. Based on my reading, companies would spend almost nothing more if OSS 172 | didn't exist. This challenges my own estimates as well. I look forward to 173 | wrestling with the implications in [a future 174 | post](https://github.com/chadwhitacre/openpath/issues/20). 175 | -------------------------------------------------------------------------------- /_posts/2024-02-05-funding-the-five-thousand.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Funding the Five Thousand 3 | excerpt: We can solve the OSS sustainability crisis for less than $1 billion, priced to cost. 4 | bluesky: https://bsky.app/profile/chadwhitacre.com/post/3kkrmc2e6k32v 5 | --- 6 | 7 | A number of years ago, I did some napkin math on [the value created by Open 8 | Source](https://gratipay.news/open-source-captures-almost-none-of-the-value-it-creates-9015eb7e293e), 9 | in order to come up with a "[fair 10 | share](https://gratipay.news/your-company-should-probably-pay-2000-per-person-for-open-source-9205443e209d)" 11 | amount that companies should be paying projects. Last month, researchers from Harvard 12 | Business School (HBS) published [a working paper with a similar 13 | scope](https://papers.ssrn.com/sol3/papers.cfm?abstract_id=4693148). I have 14 | [serious questions about their 15 | work](/2024/questioning-the-value-of-open-source-software/), 16 | but, to be honest, my attempt was also really hand-wavy. 17 | 18 | Some of the details of the HBS paper got me thinking, though. They claim, 19 | credibly enough, that there are only a few thousand developers that produce all 20 | of Open Source (p. 20, highlight mine; forgive me for rounding up to 5,000 for 21 | the purpose of a catchy title 😌): 22 | 23 | > Figure 3 shows the Lorenz curves and the number of repositories that a 24 | > fraction of programmers has contributed to for the supply side (Panel A) and 25 | > the demand side (Panel B). A Lorenz curve that lay directly on the 45 degree 26 | > line would imply a very even distribution of values across programmers. 27 | > Instead, Panel A shows a Lorenz curve as a nearly flat line with a drastic 28 | > increase for the final share of programmers. This implies that the 29 | > distribution of the supply value is highly uneven and considerably more 30 | > concentrated than the 80/20 standard. Indeed, the last five percent of 31 | > programmers, or **3,000 programmers, generate over 93% of the supply side 32 | > value**. Similarly, Panel B shows – when accounting for usage – that those 33 | > last five percent generate over 96% of the demand side value. In aggregate, 34 | > this indicates that a very small number of programmers are creating the bulk 35 | > of OSS code that is heavily relied upon by firms to create their own code. In 36 | > both Panel A and Panel B we can also see a rise in the number of repositories 37 | > for the last 10-15% of programmers that contribute to the highest value, 38 | > which implies that the uneven value that is generated by few programmers is 39 | > not just due to a few highly valuable repositories but by the contributions 40 | > of this handful of contributors to a substantial number of repositories. 41 | 42 | This might feel low, even shockingly low, but hear me out. 43 | 44 | Who are the direct consumers of Open Source software? Largely it is other devs, 45 | of whom there are about [28.7 46 | million](https://www.statista.com/statistics/627312/worldwide-developer-population/) 47 | in the world. Therefore, the ratio of consumers to producers of OSS is approximately 48 | 5,740 to 1. Now, buried in Meta's [most recent 49 | 10-Q](https://d18rn0p25nwr6d.cloudfront.net/CIK-0001326801/00c8dc47-8ba5-46e0-ba88-ed2e959dfd6e.pdf), 50 | I find that they have 71,469 employees (p. 33) serving 3.03 billion monthly 51 | active users (p. 34), which is about 42,400 consumers per producer. This makes 52 | the ratio for OSS seem not unreasonable. 53 | 54 | {% include img.html src="./a-few-thousand-people.webp" url="https://twitter.com/FeyNudibranch/status/1754142226270048572" caption="Based on a slide from Kara Sowles Deloss' talk at FOSDEM." %} 55 | 56 | If there are only a few thousand maintainers, then solving the sustainability 57 | crisis should be quite a tractable problem to approach from the bottom up (who 58 | are they and what do they need?) rather than the top down (how much do we 59 | estimate Open Source is worth?). 60 | 61 | In other words, let's see if we can **price to cost** instead of to value. In 62 | general, that leaves value on the table, but we're not trying to maximize 63 | profit for Open Source as if it were a business. We're trying to make it 64 | [sustainable](/2024/the-open-source-sustainability-crisis/#what-is-open-source-sustainability): 65 | 66 | > Open Source sustainability is when any smart, motivated person can produce 67 | > widely adopted Open Source software and get paid fairly without jumping 68 | > through hoops. 69 | 70 | At a rough sketch, 5,000 devs times a global average salary for a full-stack 71 | developer of 72 | [US$71,100](https://www.statista.com/statistics/793602/worldwide-developer-survey-average-salaries/) 73 | comes out to $355 million per year. We should do some [more work to pin down 74 | the numbers](https://github.com/chadwhitacre/openpath/issues/20), as there may 75 | be more than 5,000 maintainers, and most likely live in higher-cost locales. 76 | For this post let's say it seems likely we can fund all Open Source maintainers 77 | for **under $1 billion**. That's way less than the trillions that HBS and my 78 | old napkin math would have us anchor on. 79 | 80 | ## Narrowing Our Focus 81 | 82 | Let's focus on developing a system for fairly paying _the actual maintainers we 83 | have today_ without making them jump through hoops. If we develop the system 84 | right, then additional individuals will be able to join in on their own terms 85 | in the future, and we will have achieved sustainability as I've defined it. 86 | Accomplishing this will accelerate adjacent efforts such as improving security 87 | and diversity. 88 | 89 | We already have hundreds of millions of dollars flowing into Open Source. The 90 | Linux Foundation alone had projected revenue for 2022 of $243.57M (that's in 91 | their [most recent annual 92 | report](https://project.linuxfoundation.org/hubfs/LF%20Research/2022%20Linux%20Foundation%20Annual%20Report.pdf?hsLang=en), 93 | in a footnote on page 138). However, they are somewhat infamous for [not paying 94 | actual 95 | developers](https://lunduke.substack.com/p/linux-foundation-spends-just-34-of). 96 | Sourcing the funds is a challenge but seems achievable. The other challenge is 97 | directing it to the right people, with transparency and accountability. 98 | 99 | {% include img.html src="./fair-pay-no-hoops.webp" url="https://twitter.com/FeyNudibranch/status/1754142226270048572" caption="Based on a slide from Kara Sowles Deloss' talk at FOSDEM." %} 100 | 101 | The main source of funds will continue to be companies, with governments and 102 | philanthropies as secondary sources. Whether via foundations or funding 103 | platforms, the main target of funding from a company's point of view should be 104 | projects rather than people. That's what companies depend on and care about. 105 | If a maintainer moves on from a project then the funds should be available to 106 | [incentivize someone else to step up and take over 107 | maintenance](https://www.youtube.com/watch?v=e5FV-AnKPlo). 108 | 109 | The problem of getting funds from projects to people is a problem of 110 | governance. This is quite important but should largely be hidden from 111 | companies. 112 | 113 | ## Next Steps 114 | 115 | Here's a GitHub issue for [pinning down the fair share 116 | amount](https://github.com/chadwhitacre/openpath/issues/20) in a robust and 117 | repeatable way. [Andrew Nesbitt](https://nesbitt.io/) from 118 | [Ecosyste.ms](https://ecosyste.ms/) is [in 119 | there](https://github.com/chadwhitacre/openpath/issues/20#issuecomment-1919926941) 120 | so you know it's [going to be 121 | good](https://github.com/chadwhitacre/openpath/issues/20#issuecomment-1921286147). 122 | 😁 123 | 124 | Here's a GitHub issue for [talking about 125 | governance](https://github.com/chadwhitacre/openpath/issues/14) and whether we 126 | need a new institution or what. 127 | 128 | Jump in! 🙂 129 | -------------------------------------------------------------------------------- /_posts/2024-02-22-towards-software-commons.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Towards Software Commons 3 | excerpt: The world is ready for something beyond Open Source. Is it Software Commons? 4 | --- 5 | 6 | A number of us have been [working for the past six 7 | months](https://github.com/getsentry/fsl.software/issues/2) to find a term, 8 | adjacent to but distinct from Free and Open Source Software (FOSS), to [elevate 9 | developer sustainability to a value on par with user 10 | freedom](https://blog.sentry.io/sentrys-open-source-values/). This is 11 | in response to Chef co-founder [Adam Jacob's proposal](https://twitter.com/adamhjk/status/1687113805237714944): 12 | 13 |

I think the way forward here is to make what I suspect is a loose confederation of folks using non-compete licenses to actually get together and draft their own set of values. To then brand that. And stand behind it proudly.

— Adam Jacob (@adamhjk) August 3, 2023
14 | 15 | FOSS ensures user freedom, which is wonderful. Developer sustainability is also 16 | wonderful, and we've reached a point in the evolution of the tech industry and 17 | our society where it is time to converge on how we're going to balance these 18 | two values. 19 | 20 | ## A Widely Recognized Need 21 | 22 | A number of prominent voices are recognizing the need to resolve this tension 23 | between the limitations inherent in Open Source and the challenge of developer 24 | sustainability, [starting with](https://opensource.org/blog/a-historic-view-of-the-practice-to-delay-releasing-open-source-software-osis-report) the **Open Source Initiative** (OSI) itself: 25 | 26 | > Since the early days of the Open Source movement, companies have experimented 27 | > with finding a balance between granting their users the basic freedoms 28 | > guaranteed by Open Source licenses while also capitalizing on their investments 29 | > in software development. 30 | 31 | Yes, some CEOs are perhaps best described as bad actors conniving malicious 32 | rug pulls. Others are acting in good faith, genuinely intent on sharing their 33 | source code as permissively as possible without exposing their companies to the 34 | existential risk of harmful free-riding. Some even [voluntarily share their 35 | financial success](https://fossfunders.com/) with the non-commercial 36 | maintainers in the ecosystem. 37 | 38 | Regarding different models of sustainability, **Jacob Kaplan-Moss**, co-founder 39 | of Django, recently let loose [a full-throated 40 | rant](https://jacobian.org/2024/feb/16/paying-maintainers-is-good/): 41 | 42 | > My fundamental position is that paying people to work on open source is good, 43 | > full stop, no exceptions. We need to stop criticizing maintainers getting 44 | > paid, and start celebrating. 45 | 46 | Jacob and I are working with similar definitions of sustainability (and similar 47 | background colors lol). He 48 | [writes](https://jacobian.org/2024/feb/16/paying-maintainers-is-good/#sustainability): 49 | 50 | > When I talk about “sustainability”, though, I mean something very specific: 51 | > “can maintainers live a decent-to-comfortable lifestyle writing free 52 | > software?” 53 | 54 | I recently [wrote](https://openpath.quest/2024/the-open-source-sustainability-crisis/#what-is-open-source-sustainability): 55 | 56 | > Open Source sustainability is when any smart, motivated person can produce 57 | > widely adopted Open Source software and get paid fairly without jumping 58 | > through hoops. 59 | 60 | The main difference is in the qualifier, "without jumping through hoops." My 61 | definition is narrower, and much of what Jacob wants to celebrate as "Open 62 | Source sustainability," I would celebrate as "Open Source subsidization." We've 63 | known how to _subsidize_ FOSS since the beginning. The new and interesting 64 | thing will be when we _sustain_ it: fair pay, without hoops. Jacob himself 65 | dreams "that society and governments will recognize free software as the public 66 | good that it most certainly is and fund it appropriately." He doubts "it’ll 67 | happen in our lifetimes if at all." I am optimistic! :-) 68 | 69 | A second difference is that, whereas at Sentry we've [stepped 70 | back](https://blog.sentry.io/lets-talk-about-open-source/), Jacob [takes a strong 71 | stance](https://jacobian.org/2024/feb/16/paying-maintainers-is-good/#open-source--free-software) 72 | on broadening the term "open source": 73 | 74 | > Note the deliberate use of lower case. I’m _not_ referring to Open Source™ as 75 | > defined by OSI, nor to Free Software™ as defined by the FSF. I mean these 76 | > terms in the broadest, most inclusive sense: “software with source code that 77 | > I can read and modify and release variants of, perhaps under some 78 | > conditions.” So I’m including OSI and FSF licenses, but also the [Polyform 79 | > licenses](https://polyformproject.org/licenses/) 80 | > and the [JSON license](https://www.json.org/license.html) and, yes 81 | > [BSL](https://mariadb.com/bsl-faq-mariadb/) in my version of “open source”. 82 | 83 | The [Codecov 84 | kerfuffle](https://news.ycombinator.com/item?id=36971490) taught us 85 | to [look for another 86 | term](https://blog.sentry.io/lets-talk-about-open-source/). As part of 87 | developing [FSL](https://fsl.software/) (our BSL upgrade), we [worked with the 88 | community](https://github.com/getsentry/fsl.software/issues/10) specifically to 89 | make sure we do not confuse people about the OSI definition of Open Source. On 90 | a recent call, [Stef](https://www.linkedin.com/in/maffulli/) and 91 | [Nick](https://www.linkedin.com/in/nickvidal/) made the point that with more 92 | and more legislation written with reference to Open Source, the Open Source 93 | Definition is becoming less and less changeable. Building further abstractions 94 | solidifies lower levels. 95 | 96 | ### Post-Open 97 | 98 | The very author of the Open Source Definition, **Bruce Perens**, is now 99 | also looking for what comes next. At a recent State of Open keynote, he snarked, "[We 100 | have a great corporate welfare 101 | program](https://www.youtube.com/watch?v=suUfS0-p5Yg#t=1m54s)," and talked 102 | about the limitations of the support model for sustaining Open Source. 103 | 104 | {% include img.html src="./corporate-welfare-program.webp" 105 | url="https://www.youtube.com/watch?v=suUfS0-p5Yg#t=1m54s" caption="A slide from Bruce's talk." %} 106 | 107 | Bruce goes so far as to say that we need to "[consider a radical departure](https://www.theregister.com/2023/12/27/bruce_perens_post_open/)": 108 | 109 | > Open Source will continue to exist and provide the same rules and paradigm, 110 | > and the thing that comes after Open Source should be called something else 111 | > and should never try to pass itself off as Open Source. So far, I call it 112 | > Post-Open. 113 | 114 | The [second pillar](https://www.youtube.com/watch?v=suUfS0-p5Yg#t=3m14s) of 115 | Bruce's vision for Post-Open is an expansion beyond low-level systems software 116 | to end-user applications. He wants to "reach the ordinary person" and to "make 117 | software for common people." Yes, please! I've talked about this in the past in 118 | terms of "[open products](https://gratipay.news/open-products-25824a325fea)": 119 | 120 | > I define an _open product_ as "a technology product that happens to be 121 | > open-source." [...] The open products I’m most interested in, however, are 122 | > top-level, consumer-facing web and mobile products that stand on their own _as 123 | > consumer products_ first, and—almost as an afterthought—happen to be almost 124 | > fully open-source to boot. 125 | 126 | {% include img.html src="./please-trespass.webp" 127 | url="https://gratipay.news/open-products-25824a325fea" caption="I wrote 128 | “Open Products” way back in 2013." %} 129 | 130 | I'm excited to find Bruce talking about this. It seems to be a case of 131 | independent discovery: Bruce's work on Post-Open, and the response to Adam's 132 | call to action, to develop a new brand around a new articulation of values. 133 | This is a sign of an idea whose time has come. 134 | 135 | ## Introducing Software Commons 136 | 137 | Last week, I hit upon "Software Commons" as a candidate term for this new 138 | movement. The [Wikipedia 139 | definition](https://en.wikipedia.org/w/index.php?title=Information_commons&oldid=1186082015#Software_commons) 140 | resonates, because it indicates a superset of FOSS: 141 | 142 | > The _software commons_ consists of all computer software which is available 143 | > at little or no cost and which can be reused with few restrictions. It 144 | > includes open source software which can be modified with few restrictions. 145 | > However the commons also includes software outside of these categories[.] 146 | 147 | Amazingly, the [domain](https://softwarecommons.com/) was available. I bought 148 | it forthwith. It seems like [a strong 149 | candidate](https://github.com/getsentry/fsl.software/issues/2#issuecomment-1939868845), 150 | and it is [gaining 151 | momentum](https://github.com/getsentry/fsl.software/issues/2#issuecomment-1941048758) 152 | both with those who, like Jacob, would be just as content to broaden "open 153 | source", as well as some [who would 154 | not](https://github.com/getsentry/fsl.software/issues/2#issuecomment-1939177937). 155 | The parallel with Creative Commons is particularly [suggestive](https://github.com/getsentry/fsl.software/issues/2#issuecomment-1939177937): 156 | 157 | > [Creative Commons] is very popular, and you have licenses like [CC 158 | > BY-NC](https://creativecommons.org/licenses/by-nc/4.0/) there so I feel the 159 | > license categories listed fit perfectly well within what you've defined. 160 | 161 | There is much work to do to hammer out the specifics of the software sharing 162 | models that should qualify for inclusion in Software Commons, but this feels to 163 | me like **the right place to locate the conversation**, because the two failure 164 | modes of a commons are the [tragedy of the 165 | commons](https://en.wikipedia.org/wiki/Tragedy_of_the_commons) and 166 | [enclosure](https://en.wikipedia.org/wiki/Enclosure). In the former, a majority 167 | of people overuses the common resource to the point of destruction, due to _too 168 | few restrictions_. In the latter, a minority of people gains control and 169 | excludes the majority, imposing _too many restrictions_. That is, the tension 170 | inherent in commons management seems to be exactly the tension we find in the 171 | software ecosystem today: [between user freedom and developer 172 | sustainability](https://blog.sentry.io/sentrys-open-source-values/). 173 | 174 | If you think [Software Commons](https://softwarecommons.com/) might have legs, 175 | and you want to help find a balance of user freedom and developer 176 | sustainability that honors Open Source while evolving beyond its limitations, 177 | you can [dive in on 178 | GitHub](https://github.com/getsentry/fsl.software/issues/2). 🙏 179 | -------------------------------------------------------------------------------- /_posts/2024-03-05-the-case-for-a-new-institution.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: The Case for an Institution 3 | excerpt: Software Commons is a great name. But for what? It should be an institution. 4 | --- 5 | 6 | Over [on GitHub][0] we've (mostly) converged on "[Software Commons][19]" as our 7 | answer to [Adam Jacob's call][1] to find a brand name other than "Open Source" 8 | to represent the values behind such efforts as [FSL][2]. What we're less clear 9 | on is what exactly it is we are naming. [What are our goals][13]? 10 | 11 | There's a "thin" version in which our goal is to produce an educational 12 | website, and a "thick" version in which we are founding (or joining with?) an 13 | institution. The thick version would obviously be a much more serious 14 | commitment, so it needs justifying. That's what I aim to do in this post. 15 | 16 | - I start by discussing what it means to think about [software as a 17 | commons](#software-as-a-commons); then 18 | - I talk about the [ways a software commons can 19 | fail](#enclosure-and-tragedy-in-software); then 20 | - I present a case for why [an 21 | institution is necessary](#software-commons-an-institution) to protect 22 | against these risks. 23 | - I conclude with [a brief sketch](#sketching-an-institution) of what this 24 | institution might look like. 25 | 26 | ## Software as a Commons 27 | 28 | Economists [classify goods][4] based on excludability (is it widely accessible 29 | or no?) and rivalry (is it lost in consumption or no?): 30 | 31 | - public goods—non-excludable, non-rivalrous 32 | - common-pool resources—non-excludable, rivalrous 33 | - club goods—excludable, non-rivalrous 34 | - private goods—excludable, rivalrous 35 | 36 | In which class is society's shared software? 37 | 38 | Software itself is an [information good][7], so its excludability depends on 39 | whether it is public. To quote [Thomas Jefferson][15]: 40 | 41 | > If nature has made any one thing less susceptible than all others of 42 | > exclusive property, it is the action of the thinking power called an idea, 43 | > which an individual may exclusively possess as long as he keeps it to 44 | > himself; but the moment it is divulged, it forces itself into the possession 45 | > of every one, and the receiver cannot dispossess himself of it. 46 | 47 | The excludability of information in general and software in particular is 48 | implemented not at the natural level, but at the technological and cultural 49 | levels, through information security practices and intellectual property law. 50 | The law makes possible a wide range of degrees of excludability. By nature, 51 | though, published software is non-excludable. 52 | 53 | Information goods are also, by their nature, non-rivalrous. "You can't download 54 | a fish a billion times," I've heard [Andrew Nesbitt][11] say, to make the point 55 | that you _can_ download a software package a billion times. Jefferson proceeds 56 | from the above quotation to make a similar point. This is his famous candle 57 | analogy: 58 | 59 | > [An idea's] peculiar character, too, is that no one possesses the less, 60 | > because every other possesses the whole of it. He who receives an idea from 61 | > me, receives instruction himself without lessening mine; as he who lights 62 | > his taper at mine, receives light without darkening me. That ideas should 63 | > freely spread from one to another over the globe, for the moral and mutual 64 | > instruction of man, and improvement of his condition, seems to have been 65 | > peculiarly and benevolently designed by nature[.] 66 | 67 | Information as such, then, and software as an instance, is a public good: 68 | non-excludable and non-rivalrous. But this misses something crucial, which 69 | [Nadia Asparouhova][14] has described as two "states" of software ([_Working in 70 | Public_][8], p. 121). 71 | 72 | - static—bits on GitHub waiting to be downloaded at negligible marginal 73 | cost; and 74 | 75 | - active—demands piling up in GitHub Issues waiting for the maintainer 76 | to find time for them. 77 | 78 | The rivalrous resource in software as a commons is _maintainer attention_ (p. 79 | 161). "**Open Source is _consumed_ like a public good, [but] _produced_ like a 80 | commons**" (p. 212). This distinction is essential to thinking clearly about 81 | software as a commons. 82 | 83 | ## Enclosure and Tragedy in Software 84 | 85 | Because a commons is non-excludable yet rivalrous, its caretakers must in 86 | general balance against two risks: 87 | 88 | - [enclosure][5]—failure through exclusion, too many restrictions; and 89 | - [tragedy of the commons][6]—failure through overuse, too few 90 | restrictions. 91 | 92 | What do enclosure and tragedy of software as a commons look like? Keep in mind 93 | the distinction between software as a non-rivalrous information good and 94 | maintainer attention as a rivalrous resource. Both matter. 95 | 96 | ### Enclosure of Information 97 | 98 | Considered as an information good, software enclosure means dialing up 99 | exclusivity via licensing restrictions past some threshold. I say "some 100 | threshold" because, as mentioned above, intellectual property law makes 101 | possible a wide range of rights sharing, and there's an art and a negotiation 102 | to deciding at what point in the range we've passed from acceptable to 103 | unacceptable restriction on user freedom. 104 | 105 | Open Source itself allows for some restrictions, for example: 106 | 107 | - on non-attributed use; 108 | - on non-shared-alike use; and 109 | - on patent litigation. 110 | 111 | Open Source draws the line where it does because of its value system: the 112 | freedom of users overrides the needs of maintainers. Attempts by companies to 113 | change an Open Source project's license to a more restrictive license generally 114 | demonstrate the power of Open Source. If there is a real third-party community 115 | around the project, a viable fork emerges. 116 | 117 | Since we value maintainer needs on par with user rights, we are open to 118 | drawing the line of acceptable restriction differently. In the spirit of Jacob 119 | Kaplan-Moss's "[Paying people to work on open source is good actually][9]" (but 120 | declining to muddy the term Open Source), we want to celebrate sustainable 121 | software sharing wherever we see it. 122 | 123 | The hard line of information enclosure in software is closed source, which 124 | today accounts for nearly all of the consumer-grade software that defines our 125 | digital lives. By staking out an all-or-nothing position, Open Source has lost 126 | the possibility of encouraging companies to share more of their code than they 127 | do today. There's a wide range of sharing models available, we should explore 128 | them all. We should celebrate whenever companies share their code, rather than 129 | scolding them for not doing it right. 130 | 131 | ### Enclosure of Attention 132 | 133 | While software itself is a non-rivalrous information good, maintenance 134 | attention to society's publicly shared software is a common-pool resource. What 135 | constitutes enclosure of this resource? It would have to be the hiring of 136 | maintainers by organizations that then influence, whether subtly or overtly, the 137 | maintainer's priorities for the project. 138 | 139 | This is delicate, because surely companies paying staff to produce Open Source 140 | is a primary way that maintainers are paid today. In general it's a wonderful 141 | arrangement to be celebrated, and it would be inappropriate to single out any 142 | individual case for scrutiny. On a macro view, I think we can say that software 143 | as a commons is stronger if the balance of incentives includes a meaningful 144 | contingent of independent developers. 145 | 146 | ### Tragedy of the Software Commons 147 | 148 | Because software as an information good is non-rivalrous, it is by definition 149 | not susceptible to overuse. However, because it is rivalrous, maintainer 150 | attention _is_ prone to the tragedy of the commons. In fact, [we're living 151 | through an Open Source sustainability crisis right now][18]. 152 | 153 | {% include img.html src="./burnout.webp" 154 | url="https://blog.tidelift.com/maintainer-burnout-is-real" caption="A chart from Tidelift's annual survey." %} 155 | 156 | What does the tragedy of the commons look like in software? [Maintainer 157 | burnout][10]. The time and attention of maintainers is the rivalrous resource 158 | in software, and overworked people burn out. Time is money, so the way to 159 | address the tragedy of the commons in software is to pay maintainers. Software 160 | Commons celebrates all software sharing, including Open Source. Preserve the 161 | Open Source Definition if we must, but let's please also figure out how to pay 162 | maintainers fairly without making them jump through hoops. Let's stop burning 163 | people out. 164 | 165 | ## Software Commons: An Institution 166 | 167 | Whereas the Free and Open Source Software (FOSS) movement only upholds user 168 | freedom, [we value][3] user freedom _and maintainer sustainability_. We want to 169 | balance the rights of users with the needs of maintainers. Software Commons is 170 | a great name for us, because it so precisely points to the somewhat complex 171 | reality of our situation and the problems we need to solve. But what are we 172 | going to do with this name? 173 | 174 | There's a "thin" version in which we produce an educational website that 175 | discusses software sharing in term of different business models, distribution 176 | models, and contribution models, with a decision tree to guide people to a good 177 | fit for their situation. This might be roughly parallel to GitHub's 178 | [choosealicense.com][12]. 179 | 180 | Then there's a "thick" version in which what we are doing is founding (or 181 | joining with?) an institution. The reason we would do this is because it is the 182 | only way to solve the three big problems that our analysis of software as a 183 | commons has uncovered: 184 | 185 | 1. the **closed-source information enclosure** of the bulk of society's software; 186 | 1. the **enclosure of maintainer attention**, eroding overall community independence; and 187 | 1. the **tragedy of the commons**, burning out maintainers. 188 | 189 | If the only problem we are trying to solve is the first, then yes, we can put 190 | up an informational website that educates companies on options for sharing 191 | their source code in ways that fit their business and gives us something to 192 | link to next time we announce an FSL product, and be done with it. 193 | 194 | However, I don't think we can justify using the name Software Commons while 195 | ignoring the second and third problems. Maintainer burnout is a real problem 196 | that has been with us for too long. If we're going to live up to the promise of 197 | the Software Commons name, then we need to directly tackle the task of [funding 198 | maintainers][30], and to do that properly requires an institution. 199 | 200 | ### A Commons Is an Institution 201 | 202 | Why do we need an institution in order to walk back the tragedy of the Open 203 | Source commons? Because that is what we find in actual practice for common-pool 204 | resources (CPRs) that successfully protect against overuse. Here is [Elinor 205 | Ostrom][21] in her definitive work, [_Governing the Commons_][20] (pp. 88-89), 206 | emphasis mine: 207 | 208 | > Despite all of the differences among the CPR settings described in this 209 | > chapter—and substantial differences exist—all share fundamental similarities. 210 | > [...] The most notable similarity of all, of course, is the sheer 211 | > perseverance manifested in these resource systems **and institutions**. 212 | 213 | Ostrom's answer to how to govern the commons is a set of eight, "Design 214 | principles illustrated by long-enduring CPR institutions" (p. 90): 215 | 216 | > 1. Clearly defined boundaries
Individuals or households who have 217 | > rights to withdraw resource units from the CPR must be clearly defined, as 218 | > must the boundaries of the CPR itself. 219 | > 1. Congruence between appropriation and provision rules and local 220 | > conditions
Appropriation rules restricting time, place, technology, 221 | > and/or quantity of resource units are related to local conditions and to 222 | > provision rules requiring labor, material, and/or money. 223 | > 1. Collective-choice arrangements
Most individuals affected by the 224 | > operational rules can participate in modifying the operational rules. 225 | > 1. Monitoring
Monitors, who actively audit CPR conditions and 226 | > appropriator behavior, are accountable to the appropriators or are the 227 | > appropriators. 228 | > 1. Graduated sanctions
Appropriators who violate operational rules 229 | > are likely to be assessed graduated sanctions (depending on the 230 | > seriousness and context of the offense) by other appropriators, by 231 | > officials accountable to these appropriators, or by both. 232 | > 1. Conflict-resolution mechanisms
Appropriators and their officials 233 | > have rapid access to low-cost local arenas to resolve conflicts among 234 | > appropriators or between appropriators and officials. 235 | > 1. Minimal recognition of rights to organize
The rights of 236 | > appropriators to devise their own institutions are not challenged by 237 | > external government authorities. 238 | > 1. For CPRs that are parts of larger systems:
Nested enterprises
Appropriation, provision, monitoring, 239 | > enforcement, conflict resolution, and governance activities are organized 240 | > in mulitple latyers of nested enterprises. 241 | 242 | ## Sketching an Institution 243 | 244 | The sort of institution I have in mind for Software Commons, after Ostrom's 245 | principles: 246 | 247 | 1. brings together producers and consumers of FOSS under one roof, alongside 248 | platform partners, to negotiate an enduring solution to [the Open Source 249 | sustainability crisis][23] (is it a multi-stakeholder platform 250 | cooperative?); and 251 | 1. ~~fleshes out and educates the industry on software sharing practices 252 | between closed and Open Source.~~ [_Update: [dropping this from 253 | scope](/2024/fair-source-does-not-equal-software-commons/)._] 254 | 255 | Perhaps there is an institution that exists today that could be made to fit 256 | this description. It's worth talking about, but I'm skeptical. 257 | 258 | - It's not the [Open Source Initiative][22], which can only promote user 259 | freedom, not maintainer sustainability. 260 | - It's not the [Linux Foundation][25], because it's [a company-centric trade 261 | association][24]. 262 | - It's not [Post-Open][27]; I talked with Bruce yesterday, and if I understand 263 | it right, it really only represents producers. 264 | - An Ostrom-ian institution needs to provide accountability for money flow, but 265 | I'm not sure any of the existing platforms ([GitHub Sponsors][28], 266 | [Thanks.dev][29]) on their own is the right solution. 267 | - [OS Collective][26] probably comes closest; it's worth a conversation. My 268 | hunch is FOSS consumer representation is too weak. 269 | 270 | It may fall to us—if we want it—to found Software Commons as a new institution 271 | that fulfills Ostrom's principles. If we don't want it, that's okay. We can 272 | still publish an educational website to encourage a range of sharing between 273 | closed and Open Source. But if we don't also tackle the enclosure of maintainer 274 | attention and particularly the tragedy of the Open Source commons, it would 275 | be beneath us to use the Software Commons name. 276 | 277 | _Something to add? [Discuss on GitHub][13]._ 278 | 279 | [0]: https://github.com/getsentry/fsl.software/issues/2 280 | [1]: https://twitter.com/adamhjk/status/1687113805237714944 281 | [2]: https://fsl.software/ 282 | [3]: https://blog.sentry.io/sentrys-open-source-values/ 283 | [4]: https://en.wikipedia.org/wiki/Goods#Goods_classified_by_exclusivity_and_competitiveness 284 | [5]: https://en.wikipedia.org/wiki/Enclosure 285 | [6]: https://en.wikipedia.org/wiki/Tragedy_of_the_commons 286 | [7]: https://en.wikipedia.org/wiki/Information_good 287 | [8]: https://www.amazon.com/dp/0578675862 288 | [9]: https://jacobian.org/2024/feb/16/paying-maintainers-is-good/ 289 | [10]: https://blog.tidelift.com/maintainer-burnout-is-real 290 | [11]: https://nesbitt.io/ 291 | [12]: https://choosealicense.com/ 292 | [13]: https://github.com/softwarecommons/softwarecommons.com/issues/2 293 | [14]: https://nadia.xyz/ 294 | [15]: https://press-pubs.uchicago.edu/founders/documents/a1_8_8s12.html 295 | [16]: https://openpath.quest/2024/the-open-source-sustainability-crisis/#what-is-open-source-sustainability 296 | [17]: https://gratipay.news/open-products-25824a325fea 297 | [18]: https://openpath.quest/2024/the-open-source-sustainability-crisis/#what-is-the-sustainability-crisis 298 | [19]: https://openpath.quest/2024/towards-software-commons/ 299 | [20]: https://www.amazon.com/dp/1107569788 300 | [21]: https://en.wikipedia.org/wiki/Elinor_Ostrom 301 | [22]: https://opensource.org/ 302 | [23]: https://openpath.quest/2024/the-open-source-sustainability-crisis/ 303 | [24]: https://mjg59.dreamwidth.org/39546.html 304 | [25]: https://www.linuxfoundation.org/ 305 | [26]: https://www.oscollective.org/ 306 | [27]: https://openpath.quest/2024/towards-software-commons/#post-open 307 | [28]: https://github.com/sponsors 308 | [29]: https://thanks.dev/home 309 | [30]: https://openpath.quest/2024/funding-the-five-thousand/ 310 | -------------------------------------------------------------------------------- /_posts/2024-03-21-relicensing-and-rug-pulls.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Relicensing and Rug Pulls 3 | excerpt: If a viable fork of Redis emerges, relicensing was a rug pull. If not, it wasn't ... and that's kinda sad. 4 | homepage_rank: 3 5 | --- 6 | 7 | Another day, [another major Open Source project 8 | relicenses](https://redis.com/blog/redis-adopts-dual-source-available-licensing/) 9 | to avoid [getting 10 | Jeff'd](https://www.youtube.com/watch?v=XZ3w_jec1v8#t=29m27s). This time it's 11 | Redis ... again. Was it a rug pull? It's too soon to tell. It's only a rug pull 12 | if someone was standing on the rug. 13 | 14 |
15 | Update 16 | The Valkey 18 | fork seems to be viable. 19 |
20 | 21 | ## A Brief History of Redis Licensing 22 | 23 | - 2009—After working on it privately for three years (yes?), Salvatore 24 | [published](https://github.com/redis/redis/commit/ed9b544e10b84cd43348ddfab7068b610a5df1f7) 25 | Redis **core** on GitHub [under 26 | BSD-3](https://github.com/redis/redis/blob/ed9b544e10b84cd43348ddfab7068b610a5df1f7/COPYING). 27 | 28 | {% include img.html src="betatesters.webp" 29 | url="https://github.com/redis/redis/blob/ed9b544e10b84cd43348ddfab7068b610a5df1f7/BETATESTING.txt" 30 | %} 31 | 32 | - 2016—Redis started making **modules**, licensing them under AGPL 33 | (e.g., 34 | [RediSearch](https://github.com/RediSearch/RediSearch/commit/c60925a9268ac9843244ee33c033c4789dd4ce50), 35 | [RedisJSON](https://github.com/RedisJSON/RedisJSON/commit/6f638aca7df52e884f14b494168462add5366e7a#diff-c693279643b8cd5d248172d9c22cb7cf4ed163a3c98c8a3f69c2717edd3eacb7), 36 | [RedisTimeSeries](https://github.com/RedisTimeSeries/RedisTimeSeries/commit/7224436f2c0b981f48e9331cea306bea85a01ed7#diff-c693279643b8cd5d248172d9c22cb7cf4ed163a3c98c8a3f69c2717edd3eacb7)). 37 | 38 | - 2018—Redis relicensed its **modules** from AGPL to 39 | Apache-2.0-with-Commons-Clause. I don't find an announcement from them, 40 | but here's [a version of events in a TechCrunch 41 | op-ed](https://techcrunch.com/2018/09/07/commons-clause-stops-open-source-abuse/#m_-47614634501600442334829) 42 | from a VC who was involved, and Redis refers to the 2018 Commons Clause 43 | relicensing in [their 2021 44 | post](https://redis.com/blog/redis-labs-modules-license-changes/). 45 | 46 | - 2021—[Commons Clause](https://commonsclause.com/) is a controversial 47 | idea—a non-compete rider on an otherwise Open Source license—with a controversial name. Apache [pushed 48 | back](https://www.apache.org/foundation/license-faq.html#mod-license) on 49 | trademark grounds. What's more, a commons is precisely a resource that is 50 | [governed openly](https://www.amazon.com/dp/0521405998), not corporately. Probably 51 | due to this controversy, Redis [relicensed its **modules** 52 | again](https://redis.com/blog/redis-labs-modules-license-changes/) to a new 53 | license: the non-compete Redis Source Available License (RSAL). 54 | 55 | - 2022—Redis [relicensed its **modules** 56 | again](https://redis.com/blog/rsalv2-sspl-announcement/) to a dual licensing 57 | arrangement: a cleaned-up RSALv2, and—in a bid to reduce license 58 | proliferation—MongoDB's 59 | [SSPL](https://en.wikipedia.org/wiki/Server_Side_Public_License). 60 | 61 | - 2024—Yesterday, after 15 years, **core** Redis went from BSD-3 to the 62 | same RSALv2/SSPL arrangement as the modules. 63 | 64 | ## Criteria for a Rug Pull 65 | 66 | In cases like this, the cry "Foul!" [goes 67 | up](https://news.ycombinator.com/item?id=37904640): 68 | 69 | > [C]ompanies dominate their space by having an open ecosystem and a large 70 | > community of volunteers and then unilaterally switch the license terms from 71 | > under everyone so that the founding team and VCs can make billions. 72 | 73 | It's a smooth narrative, but it's a little _too_ smooth. Not every relicensing 74 | is a rug pull, because not every project has "a large community of volunteers." 75 | Moving a rug with no-one standing on it is not a rug pull, it's just moving a 76 | rug. For a relicensing to be a rug pull, there has to have been a true 77 | developer community around the project—not just users, developers. 78 | 79 | Clearly HashiCorp pulled the rug, because in the wake of [their 80 | relicensing](https://www.hashicorp.com/blog/hashicorp-adopts-business-source-license), 81 | people outside HashiCorp did a lot of work to get the 82 | [OpenTofu](https://www.linuxfoundation.org/press/announcing-opentofu) fork off 83 | the ground. It seems to be viable. On the other hand, since Sentry relicensed 84 | in 2019, no viable fork has emerged. There was no community of people not 85 | employed by Functional Software, Inc. dba Sentry who were developing the 86 | product. There was no-one standing on the rug. 87 | 88 | {% include img.html src="Percentage_of_Commits_by_Era_and_Relation.webp" 89 | url="https://blog.sentry.io/nows-the-time-for-delayed-open-source/?original_referrer=https%3A%2F%2Fblog.sentry.io%2F" caption="Sentry has always been built by Sentry." %} 90 | 91 | Was Redis' relicensing a rug pull? I don't know. They 92 | mention "efforts to support a community-led governance model, and our desire to 93 | [maintain the BSD 94 | license](https://redis.com/blog/redis-license-bsd-will-remain-bsd/)." I 95 | eagerly clicked the link regarding their desire. More eagerly would I have 96 | clicked to learn about their efforts. Maybe they did make an effort, 97 | maybe they didn't. Ultimately, the proof of the pudding is in the eating. Are 98 | there enough people who care enough to launch a viable Open Source fork of 99 | Redis? Was anyone standing on the rug? In the court of public ~~opinion~~ 100 | _action_, the jury is out. 101 | 102 | ## But Also, Empty Rugs are Kinda Sad 103 | 104 | I do have to admit that there's something poignant about yesterday's 105 | announcement. I felt a pang of loss when digging up the history shared above. 106 | Fifteen years ago, Salvatore [put something beautiful out into the 107 | world](https://news.ycombinator.com/item?id=35871462), with a sparkle in his 108 | eye and a spring in his step. Redis has always topped my personal list of 109 | really elegant pieces of software—alongside Postgres and Python, Vim, maybe 110 | Git—and Salvatore has always seemed like he's got really good energy. When he 111 | [stepped back](http://antirez.com/news/133) four years ago, he wrote (emphasis 112 | mine): 113 | 114 | > I believe I’m not just leaving Redis in the hands of a community of expert 115 | > programmers, but also in the hands of **people who care about the legacy of the 116 | > community spirit of Redis**. 117 | 118 | If no fork emerges, it seems a death knell for Salvatore's dreams for 119 | Redis-the-community, even while it vindicates the decision of 120 | Redis-the-company. I felt a similar pang of loss when I [watched David 121 | say](https://www.youtube.com/watch?v=MYoipcYW_Qk&t=1713s), in reference to 122 | Sentry's own relicensing (emphasis mine): 123 | 124 | > There's no billion-dollar revenue companies that are exclusively [permissive] 125 | > Open Source[.] I want to believe somebody will do it, at some point. They'll 126 | > take that leap, and it will work. **We were not going to be the ones to 127 | > quite do it**[.] 128 | 129 | Community is at the heart of Open Source. Companies are at the heart of our 130 | economy. Somehow it would sure be great if we could [figure out 131 | how](https://gratipay.news/the-second-open-company-4cbab7ca1a47) to have 132 | [the best of 133 | both](https://blog.gittip.com/post/25215503687/corporations-and-open-ones/). 134 | -------------------------------------------------------------------------------- /_posts/2024-04-01-fair-source-does-not-equal-software-commons.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Fair Source <> Software Commons 3 | excerpt: Fair Source is about licensing. Software Commons is about funding. Let's do both ... separately. 4 | --- 5 | 6 | Yes, it is April 1. No, this is not an April Fools Joke. This is a quick post 7 | to clear up a misconception about [Software 8 | Commons](https://softwarecommons.com/) that stems from the historical evolution 9 | of the name. If you weren't there for it, then hopefully you aren't confused by 10 | it, and this post will be stating the obvious for you. If you were, hopefully 11 | this helps disentangle what was admittedly a bit of a convoluted discussion. 12 | 13 | "Software Commons" 14 | [emerged](https://github.com/getsentry/fsl.software/issues/2#issuecomment-1939112531) 15 | out of [work we were doing](https://github.com/getsentry/fsl.software/issues/2) 16 | to [find a name other than Open 17 | Source](https://twitter.com/adamhjk/status/1687113805237714944) to [label 18 | Codecov](https://blog.sentry.io/lets-talk-about-open-source/) and projects like 19 | it, which are shared in meaningful ways but ultimately controlled by one company. 20 | Turns out it is better to name two separate approaches to balancing [Sentry's 21 | values](https://blog.sentry.io/sentrys-open-source-values/) of user freedom and 22 | developer sustainability: 23 | 24 | - [**Fair Source**](https://github.com/fairsource/fairsource/pull/9) is the term we are converging on to 25 | celebrate companies meaningfully sharing their core products using non-compete 26 | licenses (the original context in which the name "Software Commons" 27 | arose, hence the confusion). 28 | 29 | - [**Software Commons**](https://softwarecommons.com/) has become about bringing 30 | together companies, foundations, and platforms to solve [the Open Source 31 | sustainability 32 | crisis](https://openpath.quest/2024/the-open-source-sustainability-crisis/). 33 | 34 | I had initially tried to see these two aspects of sustainability—licensing and 35 | funding—as worth pursuing together. Now I see them as worth pursuing 36 | separately. Endorsing one does not entail endorsing the other, and neither one 37 | attempts to change the fundamental definitions of 38 | [Free](https://www.gnu.org/philosophy/free-sw.en.html#fs-definition) and [Open 39 | Source](https://opensource.org/osd) Software. 40 | 41 | Sorry for the confusion! 42 | -------------------------------------------------------------------------------- /_posts/2024-04-05-open-source-is-a-restaurant.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Open Source Is a Restaurant 3 | excerpt: It was a great meal. Are we going to pay the tab? 4 | --- 5 | 6 | ### Related Video 7 | 8 | {% include youtube.html video_id="AZZyV0gk3TM" %} 9 | 10 | --- 11 | 12 | With [XZ](https://research.swtch.com/xz-timeline) we're in a fresh round of 13 | proposals to fix [Open Source 14 | sustainability](/2024/the-open-source-sustainability-crisis/). 15 | One thing I'm seeing more of this time around is an appetite for tax-based 16 | approaches. Tim Bray proposes 17 | [OSQI](https://www.tbray.org/ongoing/When/202x/2024/04/01/OSQI). Matthew Hodgson also 18 | calls for [government 19 | funding](https://matrix.org/blog/2024/04/open-source-publicly-funded-service/). 20 | I've pitched a weird hybrid "[voluntary 21 | tax](/2024/a-vision-for-software-commons/)." 22 | 23 | Europe is (unsurprisingly) further along with [tax-based 24 | approaches](https://openfuture.eu/policies-for-the-digital-commons/public-digital-infrastructure-fund/) 25 | than the United States. [Sovereign Tech 26 | Fund](https://www.sovereigntechfund.de/) is off and running in Germany. 27 | [FOSSEPS](https://joinup.ec.europa.eu/collection/fosseps/news/funding-sustainability) 28 | seems to be coming along behind at the EU scope. 29 | 30 | Tax-based programs tend to be grant-driven, similar to what we see with 31 | industrial philanthropies in the U.S. such as the [Sloan 32 | Foundation](https://sloan.org/programs/digital-technology). With this model, 33 | maintainers apply for funding for a certain scope of work, and the government 34 | or charity follows up to ensure the work they are funding gets done. It's 35 | basically the tried and true consulting model for subsidizing Open Source, but 36 | with a government (or non-profit) as the client. 37 | 38 | Grant programs do not get us 39 | to [sustainability as I define it](/2024/the-open-source-sustainability-crisis/#what-is-open-source-sustainability): 40 | 41 | > Open Source sustainability is when any smart, motivated person can produce 42 | > widely adopted Open Source software and get paid fairly without jumping 43 | > through hoops. 44 | 45 | Grants are [hoops](https://openpath.quest/2024/the-open-source-sustainability-crisis/#whats-wrong-with-hoops). 46 | 47 | ## The Restaurant Analogy 48 | 49 | I've hit upon an analogy that I think clarifies our situation. It's 50 | [buried](/2024/a-vision-for-software-commons/#the-restaurant-analogy) in "A 51 | Vision for Software Commons," but there's a lot going on there and I think this 52 | is a good enough idea to warrant its own post. 53 | 54 | How should we think about the economics of Open Source? It's not a grocery 55 | store, or a soup kitchen. It's a restaurant. 56 | 57 | ### Not a Grocery Store 58 | 59 | Open Source is not a grocery store. At a grocery store (or pretty much 60 | any other store, but this analogy works best if we use food), you pay _first_, 61 | then you get to eat. 62 | 63 | This is analogous to thinking of payments to Open Source projects in terms of 64 | ROI: what am I getting in the future for the money I am paying now? This 65 | doesn't work, because you _already used the software_. You can pay for other 66 | things _adjacent to_ the software—consulting, packaging, hosting, and so forth. 67 | These _subsidize_ Open Source but do not directly _sustain_ it. ROI as a 68 | mechanism depends on scarcity, and Open Source is essentially, intentionally 69 | non-scarce. 70 | 71 | ### Not a Soup Kitchen 72 | 73 | Open Source is not a soup kitchen. Payments to Open Source projects are 74 | not donations, they are not charity. They would be if someone else ate the 75 | meal, but you ate it. 76 | 77 | Companies are by definition not geared towards making charitable donations. 78 | Yes, corporate philanthropy is a thing. It's peanuts. I'm seeing maybe [$25 79 | billion/year](https://doublethedonation.com/types-of-corporate-philanthropy/), 80 | on a U.S. economy of [$25 _trillion_](https://www.google.com/search?q=us+gdp) a 81 | year. Open Source likely accounts for [100s of billions of this 82 | value](https://gratipay.news/open-source-captures-almost-none-of-the-value-it-creates-9015eb7e293e) 83 | and currently recoups [100s of 84 | millions](https://fosdem.org/2024/events/attachments/fosdem-2024-2751-the-state-of-funding-free-open-source-software/slides/22659/State_of_FOSS_Funding_FOSDEM_2024_IQwHRvb.pdf) 85 | (PDF). We need to grow Open Source income by several orders of magnitude. 86 | Calling it charity is a doomed approach. Fortunately, it's also not accurate. 87 | 88 | ### A Restaurant 89 | 90 | Open Source is a restaurant. At a restaurant, you eat your meal _first_, 91 | and _then_ you are expected to pay for it. Yes, we could dine and dash. But we 92 | don't. When presented with a tab for a meal we have just eaten, we pay 93 | the tab. 94 | 95 | Now picture a meal with a large group of friends. Inevitably, someone forgot 96 | their wallet—or “forgot” “their” “wallet.” 97 | The rest of the group has to pick up their share. Sometimes, one person gets 98 | stuck with the whole tab. 99 | 100 | Our companies are sitting around the table. Open Source is the meal we consume 101 | year after year. **We need to [split the 102 | check](/2024/a-vision-for-software-commons/#splitting-the-check-with-a-fair-share)**. 103 | Be careful here: I'm _not_ saying we should _tip_ Open Source projects. I'm saying 104 | we should _pay our bill_. If some companies want to tip extra, more power to them. 105 | 106 | ### Residential ⇒ Commercial ⇒ Collective 107 | 108 | Hobby projects are akin to residential kitchens. Mounting expectations such as 109 | [CRA](https://digital-strategy.ec.europa.eu/en/library/cyber-resilience-act) 110 | and [EO 111 | 14028](https://www.nist.gov/itl/executive-order-14028-improving-nations-cybersecurity) 112 | are akin to OSHA inspections. We need Open Source foundations to 113 | [become commercial kitchens](/2024/the-future-of-foss-foundations/), as it were, fit to deliver at scale. At the same 114 | time, we need foundations to find ways of funding individuals that [fit the 115 | Open Source ethos of collaborative 116 | autonomy](/2024/a-vision-for-software-commons/#the-heart-of-open-source). If 117 | Open Source is to be a restaurant, let it be the [Moosewood 118 | Collective](https://en.wikipedia.org/wiki/Moosewood_Restaurant). 119 | 120 | ## A New Bucket 121 | 122 | Companies already have a few big buckets that make sense to them to 123 | account for money they spend: 124 | 125 | - Taxes—they pay because they have to or (at some point) they'll be disciplined by government. 126 | - Purchases—they pay because they want the product or service they are buying. 127 | - Donations—they pay because ... well, they don't really, if we're honest. It's couch pennies. 128 | 129 | We need a new bucket: 130 | 131 | - Fair Share—they pay because, at the very least, they don't want to be 132 | seen by their peers as deadbeats. 133 | 134 | Look, don't get me wrong. This is a _huge honkin' deal_. We're essentially 135 | asking our corporations to become a _little teensy tiny bit_ less sociopathic than they 136 | currently by nature are. Everything is against us. There's no way this could 137 | possibly work. Unless enough of us collectively want it to work. 138 | 139 | I want it to work. 140 | 141 |
142 | Update 143 | We're moving this forward as Open Source Pledge. 144 |
145 | -------------------------------------------------------------------------------- /_posts/2024-04-26-the-future-of-foss-foundations.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: The Future of FOSS Foundations 3 | excerpt: With new EU legislation, Open Source foundations are growing up fast. Where are we headed? 4 | --- 5 | 6 | I took AP Computer Science in 1994, in a small lab with a dozen 7 | Macintoshes. For homework, we scribbled top-down 8 | designs and Pascal snippets on paper. Some we typed in the next day. 9 | 10 | A few weeks in, my mom (a math teacher in a different district) drove me to CompUSA at Parkway 11 | Center Mall and plunked $124.99 plus tax for a shrink-wrapped box with Borland 12 | Turbo Pascal on probably half a dozen 3½" floppies to install on our Gateway 2000. 13 | We [ate at Chi-Chi’s](https://www.reddit.com/r/pittsburgh/comments/16ufhkw/who_remembers_shopping_at_compusa_and_then/) and I got fried ice cream but not 14 | [hepatitis](https://en.wikipedia.org/wiki/Chi-Chi%27s#Bankruptcy,_hepatitis_A,_and_closure_in_United_States_and_Canada) 15 | (thankfully) and I really hope I can visit [the last one standing](https://www.chi-chis.at/) 16 | in September. So epic. Back home I wrote Pascal on the Gateway instead of 17 | paper. 18 | 19 | {% include img.html src="level-3.gif" caption="Parkway Center Mall floorplan dot tumblr dot com" url="https://www.tumblr.com/kirbypuckett/42594346160/parkway-center-mall" %} 20 | 21 | I thought about this experience when I read Stephen Walli's "[My [Memes About] Free and 22 | Open Source 23 | Software](https://medium.com/@stephenrwalli/my-history-of-free-and-open-source-software-1bac0a75a6ba#5ea4)" 24 | (a good post with a bad title; also, the emphasis below is mine): 25 | 26 | > Meme #7: Don’t confuse products with projects. 27 | > 28 | > A project is a collection of working software that installs and runs and 29 | > solves an interesting problem. It’s a collaboration and conversation in code. 30 | > Projects are NOT products. **A product is something that solves a customer’s 31 | > problem for money.** While a lot of excellent software can come out of a 32 | > well-run open source project that relieves some of the work for engineering, 33 | > there is enormous work still to be done to turn it into a problem-solving 34 | > product for customers. 35 | 36 | Borland Turbo Pascal was clearly a product for me in 1994, on this 37 | definition. It solved my problem for money. I had the shrink-wrap and 38 | blank paper to prove it. 39 | 40 | Now, besides a war on terror and a global pandemic, what's the delta between 41 | 1994's Borland Turbo Pascal and 2024's JavaScript or Rust or Python? I think 42 | it's just the money part. Some projects certainly _feel_ like products, highly 43 | dependable opaque-in-practice solutions to a problem. How many of us 44 | [open](https://chromium.googlesource.com/v8/v8.git) 45 | [the](https://github.com/rust-lang/rust) 46 | [hood](https://github.com/python/cpython)? Probably as many as fix our own car. 47 | 48 | ## Stewarding Borland Turbo ... Python? 49 | 50 | If Python is a product, who is the producer? The Python community, yes, of 51 | which the Python Software Foundation is presently being chiseled into European 52 | Union law as the steward. This is one of the most remarkable aspects of 53 | the [Cyber Resilience Act 54 | (CRA)](https://www.europarl.europa.eu/doceo/document/TA-9-2024-0130_EN.pdf), a 55 | new piece of legislation that has kept the Open Source community in Europe 56 | quite busy for the past 18 months. Many outside Europe are less aware of it, but it will 57 | have a profound impact on all of us in the coming years. (I started [wrapping my 58 | head around the CRA in this 59 | ticket](https://github.com/chadwhitacre/openpath/issues/40), so if you want to 60 | do the same you might start there.) 61 | 62 | Here is the text in the CRA that enshrines Open Source foundations as a 63 | new kind of economic actor alongside manufacturers and consumers (§ 19, emphasis 64 | added): 65 | 66 | > Taking into account the importance for cybersecurity of many products with 67 | > digital elements qualifying as free and open-source software that are 68 | > published, but not made available on the market within the meaning of this 69 | > Regulation, legal persons who provide support on a sustained basis for 70 | > the development of such products which are intended for commercial 71 | > activities, and who play a main role in ensuring the viability of those 72 | > products (**open-source software stewards**), should be subject to a 73 | > light-touch and tailor-made regulatory regime. Open-source software stewards 74 | > include certain foundations as well as entities that develop and publish free 75 | > and open-source software in a business context, such as not-for-profit 76 | > entities developing free and open-source software in a business context. The 77 | > regulatory regime should take account of their specific nature and 78 | > compatibility with the type of obligations imposed. 79 | 80 | Here it is as a slide from the author of the CRA explaining to FOSDEM, "[what 81 | the open-source software steward will 82 | be](https://www.youtube.com/watch?v=wRzqvHulcEA#t=18m07s)": 83 | 84 | {% include img.html src="osss.webp" caption="OSS stewards are a new economic actor in the EU." url="https://fosdem.org/2024/events/attachments/fosdem-2024-3683-the-regulators-are-coming-one-year-on/slides/22201/Slides_CRA_FOSDEM_v3_ukPnQUG.pdf" %} 85 | 86 | The European Union does not regularly invent new kinds of economic actor. The 87 | last time was in 2008, with the "[new legislative 88 | framework](https://single-market-economy.ec.europa.eu/single-market/goods/new-legislative-framework_en)," 89 | since compacted, ossified, solidified, and hardened by 15+ years of government 90 | built atop it. An Open Source carve-out in the CRA is _a really big deal_. 91 | 92 | ## EU Is Saying the Word "Restaurant" 93 | 94 | Stephen Walli's Meme #3 is, "[There is no scale without 95 | discipline](https://medium.com/@stephenrwalli/my-history-of-free-and-open-source-software-1bac0a75a6ba#5d29)," 96 | which he unpacks elsewhere [using a cooking 97 | metaphor](https://medium.com/@stephenrwalli/sustaining-open-source-software-4a62a4b6d0f3#595f) 98 | (emphasis added): 99 | 100 | > Everyone knows how to fry an egg. You can become a reasonable cook with some 101 | > practice, expanding your repertoire and toolset. You may get good enough to 102 | > cook for friends or tackle the Holiday meal for family. You might specialize 103 | > and become very good at baking. But **the world of cooking changes dramatically 104 | > when you say the word ‘restaurant.’** 105 | > 106 | > Restaurants, regardless of whether they are 2-person taco trucks or 107 | > Michelin-starred experiences, are businesses that happen to involve cooking. 108 | > There is suddenly an array of cooking skills required to consistently, 109 | > reliably, repeatably deliver the same food outcome every time. There is a 110 | > team with roles, and that adds all manner of communications challenges to 111 | > ensure the consistent delivery of food (and experience). **There are rules 112 | > and regulations.** Added on top of that customers need to be served, accounts 113 | > payable/receivable need to be managed, (you need to spend less than you 114 | > earn,) and the team needs to be hired, trained, motivated, and paid. 115 | > 116 | > So too with software. There is a considerable difference between the problem 117 | > sets that need to be solved to deliver software solutions consistently at 118 | > scale (to large numbers of users in a community or large numbers of 119 | > customers) versus bespoke solutions in the small or solutions with dozens of 120 | > users not tens of thousands. These aren’t ‘open source’ problems. They’re 121 | > software skillset and experience problems. These problems have everything to 122 | > do with software hygiene and software engineering and **apply to all software 123 | > regardless of licensing regime or community versus corporate creation**. 124 | 125 | With the CRA, the European Union is saying the word "restaurant" over the whole 126 | software industry, including Open Source. The "rules and regulations" are 127 | arriving. They intend a "light-touch and tailor-made regulatory regime" for 128 | Open Source. Cue the unintended consequences. It was green onions from a 129 | distant supplier that took down Chi-Chi's restaurant in the worst hepatitis A 130 | outbreak in U.S. history. My friend's father's friend died. Log4j and XZ are the 131 | green onions. They are grown in [someone's back 132 | yard](https://www.softwaremaxims.com/blog/not-a-supplier). How does this play 133 | out? 134 | 135 | "Open source projects will not be required to directly implement the mandated 136 | processes described in the CRA," [observes Mike 137 | Milinkovich](https://eclipse-foundation.blog/2023/12/19/good-news-on-the-cyber-resilience-act/), 138 | a leader in the Open Source community's response. "But every commercial product 139 | made available in the EU which is built on top of those open source projects 140 | _will_. I predict this will put pressure on projects and communities to enhance 141 | their processes to assist in downstream commercialization." There is no scale 142 | without discipline. Mike continues (emphasis added): 143 | 144 | > After all, if a project is used in hundreds of products, doing the bulk of 145 | > the CE Mark conformance work in the project rather than repeating the effort 146 | > hundreds of times makes enormous sense. But as we all know, **OSS projects at 147 | > the moment simply do not have the resources to do this**. It is impossible to 148 | > know how all of this will play out, but an optimistic hypothesis is that once 149 | > companies are required by law to meet secure software development practices 150 | > they will be incented to invest in the upstream projects they rely upon. 151 | 152 | Pessimistic hypotheses are also available, but let's share Mike's optimism. If 153 | we are to make the best of this new legal landscape, we need to support FOSS 154 | foundations _now more than ever_ in order for them to live up to the demands of 155 | an Open Source software steward. If we are to regulate Open Source like a 156 | restaurant, let us also [fund Open Source like a 157 | restaurant](/2024/open-source-is-a-restaurant/#the-restaurant-analogy). 158 | 159 | ## Rounding Out the Roles 160 | 161 | Historically, FOSS foundations have focused on some things and not others. Back in 162 | 2009, Stephen Walli and co-author Paula Hunter [taxonomized these things as 163 | follows](https://www.jolts.world/index.php/jolts/article/view/64/148): 164 | 165 | 1. Legal Framework for IP Management 166 | 1. Ownership Neutrality 167 | 1. Liability and Risk Management 168 | 1. Code Provenance 169 | 1. The License of a FOSS Project and License Curation 170 | 1. Technical Services 171 | 1. The Forge and the Communications Channel 172 | 1. Mentorship and Incubation 173 | 1. General Management and Operations 174 | 1. Support Across the Project Lifecycle 175 | 1. Funding: Members, Dues, and Donations 176 | 177 | With some minor modifications (rip forges lol), these still obtain. Two things 178 | foundations own today more clearly than 15 years ago jump out: 179 | 180 | 1. Packaging. The Python Software Foundation [runs 181 | PyPI](https://pypi.org/help/#about). The Rust Foundation [runs 182 | Crates.io](https://www.rust-lang.org/governance/teams/crates-io). Ruby Central [runs RubyGems](https://rubygems.org/pages/sponsors). 183 | 1. Events. Ruby Central runs [two conferences](https://rubycentral.org/conferences/). PyCon is "the [single biggest 184 | fundraiser](https://psf-docs.readthedocs.io/en/latest/_docs/faq.html#what-is-the-relationship-between-pycon-us-and-the-psf) 185 | the PSF has every year." "[~60-70% of [CNCF's] 186 | budget](https://twitter.com/cra/status/1763632743127126190) goes to running 187 | events for the community." 188 | 189 | With government regulation of Open Source, foundations seem poised to take on 190 | even more responsibility. In the limit, they could even evolve to look like weird 191 | software companies. Consider a software company like my employer, Sentry. It provides a legal framework for IP 192 | management, technical services, and general management and operations. We have 193 | a service reliability team, and events and marketing staff. We _also_ have a 194 | full-fledged product engineering organization—the bulk of our company. 195 | 196 | Will the foundations of the future employ engineers, to meet the demands 197 | (direct or indirect) of regulators? 198 | [Django](https://www.djangoproject.com/fundraising/#who-are-the-django-fellows) 199 | and [Ruby 200 | Central](https://rubycentral.org/news/ruby-central-welcomes-new-software-engineer-in-residence-sponsored-by-aws/) 201 | have started down this path. PHP is [furthest 202 | along](https://thephp.foundation/structure/#core_developers). Taken to its 203 | conclusion, this would change the character of our foundations, but not 204 | necessarily in a bad way. There is no scale without discipline, and there are 205 | ways to scale that [preserve the heart and soul of Open 206 | Source](/2024/a-vision-for-software-commons/#the-heart-of-open-source). 207 | Foundations have an opportunity—perhaps an obligation—to play a pivotal role in 208 | ensuring that homegrown green onions from a thousand back yards are safe for 209 | mass consumption. 210 | -------------------------------------------------------------------------------- /_posts/2024-05-15-widespread-use-of-a-fair-source-product.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Widespread Use of a Fair Source Product 3 | excerpt: Self-hosted Sentry is a clear existence proof of the viability of the Fair Source model. 4 | --- 5 | 6 | We aim to [launch Fair Source](https://github.com/fairsource/fair.io/issues/14) 7 | in August, just over a year from Adam Jacob's [call for a new 8 | term](https://twitter.com/adamhjk/status/1687113805237714944) after our 9 | [Codecov misstep](https://news.ycombinator.com/item?id=36971490). Yesterday, we 10 | hit ESR's radar. His [reaction was 11 | negative](https://twitter.com/esrtweet/status/1790350881424056680): "No 12 | corporate legal department will _ever_ sign off on letting a 'fair source' 13 | project be used in house[.]" I 14 | [said](https://twitter.com/chadwhitacre_/status/1790382981028159807) that 15 | Sentry seems a clear existence proof to the contrary. Eric [inquired 16 | further](https://twitter.com/esrtweet/status/1790680602053579084): 17 | 18 | > I find your claim about widespread "fair source" use surprising and in fact 19 | > barely even believable. 20 | > 21 | > 1. There seems to be an inconsistency between the claim that "fair source" is 22 | > already in wide use and the fact that some people are only now getting 23 | > around to naming and formulating the concept and putting up a website 24 | > about it. 25 | > 2. If it's nevertheless true, I'm wondering why no word of such an important 26 | > development had never [sic] reached me before. 27 | > 28 | > Color me skeptical but willing to learn. 29 | 30 | In this post I aim to back up my claim. I'll explain what self-hosted Sentry 31 | is, then unpack my claim that we have 10,000+ installations out in the wild. 32 | I'll end by addressing Eric's additional points. 33 | 34 | ## Self-hosted Sentry 35 | 36 | [Sentry](https://sentry.io/welcome/) is a software product for monitoring 37 | errors and performance issues in software products. David Cramer started the 38 | project 16 years ago as [an unlicensed 71-line Django 39 | plugin](https://github.com/getsentry/sentry/commit/3c2e87573d3bd16f61cf08fece0638cc47a4fc22). 40 | Today 300+ people produce Sentry in a corporation with a SaaS hosting business 41 | serving [100,000+ 42 | customers](https://blog.sentry.io/building-for-the-fortune-500-000/). We get 43 | occassional code contributions from non-staff (much more so in our SDKs, which 44 | are MIT-licensed), but by and large Sentry-the-product has [always been 45 | produced](https://blog.sentry.io/nows-the-time-for-delayed-open-source/#sentrys-history-with-delayed-open-source) 46 | by Sentry-the-company. 47 | 48 | {% include img.html src="Percentage_of_Commits_by_Era_and_Relation.webp" caption="Sentry has always been produced by Sentry." url="https://blog.sentry.io/nows-the-time-for-delayed-open-source/#sentrys-history-with-delayed-open-source" %} 49 | 50 | In addition to SaaS, we offer [self-hosted 51 | Sentry](https://github.com/getsentry/self-hosted), a Docker Compose packaging 52 | of the [core Django monolith](https://github.com/getsentry/sentry) and other 53 | services ([too many!](https://github.com/getsentry/team-ospo/issues/232)). It 54 | is suitable out of the box for low-volume and proof-of-concept deployments, and 55 | also serves as a blueprint for those who want to operate Sentry at scale. The 56 | feature set is the same between self-hosted and SaaS. In fact, sufficiently 57 | motivated self-hosted users can enable bleeding edge features before they're 58 | enabled in SaaS. We do not monetize self-hosted Sentry. 59 | 60 | Since 2019, we have licensed Sentry using what the Open Source Initiative (OSI) 61 | recently called "[delayed Open Source 62 | publication](https://blog.opensource.org/a-historic-view-of-the-practice-to-delay-releasing-open-source-software-osis-report/)." 63 | We [used the Business Source 64 | License](https://blog.sentry.io/relicensing-sentry/) (BSL or BUSL) until 2023, 65 | at which point we [introduced the Functional Source 66 | License](https://blog.sentry.io/introducing-the-functional-source-license-freedom-without-free-riding/) 67 | (FSL). Both our BSL and the FSL count for what we now classify as "Fair 68 | Source." We have almost five years of history with the practice. 69 | 70 | ## Receipts (Almost) 71 | 72 | Sentry has a dashboard on one of our internal BI platforms that we use to 73 | monitor self-hosted. The data comes from our [opt-in 74 | beacon](https://develop.sentry.dev/self-hosted/#self-hosted-beacon). Of course, 75 | many users do not opt in, or have network configurations that block beacon 76 | traffic even if sent. (A few months ago we noticed a precipitous decline over 77 | the course of an hour. Nearly 20% of instances stopped reporting. 78 | Investigation showed patterns in admin emails of dropped instances that lead us 79 | to hypothesize that China blocked us at the Great Firewall.) The self-hosted 80 | instances visible to us are an unknowable fraction of the overall install base. 81 | 82 | {% include img.html src="dashboard.webp" caption="No, you can't actually see the dashboard." url="https://www.youtube.com/watch?v=dQw4w9WgXcQ" %} 83 | 84 | We show 18,751 self-hosted instances in the wild running versions 85 | published in the past five years, under what we now call Fair Source licenses. 86 | Not all of these are active instances, however, and we had [a bug until 87 | recently](https://github.com/getsentry/sentry/pull/62441) that prevents us from 88 | filtering out inactive instances from versions older than five months. We 89 | currently show 3,950 active instances running versions published in the 90 | past five months. These two bounds, along with the recognition that many 91 | instances do not report their existence to us, led me to [claim **10,000+ 92 | instances** as a conservative 93 | estimate](https://twitter.com/chadwhitacre_/status/1790382981028159807). 94 | 95 | As to my claim that users range from hobbyists to FAANG companies, I'm not 96 | going to speak further. I'm content to let those doubt who will. 97 | 98 | ## Formulating the Concept 99 | 100 | Besides doubting my claim about the widespread adoption of Sentry under 101 | licenses that we now call Fair Source, Eric makes another point worth 102 | addressing: 103 | 104 | > There seems to be an inconsistency between the claim that “fair source” is 105 | > already in wide use and the fact that some people are only now getting around 106 | > to naming and formulating the concept and putting up a website about it. 107 | 108 | Let's be careful. I don't claim that "fair source" is already in wide use. I do 109 | claim more modestly that _Sentry_ is already in wide use under licenses that we 110 | now call Fair Source. This is sufficient to disprove Eric's original statement, 111 | that "No corporate legal department will ever sign off on letting a ‘fair 112 | source’ project be used in house[.]" Thousands have. 113 | 114 | {% include img.html src="atlassian.webp" caption="Atlassian's legal department did not drive their migration." url="https://sentry.io/customers/atlassian/" %} 115 | 116 | That said, the roots of Fair Source are not as shallow as they might seem. 117 | [Fair Code](https://web.archive.org/web/20240508232939/https://faircode.io/) 118 | was a similar initiative driven by [n8n](https://n8n.io/) with a [similar 119 | origin story](https://github.com/n8n-io/n8n/issues/40) that [kicked off five 120 | years 121 | ago](https://github.com/faircode-io/faircode/commit/fd15361f8af9c19910f773768f632a1713f3e89b). 122 | They [agree in principle](https://github.com/fairsource/fair.io/issues/10) to 123 | merge into Fair Source when the time is right. The reason they chose Fair 124 | Code in the first place is because Fair Source was already staked out for the 125 | name of a particular license. That license has little traction (it's not listed 126 | in SPDX) and the steward has moved on, making way for us to revive the term for 127 | a wider conversation about what lies between closed source and Open Source. 128 | 129 | What's more, OSI executive director Stefano Maffulli is on record about "[Open 130 | Source’s lost 131 | decade](https://opensource.net/lost-decade-crucial-lessons-for-ai/)": 132 | 133 | > Over the last decade, Open Source hasn’t widely addressed the challenges of 134 | > mobile and cloud computing. That means we don’t have an easy way to judge 135 | > what Open Source means in those contexts. 136 | 137 | Maybe that was OSI's job. Maybe they would have been able to forestall the 138 | proliferation of non-compete licenses—SSPL, RSAL, EL, Commons Clause, BSL, now 139 | FSL. Now OSI is trying to [catch 140 | up](https://opensource.org/blog/practical-open-source-2024-submit-your-proposal), 141 | but the [pot is 142 | poisoned](https://opensource.net/why-single-vendor-is-the-new-proprietary/) for 143 | a company like Sentry. Open Source, like Free Software, takes user freedom as 144 | its sole guiding value. [We value developer 145 | sustainability](https://blog.sentry.io/sentrys-open-source-values/) just as 146 | much. As consumers of Open Source this means [we pay for 147 | it](https://blog.sentry.io/we-just-gave-500-000-dollars-to-open-source-maintainers/). 148 | As producers of software, yes: we are "now getting around to naming and 149 | formulating the concept and putting up a website about it." The reason it took 150 | Sentry so long is because we wanted so badly to make this work inside of Open 151 | Source. Now, like n8n before us, we have 152 | [ceded](https://blog.sentry.io/lets-talk-about-open-source/). 153 | 154 | Agree or disagree with the formulation of Fair Source, arguing against it _a 155 | priori_ is untenable. The proof of the pudding is in the eating, and 10,000+ 156 | feast happily. 157 | -------------------------------------------------------------------------------- /_posts/2024-10-11-a-tale-of-two-leaders.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: A Tale of Two Leaders 3 | excerpt: Matt Mullenweg and Dries Buytaert are showing us starkly contrasting ways of leading an Open Source community. 4 | bluesky: https://bsky.app/profile/chadwhitacre.com/post/3l7lbwm3i4h25 5 | --- 6 | 7 | This is my contribution to the (ongoing) [Great WordPress Drama of 8 | 2024](https://en.wikipedia.org/wiki/WP_Engine#WordPress_dispute_and_lawsuit). 9 | Here are explainers from [Ivan Mehta in 10 | _TechCrunch_](https://techcrunch.com/2024/10/10/wordpress-vs-wp-engine-drama-explained/) 11 | and [Emma Roth in _The 12 | Verge_](https://www.theverge.com/2024/9/27/24256361/wordpress-wp-engine-drama-explained-matt-mullenweg) 13 | to get caught up. Adam Jacob is thorough as usual on [the trademark 14 | angle](https://x.com/adamhjk/status/1844043758800957727). Pelle Wessman [gets 15 | closer](https://x.com/voxpelli/status/1844346017879294449) to what I see as the 16 | heart of the matter: 17 | 18 | > WordPress has given the impression that they are a community owned project 19 | > with WordPress Foundation guaranteeing its independence from any one actor. 20 | > 21 | > But now its become apparent that WordPress Foundation is not. 22 | 23 | Yes, this episode reveals much about the importance of good governance in Open 24 | Source. Along with that, it reveals the importance of good _leadership_. 25 | 26 |
27 | Update 28 | I've published a follow-up, “Leadership and Power in Open Source.” 29 |
30 | 31 | ## Matt Mullenweg Is a Tragic Tyrant 32 | 33 | It is difficult for me not to interpret Matt Mullenweg's behavior during this 34 | crisis through [the lens of Greek 35 | tragedy](https://brill.com/view/journals/agpt/40/2/article-p234_5.xml): 36 | 37 | > The negative meaning of _tyrannos_ ["tyrant"] is always latent in [Greek] tragedy, even 38 | > where the word is used objectively and not as a term of abuse. _Tyrannos_ does 39 | > not simply indicate a powerful individual but implies absolute power, fortune 40 | > and wealth. This absolute power leads to ruin and tyrannical vice. _Tyrannos_ 41 | > signifies not a bad or illegitimate ruler, but rather one with the potential 42 | > to develop such characteristics. 43 | 44 | Against that backdrop, consider the hubris: 45 | 46 | - "[I've been post-economic for probably 19 years 47 | now.](https://x.com/sereedmedia/status/1839394786622722432)" 48 | 49 | - "[WordPress.org just belongs to me personally.](https://www.theverge.com/2024/10/4/24262232/matt-mullenweg-wordpress-org-wp-engine)" 50 | 51 | - "[People think they're a lot more important than they actually are.](https://x.com/photomatt/status/1844188190061756918)" 52 | 53 | The [bristling offense](https://archive.is/TWjAr): 54 | 55 | > The abbreviation 'WP' is not covered by the WordPress trademarks, but please 56 | > don’t use it in a way that confuses people. For example, many people think WP 57 | > Engine is 'WordPress Engine' and officially associated with WordPress, which 58 | > it’s not. 59 | 60 | The thin skin: "[My own mother was confused.](https://wordpress.org/news/2024/09/wp-engine/)" 61 | 62 | The [shakedown](https://automattic.com/2024/10/01/wpe-terms/): "[a royalty fee equal to 8% of its Gross Revenue](https://automattic.com/2024/10/01/wpe-terms/)." 63 | 64 | And then, the "[Automattic Alignment](https://ma.tt/2024/10/alignment/)," the 65 | demand of allegiance: 66 | 67 | - "[I ask everyone in the WordPress community to vote with your 68 | wallet.](https://ma.tt/2024/09/ecosystem-thinking/)" 69 | 70 | - "[If you want to experience WordPress, use any other host in the world besides 71 | WP Engine.](https://wordpress.org/news/2024/09/wp-engine-banned/)" 72 | 73 | - "[I want you all to be informed and involved. Not to stay on the 74 | sidelines](https://x.com/JavierCasares/status/1843963086073733523)." 75 | 76 | And finally, The Checkbox™. Yes, it's [really 77 | there](https://login.wordpress.org/) ([archive](https://archive.is/FqfEr)), and 78 | [you have to check it](https://x.com/chadwhitacre_/status/1844483081413214647) to login. 79 | 80 | {% include img.html src="./the-checkbox.webp" url="https://login.wordpress.org/" caption="Go see for yourself." %} 81 | 82 | WP Engine 83 | [alleges](https://wpengine.com/wp-content/uploads/2024/09/Cease-and-Desist-Letter-to-Automattic-and-Request-to-Preserve-Documents-Sent.pdf) 84 | that Matt "threatened [...] to embark on a self-described 'scorched earth 85 | nuclear approach,'" if they didn't resolve their conflict before his WordCamp 86 | keynote. Whether the specific allegation is true, that certainly describes what 87 | has transpired since. Matt himself called it "[going to 88 | war](https://ma.tt/2024/09/charitable-contributions/)." His keynote is his 89 | "[Spiciest WordCamp Talk 90 | Ever!](https://www.youtube.com/watch?v=fnI-QcVSwMU#t=10m05s)" It [immediately 91 | sent the community 92 | reeling](https://www.reddit.com/r/Wordpress/comments/1flqqm5/matt_just_threw_wp_engine_under_the_bus_hard/) 93 | and [the](https://x.com/LinuxJedi/status/1843966957495939093) 94 | [chaos](https://josepha.blog/2024/10/04/thank-you-wordpress/) 95 | [shows](https://x.com/alexmansfield/status/1844086799406334121) 96 | [no](https://x.com/Rarst/status/1844245533004792129) 97 | [sign](https://x.com/rmccue/status/1843967630585311595) 98 | [of](https://x.com/mor10/status/1842640095087919219) 99 | [letting](https://x.com/jonoalderson/status/1843985559745921046) 100 | [up](https://x.com/xwolf/status/1844407543130619984) 101 | [anytime](https://x.com/sereedmedia/status/1844154707100696931) 102 | [soon](https://x.com/LucP/status/1843926970763227255). 103 | 104 | Moreover, Matt's current behavior is in keeping with his past behavior, as Wes Bos 105 | [pointed out](https://x.com/wesbos/status/1839122560597848533): "Real ones 106 | remember the @photomatt and @pearsonified thesis theme spat of 2010." I'm not a 107 | real one so I had to [read up on 108 | it](https://poststatus.com/thesis-automattic-and-wordpress/). Vicious, highly 109 | public conflict seems to be part of Matt's _modus operandi_, part of his 110 | character as a leader. 111 | 112 | The essence of tyranny is absolute power, corrupting absolutely. **Matt does 113 | not share power.** The WordPress Foundation [is a 114 | sham](https://x.com/voxpelli/status/1839264084350369806). He is on the 115 | tyrant's path. 116 | 117 | ## Dries Buytaert Is a Gentle Giant 118 | 119 | {% include img.html src="./dries-and-matt.jpg" url="https://dri.es/two-internet-entrepreneurs-walk-into-an-old-publishing-house" caption="Dries and Matt in 2019, from Dries' blog. CC-BY-NC" %} 120 | 121 | In the heat of the WordPress drama, it's easy to forget that there's another GPL 122 | PHP CMS powering a good chunk of the other 57% of the Web: Drupal. Its founder, 123 | Dries Buytaert, [has all the answers to resolve the WordPress 124 | crisis](https://dri.es/solving-the-maker-taker-problem). No joke. 125 | 126 | Dries' work with Drupal is [a master-class in institution-building for governing 127 | the 128 | commons](https://dri.es/balancing-makers-and-takers-to-scale-and-sustain-open-source). 129 | Elinor Ostrom [wrote the book on this](https://www.amazon.com/dp/1107569788), 130 | which [I summarized in an early 131 | post](https://openpath.quest/2024/the-case-for-a-new-institution/#a-commons-is-an-institution). 132 | The summary of the summary is that healthy commons exhibit seven attributes: 133 | 134 | 1. Clearly defined boundaries 135 | 1. Congruence between appropriation and provision rules and local conditions 136 | 1. Collective-choice arrangements 137 | 1. Monitoring 138 | 1. Graduated sanctions 139 | 1. Conflict-resolution mechanisms 140 | 1. Minimal recognition of rights to organize 141 | 142 | Drupal exhibits all of these, because Dries [explicitly grew Drupal according 143 | to the best research on governing the 144 | commons](https://dri.es/balancing-makers-and-takers-to-scale-and-sustain-open-source). 145 | He created the Drupal Association as a truly independent, credible non-profit. 146 | Dries' company Acquia is one company among many operating on equal terms. The 147 | Drupal community has evolved a complex system of non-monetary accounting for 148 | contributions to the Drupal project, with the Association trusted to carry out 149 | monitoring and enforcement. [Go read Dries' deep dive from five years 150 | ago](https://dri.es/balancing-makers-and-takers-to-scale-and-sustain-open-source). 151 | It's awesome. 152 | 153 | In short, **Dries shares power.** This is the key to Drupal's success, and 154 | inspiring testament to Dries' remarkable character as a leader. What's more, 155 | Dries' irenic tone is exceedingly refreshing. From his 156 | [latest](https://dri.es/solving-the-maker-taker-problem): 157 | 158 | > Although this post was prompted by the controversy between Automattic and WP 159 | > Engine, it is _not_ about them. I don't have insight into their respective 160 | > contributions to WordPress, and I'm not here to judge. I've made an effort to 161 | > keep this post as neutral as possible. 162 | 163 | He just comes across as a really good guy, who has done a lot of really great 164 | work with Drupal and genuinely wants to see others and Open Source succeed. 165 | When he says he considers Matt a good friend, I believe him. If I see hope for 166 | WordPress, it's that peers such as Dries might get through to Matt with 167 | constructive feedback leading to personal growth, and a relaxed grip on 168 | power in the WordPress community. 169 | 170 | ## Two Paths for WordPress 171 | 172 | I think Matt is right that WP Engine is hurting the WordPress community. They 173 | are paradigmatic "Takers" in [Dries' 174 | model](https://dri.es/balancing-makers-and-takers-to-scale-and-sustain-open-source). 175 | As we wrestle with the questions of trademarks and licensing and sustainability 176 | and funding and governance in Open Source that this situation presents, let's 177 | also not forget about leadership. 178 | 179 | For better or worse, organizations and institutions and communities have 180 | leaders. For better or worse, leaders put their stamp on the groups they lead, 181 | often in subtle and far-reaching ways. All leaders make mistakes. Nobody is 182 | perfect (I attest from personal experience ;-). Power can be difficult to 183 | share. Personal growth can be deeply ... personal. 184 | 185 | If Matt does not want to share power in a true Open Source community, he could 186 | at least be more honest about it. We invented [Fair Source](https://fair.io/) 187 | precisely for companies who want to share to an extent while maintaining 188 | control over their core software products. Relicensing might be Matt's most 189 | honest option, since a fork already seems likelier every day (smart money says 190 | Linux Foundation has been courting WP Engine behind the scenes for weeks 191 | now). 192 | 193 | If Matt _does_ want WordPress to live up to its potential as a true Open Source 194 | community, he should follow Dries' advice and make the WordPress Foundation 195 | truly independent of Automattic, with well-designed governance. It won't be 196 | easy. There's a lot of mistrust to overcome. He probably needs to offer WP 197 | Engine a board seat to convince them to shift from Taker to Maker. 198 | 199 | One way or another, **letting go of power is the only cure for tyranny**. It's 200 | not too late for Matt to embark on a path to deeper growth as a leader. 201 | Thoughtfully sharing power would heal and revitalize the WordPress community 202 | and be an inspiration to all of us in Open Source. 203 | 204 | --- 205 | 206 | _Thanks to Michael Selvidge for commenting on a draft of this post._ 207 | -------------------------------------------------------------------------------- /_posts/2024-10-14-leadership-and-power-in-open-source.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Leadership and Power in Open Source 3 | excerpt: Open Source offers a check on power, yet some ways of wielding power are still better than others. 4 | bluesky: https://bsky.app/profile/chadwhitacre.com/post/3lbvny4gy722o 5 | homepage_rank: 2 6 | --- 7 | 8 | Last week I waded into the Great WordPress Drama of 2024 with a post comparing 9 | Matt Mullenweg's leadership of WordPress with Dries Buytaert's leadership of 10 | Drupal. My conclusion was that [Matt does not share power](/2024/a-tale-of-two-leaders/). 11 | 12 | Besides Dries, another key interlocutor of Matt's during this crisis is David 13 | Heinemeier Hansson, whose name I have yet to be able to spell confidently 14 | without checking, despite having followed his work and crossed paths a bit 15 | since 2004. DHH, let's call him. Shall we? 16 | 17 | Matt published [a reply to DHH](https://ma.tt/2024/10/on-dhh/) today [update: 18 | Matt took down the original], which sorta is-what-it-is, par for the course in 19 | the fight Matt is waging. What I found more interesting was [this related 20 | post](https://ma.tt/2019/10/debating-oss-with-dhh/) from 2019, about a 21 | conversation Matt had with DHH on the Rework Podcast entitled, "[Open Source 22 | and Power with Matt 23 | Mullenweg](https://37signals.com/podcast/open-source-and-power-with-matt-mullenweg/)." 24 | 25 | {% include img.html src="old-call.webp" caption="Might be just a bit relevant lol" url="https://37signals.com/podcast/open-source-and-power-with-matt-mullenweg/" %} 26 | 27 | The context was Automattic's Series D, and an emerging narrative around growing 28 | WordPress from 34% of the web to 85%. Today WordPress is at 57%, so Matt is 29 | right on track, I guess. At the time, David rankled at one company 30 | consolidating so much power. A Twitter exchange evolved into [the podcast 31 | episode](https://37signals.com/podcast/open-source-and-power-with-matt-mullenweg/). 32 | tl;dr Matt _really_ does not share power—except when he does, then he 33 | _really_ does. 34 | 35 | ## Evil Monopoly Stuff 36 | 37 | There are some quotes in Matt and David's call that are really juicy in light 38 | of the current crisis. Here's the juiciest, at 13:32: 39 | 40 | > And the truth is that if I had an evil hat on—like let’s say I started doing 41 | > evil monopoly stuff—people could easily fork the software, and they would ... 42 | > tomorrow! So there’s a checks and balances there. 43 | 44 | David pushed back on the feasability of a fork against such a large incumbent, 45 | but today we have Valkey and OpenTofu as existence proofs that it can and will be 46 | done. Who among us will be surprised if and when Linux Foundation and WP Engine 47 | [announce OpenPress](https://x.com/jessethanley/status/1839087749271531655) or 48 | whatever? 49 | 50 | {% include img.html src="openpress.com.webp" caption="Veeeeeery interesting indeed." url="https://openpress.com/" %} 51 | 52 | Here's the kicker: **Any fork, _especially_ if WP Engine backs it, will be a 53 | win for Matt**. It means they're finally contributing. Since it's GPL their 54 | modifications are available to everyone else, including Automattic. And it's 55 | what Matt has said all along. Here he is at 49:25: 56 | 57 | > I think in "the benevolent dictator," which is an interesting sidebar, I really 58 | > like the benevolent part. And again, I think on the dictator part, I don’t 59 | > love that terminology. I don’t think either of us would be attached to that. 60 | > But in other places, you know, companies, they typically have a CEO. 61 | > Countries, they typically have presidents or something like that. And all of 62 | > these systems are set up to have checks and balances, whether that’s a board 63 | > or shareholders or voters or things like that. And if you don’t like your 64 | > country for example, it’s really actually difficult to move to another one 65 | > and opt into like a different governance system. But in software it is a 66 | > hundred, a thousand, a million times easier than like uprooting your family 67 | > and your friends and everything like that and moving to a different country. 68 | 69 | > Actually, Free Software Foundation is a good example of that. Myself 70 | > and many others drifted away from them over the years. So, even though they 71 | > started things, their influence got smaller and smaller and smaller as they 72 | > took positions which didn’t really align with the future where people were 73 | > going or where their constituents, be that developers, users, donors, 74 | > whatever, were headed. 75 | 76 | > To the extent that Rails is doing great, WordPress, is doing great, et 77 | > cetera, I think that we’ve been responsive to changes in the marketplace. I 78 | > think that term started as a joke. There is something interesting that with a 79 | > lot of these Open Source projects there’s almost nothing you can name on the 80 | > list that has a committee-based leadership structure. And I think about that 81 | > all the time. Like, why is it difficult for committees or an alternative 82 | > governance structure to create really great software, backend software, 83 | > frontend software. You typically have something more like a director of a 84 | > movie or a conductor of an orchestra. There’s no perfect analogies because 85 | > it’s software, it’s different. But you typically have a person with whom a 86 | > great deal of decision-making power for determining the platform rests and 87 | > that is often a good thing for the health and quality of the platform, and I 88 | > don’t mind it as much because we have these checks and balances with Open 89 | > Source forking or all sorts of different ways that people can opt out of that 90 | > person’s power. 91 | 92 | It's hard for me to fault his main point. Personally, I can't stand WordPress 93 | as a software product. It really frustrates me every time I have to use it. So 94 | I don't, for the most part. That's me opting out of Matt's power. If I did love 95 | WordPress and didn't like what Matt is doing, I would think about contributing 96 | to a fork. He's right that Open Source provides a meaningful check-and-balance 97 | that, e.g., Mark Zuckerberg does not have. David finds this to be "[uncharted 98 | and dangerous territory for open 99 | source](https://x.com/dhh/status/1845197490829889605)," but I'm not sure it's 100 | not fine. Matt is being quite aggressive, yes. But WP Engine really was a 101 | "Taker," in Dries' 102 | [terminology](https://dri.es/solving-the-maker-taker-problem). Dries' patient, 103 | thoughtful approach to resolving the Maker/Taker problem is inspiring to me. 104 | Matt's tyrannical approach is not. But I'm free to opt out of Matt's power, so 105 | what's the problem? 106 | 107 | In Matt's [reply to DHH](https://ma.tt/2024/10/on-dhh/) [update: Matt took down 108 | the original], he called out David and Dries for holding the trademarks for 109 | Ruby on Rails and Drupal, rather than vesting those with their respective 110 | foundations. He has a point there, as well. 111 | 112 | What I'm seeing here is a clarification of ways to lead in Open Source, ways to 113 | wield power. I'm grateful that I can opt out of people's power in Open Source, 114 | and I trust that the best ways of wielding it will win out over time. 115 | 116 | ## P.S. Yay For More Emotional Bandwidth 117 | 118 | By the way, I love that we're finally learning to move conversations from 119 | text-based online communication, which has low emotional bandwidth, to podcasts 120 | and video calls, which have higher emotional bandwidth. Just the other week I 121 | did two of these, with [Peer 122 | Richelsen](https://x.com/chadwhitacre_/status/1839348202660638802) and with 123 | [Pete from Hugging Face](https://www.youtube.com/watch?v=QdUfB-hBoqk). I first 124 | experienced the power of this practice [back in 2013, with 125 | DHH](https://www.youtube.com/watch?v=p1E-svVd9Xc), in fact. We talked about 126 | [mixing Open Source and 127 | money](https://dhh.dk/2013/the-perils-of-mixing-open-source-and-money.html), 128 | which is [still highly 129 | relevant](https://lucumr.pocoo.org/2024/10/14/mixing-oss-and-money/). 130 | 131 | {% include img.html src="open-call.webp" caption="Streamed 10 years ago." url="https://www.youtube.com/watch?v=p1E-svVd9Xc" %} 132 | 133 | The roots go back much further. The term [emotional bandwidth is Mitch Kapor's, 134 | from 1995](https://tricycle.org/magazine/emotional-bandwidth/). Mitch was 135 | wrestling with the tension between the promise of the early Internet to bring 136 | people together, and the reality of the flamewars and conflict that we ended up 137 | in, even back then. "The answer," he wrote, "may lie in increasing the emotional 138 | bandwidth of communication." But he could only dream of the future we're living 139 | in today: 140 | 141 | > As telephone systems are upgraded and cable television becomes an access path 142 | > to the Internet, higher speed connections capable of carrying voice and face 143 | > will become much more common. 144 | 145 | We're pretty accustomed to dropping to a call in our work lives, inside our 146 | companies. It's great progress that we're starting to see more of this in 147 | public life as well. Hopefully someday national presidential politics will 148 | catch up. ;-) 149 | -------------------------------------------------------------------------------- /_posts/2024-11-04-thank-you-ben.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Thank You, Ben 3 | excerpt: Ben Vinegar hired me into Sentry four years ago, and now he is moving on. Allow me a few words. 4 | bluesky: https://bsky.app/profile/chadwhitacre.com/post/3la57ptdk5n2w 5 | --- 6 | 7 | One of my favorite books on leadership is The Captain 9 | Class, by Sam Walker. It 10 | is a delightfully thorough study of the top sports dynasties of all time. Based 11 | on a number of criteria—teams of 5+ players, competing at a national or 12 | international level, winning 4+ annual championships in a row—it turns out 13 | there are only 17 truly elite teams in sports history. 14 | 15 | The thesis of the book is that it's not a star player or a brilliant coach that 16 | sets legendary teams apart. No, it's rather the presence of an exceptional 17 | **captain**, a player with an extreme drive to win, who commands the respect of his 18 | or her teammates and works relentlessly to level up everyone else, in ways that 19 | the crowd never sees. 20 | 21 | Ben Vinegar was not the founder or CEO or CTO of 22 | Team Sentry. He was the captain. 23 | 24 | Thanks for hiring me in, Ben, and for a great run. All the best on what's next. 25 | 🫡 💃 26 | -------------------------------------------------------------------------------- /_posts/2025-02-01-point-four-of-elons-fork-is-the-scary-one.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: "Point Four of Elon's Fork is the Scary One" 3 | excerpt: "The concept of a 'fork' comes from Open Source software, and it means a schism." 4 | --- 5 | 6 | Have you read Elon's "[Fork in the Road](https://www.opm.gov/fork)" email? This 7 | is the one where he starts doing to the United States government what he did to 8 | Twitter. 9 | 10 | Honestly, I'm kind of in the camp that Twitter as a software product is as good 11 | or better now than it was before, with an order of magnitude less staff. 12 | Certainly the [chicken-little about its impending catastrophic 13 | failure](https://www.zdnet.com/article/why-twitter-will-fail-shortly/) was 14 | wrong. Elon _does_ seem (to this casual observer) to have made it much more 15 | efficient, and I have no reason to doubt he can do the same with the federal 16 | government. Maybe that's not so bad. 17 | 18 | However, only three of the four points in Fork in the Road—"Return to Office," 19 | "Performance culture," and "More streamlined and flexible workforce"—are about 20 | efficiency. The fourth point, entitled "Enhanced standards of conduct," is the 21 | one that seems to indicate the most dramatic, far-reaching change (emphasis 22 | mine): 23 | 24 | > **The federal workforce should be comprised of employees who are reliable, 25 | loyal, trustworthy**, and who strive for excellence in their daily work. 26 | Employees will be subject to enhanced standards of suitability and conduct as 27 | we move forward. Employees who engage in unlawful behavior **or other 28 | misconduct** will be prioritized for appropriate investigation and discipline, 29 | including termination. 30 | 31 | If the referent of loyalty were the Constitution, that would be one thing. To 32 | this casual observer, the referent is Trump. If future historians come to see 33 | Trump as one who shifted America away from the [rule of 34 | law](https://en.wikipedia.org/wiki/Rule_of_law), point four of "Fork in the 35 | Road" may be a key text. 36 | 37 | Elon's choice of the word "fork" is quite interesting. [A fork in the context 38 | of an Open Source software 39 | project](https://en.wikipedia.org/wiki/Fork_(software_development)) is a split 40 | in the software project community (emphasis mine): 41 | 42 | > In software engineering, a project fork happens when developers take a copy 43 | of source code from one software package and start independent development on 44 | it, creating a distinct and separate piece of software. The term often implies 45 | not merely a development branch, but also a split in the developer community; 46 | as such, it is **a form of schism**. 47 | 48 | I don't expect Trump to have known this meaning of the word. Perhaps Elon 49 | explained it to him. 50 | 51 | Empires don't last forever. [Neither do 52 | republics](/2025/the-birth-of-the-american-empire/). 53 | -------------------------------------------------------------------------------- /_posts/2025-02-03-the-birth-of-the-american-empire.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: The Birth of the American Empire 3 | excerpt: We may have just witnessed the end of the Republic, with the accession of Augustus Musk. 4 | --- 5 | 6 | Yesterday I [commented on point 7 | four](/2025/point-four-of-elons-fork-is-the-scary-one/) of Elon Musk's "[Fork 8 | in the Road](https://www.opm.gov/fork)" document. 9 | "[Fork](https://en.wikipedia.org/wiki/Fork_(software_development))" is a 10 | technical term in Open Source software that refers to a schism in the community 11 | behind a project. 12 | [Unfolding](https://www.reuters.com/world/us/musk-aides-lock-government-workers-out-computer-systems-us-agency-sources-say-2025-01-31/) 13 | [developments](https://www.washingtonpost.com/business/2025/01/31/elon-musk-treasury-department-payment-systems/) 14 | [suggest](https://www.wired.com/story/elon-musk-government-young-engineers/) 15 | that point four may indeed signal [the end of the rule of 16 | law](/2025/point-four-of-elons-fork-is-the-scary-one/) in the United States of 17 | America. What comes after? Empire. 18 | 19 | ## Hail Caesar 20 | 21 | Elon thinks about the Roman Empire [every 22 | day](https://www.reddit.com/r/EnoughMuskSpam/comments/16k06r1/elon_says_he_thinks_about_the_roman_empire_every/). 23 | His supporters call his controversial gesture at the inauguration [a Roman 24 | salute](https://theconversation.com/elon-musk-and-the-history-of-the-roman-salute-248032). 25 | 26 | {% include img.html src="hail-caesar.webp" caption="Hail Caesar!" %} 27 | 28 | The [Roman Republic](https://en.wikipedia.org/wiki/Roman_Republic) gave way to 29 | the [Roman Empire](https://en.wikipedia.org/wiki/Roman_Empire) in 27 BC, when 30 | Octavian took the title [Augustus 31 | Caesar](https://en.wikipedia.org/wiki/Augustus): 32 | 33 | > The reign of Augustus initiated an imperial cult, as well as an era of 34 | > imperial peace (the _Pax Romana_ or _Pax Augusta_) in which the Roman world 35 | > was largely free of armed conflict. 36 | 37 | Elon's Twitter bio once read "[Imperator of 38 | Mars](https://www.newsweek.com/elon-musk-imperator-mars-meaning-definition-twitter-bio-1582768)." 39 | Imperator is a "title conferred by the Roman senate on Julius Caesar and 40 | Augustus and adopted by later successors." 41 | 42 | I strongly suspect that in Elon's mind, January 20, 2025 was the end of the 43 | American Republic, and the birth of the American Empire. I suspect he thinks of 44 | himself as having forked the United States as Octavian did Rome. 45 | 46 | ## So What? 47 | 48 | If Elon has essentially succeeded in forking America into an empire under his 49 | Caesar-ship, what does it mean? Here are a few brief comments on what may turn 50 | out to have been one of the pivotal moments of human history: 51 | 52 | 1. Many will accept Musk's rise to power as good news. 53 | 54 | 1. I don't see this change being forcibly reverted in the short term. The next 55 | election will be a critical test. 56 | 57 | 1. [Unlike Rome](https://en.wikipedia.org/wiki/War_of_Actium), this transition 58 | happened without an overt war (so far), which is good. 59 | 60 | 1. Elon seems to me likely to succeed in making the U.S. more efficient and 61 | effective, based on his success with Twitter and his other companies. 62 | 63 | 1. Once consolidated, Elon is likely to use his new power primarily to pursue 64 | his [interplanetary 65 | agenda](https://nss.org/elon-musk-making-humans-a-multiplanetary-species/). 66 | 67 | 1. In empires, succession is often inefficient. Clearly Musk has positioned 68 | himself to succeed (preempt?) Trump. Who succeeds Musk? According to what 69 | process? 70 | 71 | 1. It hasn't happened yet, but Elon indicated he would return Twitter to a public 72 | company after reorganizing it as X. Is there a world in which he returns the 73 | U.S. to a republic once he has run his course? 74 | 75 | 1. This is a salient time to worship a deity other than Caesar. 76 | -------------------------------------------------------------------------------- /_posts/2025-02-25-luke-missed-the-memo.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Luke Missed the Memo 3 | excerpt: The OSI is not being arbitrary and capricious. 4 | bluesky: https://bsky.app/profile/chadwhitacre.com/post/3liz2htc3sc2x 5 | --- 6 | 7 | This is a response to Luke Faraone's post, "[I'm running for the OSI board... 8 | maybe](https://blog.luke.wf/2025/02/im-running-for-osi-board-maybe.html)." 9 | ([HN](https://news.ycombinator.com/item?id=43121920), 10 | [X](https://x.com/lfaraone/status/1892719576137294167), 11 | [bsky](https://bsky.app/profile/lwf.bsky.social/post/3linixuf7s22e)). 12 | I tried 13 | leaving this as a comment on Luke's blog, but only members of the blog may post 14 | comments. 15 | 16 | And yes I'm running. [Vote March 7](https://opensource.org/blog/get-ready-to-vote-for-osis-board-of-directors-in-2025)! :-) 17 | 18 |
19 | Update 20 | OSI has addressed the deadline issue. 21 |
22 | 23 | ### My Comment for Luke's Blog 24 | 25 | I received the following email from OSI on February 14. It looks to me like a 26 | generic email sent to the whole membership list, and the timezone is clearly 27 | defined. Were you a member of OSI on February 14? Did you receive this email? 28 | 29 | (Your post _does_ explain some of Bradley's questions on the call. ;-) 30 | 31 | ---- 32 | 33 | From: OSI Team 34 | Subject: Your chance to shape the future of Open Source – self-nominate today! 35 | 36 | Dear Chad, 37 | 38 | Time is running out! Nominations for the OSI Board of Directors close soon, and 39 | we want you to take part. If you’re passionate about Open Source and ready to 40 | lead, consider nominating yourself. 41 | 42 | Nomination Deadline: Monday 11:59 pm UTC *(3:59 pm PST / 6:59 pm EST / 12:59 am 43 | CET [Tuesday] / 7:59 am CST [Tuesday])* 44 | 45 | As a full member of OSI, your vision and leadership can drive innovation and 46 | create lasting impact in our community. 47 | 48 | [Learn 49 | more](https://opensource.org/about/board-of-directors/elections/individual) 50 | about the nomination process and seize this opportunity to help shape the 51 | future of Open Source! 52 | 53 | 54 | 55 | Best regards, 56 | 57 | OSI Election Committee 58 | 59 | -- 60 | 61 | 8605 Santa Monica Blvd 62 | PMB 63639 63 | West Hollywood, California 90069-4109 64 | United States 65 | 66 | [Stop receiving](https://members.opensource.org/civicrm/mailing/unsubscribe/) these emails. 67 | -------------------------------------------------------------------------------- /_posts/2025-02-27-how-to-vote-in-the-2025-osi-election.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: How to Vote in the 2025 OSI Election 3 | excerpt: Join the Open Source Initiative (OSI) before March 7. Watch your email for a link. Vote before March 17. 4 | --- 5 | 6 | I'm running in the [Open Source Initiative (OSI) Board of Directors 7 | election](https://opensource.org/blog/get-ready-to-vote-for-osis-board-of-directors-in-2025). 8 | I intend to say more next week about _why_ you should vote and what I am bringing to 9 | the table. For now I wanted to get the word out about _how_ to vote. 10 | 11 | {% include youtube.html video_id="e20ShFBD1fg" %} 12 | 13 | Voting is open to all [dues-paying 14 | members](https://members.opensource.org/join/) of the OSI. There are two "full" 15 | (aka paid) membership levels: 16 | 17 | 1. Supporting for $50/year, and 18 | 2. Professional for $300/yr. 19 | 20 | There is a Basic tier that's free but doesn't carry voting privileges. The link 21 | to vote will go out in email on March 7, and **voting closes on March 17 at 5:00 22 | UTC**. The candidates should be announced tomorrow (February 28) and the results 23 | should be announced by March 24. 24 | 25 | If you care about Open Source—whether Open Source AI, or open-washing, or [the 26 | Open Source sustainability 27 | crisis](https://openpath.quest/2024/the-open-source-sustainability-crisis/), or 28 | any of a number of other issues—[join OSI before March 29 | 7](https://members.opensource.org/join/) and watch your email to vote in the 30 | election by March 17. Let's move Open Source forward together! 31 | -------------------------------------------------------------------------------- /assets/Czarin-Medium.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chadwhitacre/openpath/7c807df966f05f79ebb8f1f172a4556857d337dd/assets/Czarin-Medium.otf -------------------------------------------------------------------------------- /assets/banner.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chadwhitacre/openpath/7c807df966f05f79ebb8f1f172a4556857d337dd/assets/banner.webp -------------------------------------------------------------------------------- /assets/chadwhitacre.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chadwhitacre/openpath/7c807df966f05f79ebb8f1f172a4556857d337dd/assets/chadwhitacre.jpg -------------------------------------------------------------------------------- /assets/email-header.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chadwhitacre/openpath/7c807df966f05f79ebb8f1f172a4556857d337dd/assets/email-header.jpg -------------------------------------------------------------------------------- /assets/hero.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chadwhitacre/openpath/7c807df966f05f79ebb8f1f172a4556857d337dd/assets/hero.webp -------------------------------------------------------------------------------- /assets/replies.js: -------------------------------------------------------------------------------- 1 | // Heavily modified from https://github.com/czue/bluesky-comments under MIT. 2 | // This file is also under MIT. 3 | 4 | const ICONS = { 5 | bsky: ``, 6 | heart: ``, 7 | repost: ``, 8 | reply: `` 9 | }; 10 | 11 | class BlueskyReplies { 12 | constructor(selector, httpUri, atUri) { 13 | this.container = document.querySelector(selector); 14 | this.uri = atUri; 15 | this.httpUri = httpUri; 16 | this.visibleCount = 3; 17 | this.thread = null; 18 | this.init(); 19 | } 20 | 21 | async init() { 22 | try { 23 | this.renderMessage('Loading ...'); 24 | await this.fetchThreadData(); 25 | this.render(); 26 | } catch (err) { 27 | this.renderMessage(`Failed to load replies for ${this.httpUri}: ${err.message}`); 28 | } 29 | } 30 | 31 | renderMessage(message) { 32 | this.container.innerHTML = `
${message}
`; 33 | } 34 | 35 | async fetchThreadData() { 36 | try { 37 | const params = new URLSearchParams({ uri: this.uri }); 38 | const res = await fetch( 39 | "https://public.api.bsky.app/xrpc/app.bsky.feed.getPostThread?" + params.toString(), 40 | { 41 | method: 'GET', 42 | headers: { "Accept": "application/json" }, 43 | cache: "no-store", 44 | } 45 | ); 46 | 47 | if (!res.ok) { 48 | const errorData = await res.json(); 49 | throw new Error(`API Error: ${errorData.message || 'Unknown error'} (${res.status})`); 50 | } 51 | 52 | const data = await res.json(); 53 | if (!data || !data.thread) { 54 | throw new Error('Invalid response format from API'); 55 | } 56 | this.thread = data.thread; 57 | } catch (error) { 58 | throw new Error(`Failed to fetch thread: ${error.message}`); 59 | } 60 | } 61 | 62 | createReply(reply) { 63 | const author = reply.post.author; 64 | const authorLink = `https://bsky.app/profile/${author.did}`; 65 | const postLink = `${authorLink}/post/${reply.post.uri.split("/").pop()}`; 66 | const el = document.createElement('div'); 67 | el.className = 'bsky-reply'; 68 | el.innerHTML = ` 69 | 70 | ${reply.post.record.text} 71 |
72 | ${author.avatar 73 | ? `avatar` 74 | : `
` 75 | } 76 | ${author.displayName ?? author.handle} 77 | ${ICONS.reply} ${reply.post.replyCount ?? 0} 78 | ${ICONS.repost} ${reply.post.repostCount ?? 0} 79 | ${ICONS.heart} ${reply.post.likeCount ?? 0} 80 |
81 |
82 | `; 83 | 84 | // Recursively append replies. 85 | if (reply.replies && reply.replies.length > 0) { 86 | const repliesContainer = document.createElement('div'); 87 | repliesContainer.className = 'bsky-replies'; 88 | 89 | reply.replies 90 | .sort((a, b) => (b.post.likeCount ?? 0) - (a.post.likeCount ?? 0)) 91 | .forEach(reply => { 92 | if (this.isThreadViewPost(reply)) { 93 | repliesContainer.appendChild(this.createReply(reply)); 94 | } 95 | }); 96 | 97 | el.appendChild(repliesContainer); 98 | } 99 | 100 | return el; 101 | } 102 | 103 | isThreadViewPost(post) { 104 | return post && post.post && post.post.uri && post.post.author; 105 | } 106 | 107 | render() { 108 | this.container.innerHTML = ''; 109 | 110 | const topMeta = document.createElement('a'); 111 | topMeta.className = 'bsky-meta bsky-top'; 112 | topMeta.href = this.httpUri; 113 | const stats = [ 114 | { icon: 'heart', count: this.thread.post.likeCount ?? 0, label: 'likes' }, 115 | { icon: 'repost', count: this.thread.post.repostCount ?? 0, label: 'reposts' }, 116 | { icon: 'reply', count: this.thread.post.replyCount ?? 0, label: 'replies' } 117 | ]; 118 | topMeta.innerHTML = `Comment on ${ICONS['bsky']} Bluesky` + stats.map(stat => ` 119 |
${ICONS[stat.icon]} ${stat.count} ${stat.label}
120 | `).join(''); 121 | 122 | const nested = document.createElement('div'); 123 | if (this.thread.replies) { 124 | const sortedReplies = this.thread.replies 125 | .filter(reply => this.isThreadViewPost(reply)) 126 | .sort((a, b) => (b.post.likeCount ?? 0) - (a.post.likeCount ?? 0)); 127 | 128 | sortedReplies.slice(0, this.visibleCount).forEach(reply => { 129 | nested.appendChild(this.createReply(reply)); 130 | }); 131 | 132 | if (this.visibleCount < sortedReplies.length) { 133 | const loadMoreButton = document.createElement('button'); 134 | loadMoreButton.className = 'bsky-load-more'; 135 | loadMoreButton.textContent = 'Load More Replies'; 136 | loadMoreButton.onclick = () => { 137 | this.visibleCount += 5; 138 | this.render(); 139 | }; 140 | nested.appendChild(loadMoreButton); 141 | } 142 | } 143 | 144 | this.container.append(topMeta, nested); 145 | } 146 | } 147 | 148 | window.initReplies = (selector, httpUri) => { 149 | const match = httpUri.match(/profile\/([\w.]+)\/post\/([\w]+)/); 150 | const [, did, postId] = match; 151 | const atUri = `at://${did}/app.bsky.feed.post/${postId}`; 152 | new BlueskyReplies(selector, httpUri, atUri); 153 | }; 154 | -------------------------------------------------------------------------------- /assets/sentry.svg: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /assets/slice.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chadwhitacre/openpath/7c807df966f05f79ebb8f1f172a4556857d337dd/assets/slice.jpg -------------------------------------------------------------------------------- /assets/social/bluesky.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /assets/social/email.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /assets/social/github.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /assets/social/rss.svg: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /assets/social/x.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /assets/style.scss: -------------------------------------------------------------------------------- 1 | --- 2 | --- 3 | 4 | /*============================================================================== 5 | 6 | Do not capitalize: 7 | 8 | - the articles a, an, and the; 9 | 10 | - the prepositions or adverbs at, by, for, of, in, up, on, and to; 11 | 12 | - and the conjunctions and, as, but, if, or, and nor. 13 | 14 | In effect, this rule means that words of four or more letters are 15 | considered principal words and are capitalized. 16 | 17 | (http://www.publication.com/aylad/capitalization.htm) 18 | 19 | ==============================================================================*/ 20 | 21 | @import url("https://fonts.googleapis.com/css2?family=Work+Sans:ital,wght@0,100..900;1,100..900&display=swap"); 22 | 23 | @font-face { 24 | font-family: Czarin; 25 | src: url("/assets/Czarin-Medium.otf"); 26 | } 27 | 28 | 29 | :root { 30 | --white: #f0eadb; 31 | --black: #283124; 32 | --gray: #797B6B; 33 | --green: #404e3a; 34 | --yellow: #ffff90; 35 | } 36 | 37 | * { 38 | margin: 0; 39 | padding: 0; 40 | box-sizing: border-box; 41 | } 42 | 43 | body { 44 | font: 45 | normal 14pt/150% "Work Sans", 46 | sans-serif; 47 | } 48 | 49 | .content { 50 | display: block; 51 | max-width: 640px; 52 | margin: 0 auto; 53 | padding: 80px 40px; 54 | overflow: auto; 55 | } 56 | 57 | h1 { 58 | font: normal 26pt/115% Czarin; 59 | text-transform: uppercase; 60 | } 61 | h2 { 62 | font: normal 26pt/115% Czarin; 63 | padding: 42pt 0 9pt; 64 | &.title { 65 | padding: 0; 66 | } 67 | } 68 | h3 { 69 | font: normal 16pt/130% "Work Sans"; 70 | padding: 32pt 0 7pt; 71 | h2 + & { 72 | padding-top: 0; 73 | } 74 | } 75 | h4 { 76 | font: bold 12pt/150% "Work Sans"; 77 | text-transform: uppercase; 78 | padding: 32pt 0 7pt; 79 | h3 + & { 80 | padding-top: 0; 81 | } 82 | } 83 | ol + p, 84 | ul + p, 85 | p + p, 86 | div + p, 87 | ol + div, 88 | ul + div, 89 | p + div { 90 | padding: 16pt 0 0; 91 | } 92 | blockquote { 93 | border-left: 1px solid var(--black); 94 | margin: 16pt 0; 95 | padding: 0 0 0 9pt; 96 | & > ol, 97 | & > ul { 98 | padding-top: 0; 99 | } 100 | } 101 | 102 | hr { 103 | border: 0; 104 | margin: 24pt 0 24pt 49%; 105 | &::before { 106 | content: "❧"; 107 | color: var(--green); 108 | } 109 | } 110 | 111 | .meta, 112 | .disclosure { 113 | color: var(--green); 114 | font-size: 10pt; 115 | line-height: 130%; 116 | } 117 | .disclosure { 118 | text-align: right; 119 | margin: 12pt 0; 120 | } 121 | .series { 122 | ul { 123 | margin: 0; 124 | padding: 0; 125 | li { 126 | margin: 0; 127 | padding: 0; 128 | list-style: none; 129 | &::before { 130 | visibility: hidden; 131 | content: "▶"; 132 | font-size: 8pt; 133 | } 134 | &.current::before { 135 | visibility: visible; 136 | } 137 | a { 138 | text-decoration: none; 139 | &::hover { 140 | text-decoration: underline; 141 | } 142 | } 143 | } 144 | } 145 | } 146 | .draft { 147 | font: 148 | normal 18pt/120% "Comic Sans MS", 149 | serif; 150 | color: red; 151 | text-transform: uppercase; 152 | margin: 0 0 36pt; 153 | } 154 | 155 | a.read-more { 156 | display: block; 157 | margin: 12pt 0 0; 158 | float: right; 159 | } 160 | 161 | b { 162 | font-weight: 537; 163 | } 164 | strong { 165 | font-weight: normal; 166 | background: var(--yellow); 167 | } 168 | 169 | img.float-left { 170 | float: left; 171 | width: 33% !important; 172 | margin: 6px 40px 6px 0 !important; 173 | border-radius: 10px; 174 | border: 2px solid var(--green); 175 | } 176 | 177 | ul, 178 | ol { 179 | padding: 8pt 0 0 16pt; 180 | ul, 181 | ol { 182 | padding-top: 0; 183 | } 184 | li { 185 | padding: 8pt 0 0; 186 | } 187 | } 188 | 189 | .youtube { 190 | /* https://www.w3schools.com/howto/howto_css_aspect_ratio.asp */ 191 | 192 | .outer { 193 | width: 100%; 194 | position: relative; 195 | 196 | &.aspect-ratio-16-9 { 197 | padding-top: 56.25%; 198 | } 199 | .inner { 200 | position: absolute; 201 | top: 0; 202 | left: 0; 203 | bottom: 0; 204 | right: 0; 205 | 206 | iframe { 207 | width: 100%; 208 | height: 100%; 209 | border-radius: 10px; 210 | } 211 | } 212 | } 213 | } 214 | 215 | form.buttondown { 216 | text-align: center; 217 | margin: 16pt 0; 218 | 219 | input { 220 | font: 12pt/18pt "Work Sans"; 221 | padding: 3pt 12pt; 222 | } 223 | 224 | button { 225 | background: var(--white); 226 | color: var(--black); 227 | font: 12pt/18pt "Work Sans"; 228 | padding: 3pt 12pt; 229 | border: 1px solid var(--white); 230 | border-radius: 4px; 231 | margin: 6pt 0 0 3pt; 232 | cursor: pointer; 233 | } 234 | .powered-by { 235 | font-size: 10pt; 236 | } 237 | } 238 | 239 | header { 240 | display: flex; 241 | align-items: center; 242 | background: radial-gradient( 243 | farthest-corner at 38.2% 61.8%, 244 | rgba(240, 234, 219, 1), 245 | rgba(240, 234, 219, 0) 100% 246 | ), url("/assets/hero.webp"), #efebdd; 247 | background-size: cover; 248 | background-repeat: no-repeat; 249 | background-position: center bottom; 250 | .content { 251 | flex: 1; 252 | overflow: visible; 253 | h1, 254 | h2 { 255 | margin: 0; 256 | padding: 0; 257 | } 258 | h1 { 259 | span { 260 | white-space: nowrap; /* work around zero-width   in font */ 261 | } 262 | } 263 | h2 { 264 | color: var(--gray); 265 | } 266 | } 267 | 268 | a { 269 | color: var(--black) !important; 270 | text-decoration: none; 271 | } 272 | h2 a { 273 | text-decoration: underline; 274 | } 275 | } 276 | 277 | .homepage { 278 | header { 279 | min-height: 50vw; /* hero is 2:1 ratio */ 280 | color: var(--black); 281 | 282 | .content { 283 | h1 { 284 | font-size: 72pt; 285 | } 286 | 287 | h2 { 288 | font-size: 36pt; 289 | padding-top: 9pt; 290 | } 291 | } 292 | .youtube { 293 | margin-top: 18pt; 294 | } 295 | } 296 | 297 | section { 298 | background: var(--white); 299 | color: var(--black); 300 | } 301 | 302 | .intro { 303 | background: var(--black); 304 | color: var(--white); 305 | img { 306 | border-color: var(--white); 307 | } 308 | 309 | a { 310 | color: var(--white); 311 | &.sentry { 312 | &::before { 313 | content: " "; 314 | white-space: pre; 315 | } 316 | display: inline-block; 317 | background: no-repeat url("/assets/sentry.svg"); 318 | background-size: auto 50%; 319 | background-position: left 45%; 320 | } 321 | } 322 | } 323 | 324 | .browse-all { 325 | margin-top: 18pt; 326 | text-align: right; 327 | } 328 | } 329 | 330 | .blog-post-listing { 331 | h3 { 332 | padding: 18pt 0 6pt; 333 | } 334 | &:first-of-type { 335 | h3 { 336 | padding-top: 0; 337 | } 338 | } 339 | } 340 | 341 | .inside-page { 342 | background: url("/assets/banner.webp") var(--white); 343 | background-color: var(--black); 344 | background-size: 100vw; 345 | background-repeat: no-repeat; 346 | background-attachment: fixed; 347 | 348 | header { 349 | height: 17.6432291666667vw; /* goofy aspect ratio on banner.webp */ 350 | 351 | .content { 352 | h1 { 353 | font-size: 26pt; 354 | } 355 | } 356 | } 357 | article { 358 | background: var(--white); 359 | color: var(--black); 360 | .tldr, 361 | .series, 362 | .update, 363 | .replies { 364 | display: block; 365 | position: relative; 366 | span { 367 | text-transform: uppercase; 368 | font-size: 8pt; 369 | line-height: 8pt; 370 | display: block; 371 | position: absolute; 372 | top: 18pt; 373 | left: 11pt; 374 | } 375 | margin: 12pt 0 0; 376 | padding: 12pt 12pt 12pt 50pt; 377 | border-radius: 6pt; 378 | 379 | &.tldr { 380 | background: var(--green); 381 | } 382 | &.replies { 383 | margin-top: 42pt; 384 | background: var(--green); 385 | } 386 | &.series { 387 | background: var(--black); 388 | } 389 | &.update { 390 | background: var(--black); 391 | } 392 | color: var(--white); 393 | span { 394 | color: var(--yellow); 395 | } 396 | a { 397 | color: var(--white); 398 | } 399 | blockquote { 400 | border-left-color: var(--white); 401 | } 402 | } 403 | .img { 404 | text-decoration: none; 405 | &:hover { 406 | text-decoration: underline; 407 | } 408 | img { 409 | &.landscape { 410 | width: 100%; 411 | } 412 | &.portrait { 413 | width: 60%; 414 | } 415 | margin: 8pt auto; 416 | display: block; 417 | } 418 | .caption { 419 | color: var(--green); 420 | font-size: 10pt; 421 | line-height: 130%; 422 | text-align: right; 423 | } 424 | } 425 | } 426 | } 427 | 428 | footer { 429 | background: var(--black); 430 | color: var(--white); 431 | 432 | a { 433 | color: var(--white); 434 | } 435 | 436 | p { 437 | text-align: center; 438 | } 439 | 440 | ul { 441 | width: 60%; 442 | min-width: 192px; 443 | columns: 5; /* should match number of icons */ 444 | margin: 0 auto; 445 | padding: 0; 446 | 447 | li { 448 | display: block; 449 | list-style: none; 450 | 451 | img { 452 | display: block; 453 | margin: 0 auto; 454 | height: 32px; 455 | } 456 | } 457 | } 458 | } 459 | 460 | @media (max-width: 640px) { 461 | .homepage header { 462 | .content { 463 | h1 { 464 | font-size: 14vw; 465 | } 466 | h2 { 467 | font-size: 7vw; 468 | } 469 | } 470 | } 471 | body { 472 | font-size: 15pt; 473 | } 474 | img.float-left { 475 | margin-right: 25px; 476 | } 477 | .content { 478 | padding: 40px; 479 | } 480 | } 481 | @media (max-width: 440px) { 482 | body { 483 | font-size: 13pt; 484 | } 485 | footer ul li img { 486 | height: 24px; 487 | } 488 | } 489 | 490 | #too-small { 491 | display: none; 492 | width: 100vw; 493 | height: 100vh; 494 | background: var(--white); 495 | padding: 49vh 0 0 49vw; 496 | } 497 | @media (max-width: 319px) { 498 | header, 499 | article, 500 | footer { 501 | display: none; 502 | } 503 | #too-small { 504 | display: block; 505 | } 506 | } 507 | 508 | 509 | .bsky { 510 | .bsky-message { 511 | font-size: 10pt; 512 | position: relative; 513 | top: -1pt; 514 | } 515 | .bsky-meta { 516 | opacity: 0.5; 517 | &:hover { 518 | opacity: 1.0; 519 | } 520 | font-size: 10pt; 521 | line-height: 10pt; 522 | padding: 3pt 0; 523 | &.bsky-top { 524 | position: relative; 525 | top: -2pt; 526 | } 527 | text-decoration: none; 528 | .bsky-group { 529 | display: inline-block; 530 | white-space: nowrap; 531 | } 532 | .bsky-icon { 533 | width: 12pt; 534 | height: 12pt; 535 | } 536 | .bsky-avatar { 537 | height: 12pt; 538 | width: 12pt; 539 | border-radius: 9999px; 540 | border: 1px solid var(--white); 541 | } 542 | img, svg { 543 | position: relative; 544 | top: 2.5pt; 545 | } 546 | svg { 547 | margin-left: 3pt; 548 | } 549 | } 550 | .bsky-reply { 551 | margin: 12pt 0; 552 | .bsky-text { 553 | text-decoration: none; 554 | } 555 | .bsky-replies { 556 | padding-left: 16pt; 557 | } 558 | } 559 | 560 | .bsky-load-more { 561 | background: var(--white); 562 | color: var(--black); 563 | font: 12pt/18pt "Work Sans"; 564 | padding: 3pt 12pt; 565 | border: 1px solid var(--white); 566 | border-radius: 4px; 567 | cursor: pointer; 568 | margin: 40pt 0; 569 | display: block; 570 | } 571 | } 572 | -------------------------------------------------------------------------------- /bin/new: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env zsh 2 | if [ "$#" -eq 0 ]; then 3 | echo "What title?" 4 | exit 5 | fi 6 | 7 | title="$@" 8 | year=$(date +"%Y") 9 | slug=$(echo "$title" | tr '[:upper:]' '[:lower:]' | tr ' ' '-') 10 | post_dir="$year/$slug" 11 | mkdir -p "$post_dir" 12 | 13 | filename="$post_dir/index.md" 14 | echo "---" > $filename 15 | echo "title: $title" >> $filename 16 | echo "excerpt: Foo." >> $filename 17 | echo "noindex: true" >> $filename 18 | echo "---" >> $filename 19 | echo '{% include img.html src="social.webp" caption="" url="" %}' >> $filename 20 | 21 | cp social.webp "$post_dir/" 22 | git add "$post_dir" 23 | -------------------------------------------------------------------------------- /bin/pub: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env zsh 2 | if [ "$#" -eq 0 ]; then 3 | echo "What path?" 4 | exit 5 | fi 6 | post_dir="$1" 7 | date_=$(date +"%Y-%m-%d") 8 | slug=$(echo $post_dir | cut -d '/' -f 2) 9 | filename="_posts/$date_-$slug.md" 10 | mv "$post_dir/index.md" "$filename" 11 | sed -i '' '4d' "$filename" 12 | -------------------------------------------------------------------------------- /blog.html: -------------------------------------------------------------------------------- 1 | --- 2 | layout: default 3 | title: "Blog" 4 | excerpt: "Browse all posts from the Open Path blog." 5 | --- 6 | 7 |
8 |

All Blog Posts

9 | {% include posts.html posts=site.posts enumerate=true %} 10 |
11 | -------------------------------------------------------------------------------- /index.html: -------------------------------------------------------------------------------- 1 | --- 2 | layout: default 3 | # For page meta, keep in sync with _config.yml 4 | title: "Open Path by Chad Whitacre" 5 | excerpt: "Open Source is a gift that's greater than we realize." 6 | --- 7 | 8 |
9 |
10 | headshot of Chad Whitacre 15 | 16 |

17 | Greetings! My name is 18 | Chad Whitacre, and I'm Head of 19 | Open Source at 20 | Sentry. 21 |

22 | 23 |

24 | Open Path is a 25 | show about my 26 | quest to see if the gift of Open Source can heal the world. 27 |

28 | 29 |

Thanks for visiting! 💃

30 |
31 |
32 | 33 |
34 |
35 |

From the Blog

36 | {% assign featured_posts = site.posts | sort: "homepage_rank" | where_exp: 37 | "p", "p.homepage_rank > -1" %} {% include posts.html posts=featured_posts %} 38 | 39 |
40 |
41 | -------------------------------------------------------------------------------- /social.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chadwhitacre/openpath/7c807df966f05f79ebb8f1f172a4556857d337dd/social.webp --------------------------------------------------------------------------------