From 5b064048b090e31f7b6137c39adaf422b43b8729 Mon Sep 17 00:00:00 2001 From: Vlad-Stefan Harbuz Date: Thu, 31 Oct 2024 19:05:06 +0000 Subject: [PATCH 1/6] Add blog --- public/images/authors/chad.webp | Bin 0 -> 13272 bytes public/images/authors/cramer.webp | Bin 0 -> 4274 bytes public/images/authors/vlad.webp | Bin 0 -> 13940 bytes src/components/ArticleList.astro | 66 ++++++ src/components/Button.astro | 22 -- src/components/LeaderboardMember.astro | 2 +- src/content/articles/join-the-pledge.md | 101 +++++++++ .../the-open-source-sustainability-crisis.md | 211 +++++++++++++++++ ...he-philosophy-of-the-open-source-pledge.md | 213 ++++++++++++++++++ src/content/config.ts | 48 +--- src/layouts/Layout.astro | 25 ++ src/memberData/common.ts | 2 +- src/memberFormatting.ts | 2 +- src/pages/articles/[id].astro | 108 +++++++++ src/pages/articles/index.astro | 43 ++++ src/pages/join.astro | 4 +- src/pages/members/[id].astro | 2 +- src/schemas/articles.ts | 13 ++ src/schemas/members.ts | 39 ++++ 19 files changed, 833 insertions(+), 68 deletions(-) create mode 100644 public/images/authors/chad.webp create mode 100644 public/images/authors/cramer.webp create mode 100644 public/images/authors/vlad.webp create mode 100644 src/components/ArticleList.astro create mode 100644 src/content/articles/join-the-pledge.md create mode 100644 src/content/articles/the-open-source-sustainability-crisis.md create mode 100644 src/content/articles/the-philosophy-of-the-open-source-pledge.md create mode 100644 src/pages/articles/[id].astro create mode 100644 src/pages/articles/index.astro create mode 100644 src/schemas/articles.ts create mode 100644 src/schemas/members.ts diff --git a/public/images/authors/chad.webp b/public/images/authors/chad.webp new file mode 100644 index 0000000000000000000000000000000000000000..0753e09aa23c0ec499f66d1a5e7b4a5942c1f7cd GIT binary patch literal 13272 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 z zHlgwTmeXL%%RrWhmr=9aXA2HEX^Ufz+Mn&=Fn#H49FEeQX`23xN9tro)jC?cu72q4 z2F#fUYVj_=!Z+>cDtwmojBYu>-&WLR>L6Iy%KoQQpQ!{p;;ouVo40px&q%`V=;hAF zGr{1l_SXf)QR0tH-+irhPGxCpJC%3Z)-GKjn?IS5jubAXe=TbTaVh!f&lzJgz*9P^ zCl(S3ER4Re!asF2FID(dbjXroI7Avx-qRH@Sq*&Xs$HB%9(|9cXL_;Evt<2b z^jcjN88Kf}Zv>YfX#-1y&$P1158YeMaI(KhQ!d8O@f-^&kEWYN*qV0}!pWicHYTChCe!fpH;=2RwvO^g)yo)Wz`XEE!I`uG`) z*7UjP@f&9s0}~Uw-!8dQo+p=Fr?tOz@hTSQ#1xGt+GA;DeiK{9Rlj*Ablur6k~5(g zPf8zwMD)pFy7~ad(pU4;OTf8%{1rr9Fy@n4*s1b;^mY@c-|8Cy(hM%?Udu!)!Y94 z2^=^@VZx#=gYk{MIZK%Fd6uisxzv7)(-q$&eU(a41~JUHfy%#i7W7>j)i&}vaellH z7H?5*l!+=S220GAIGM`&q;%ZvPc=?@SDYZ~j_p>veOzlr%q90! ZmBmrB4u=lElAonY9(emS3;z1g{{xpBOy&Rp literal 0 HcmV?d00001 diff --git a/public/images/authors/cramer.webp b/public/images/authors/cramer.webp new file mode 100644 index 0000000000000000000000000000000000000000..f6f4b242d36c97efd6d022b93afed1241e6346f0 GIT binary patch literal 4274 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 Ucm1Z6mLC8sfB*mh000000MwIN1poj5 literal 0 HcmV?d00001 diff --git a/public/images/authors/vlad.webp b/public/images/authors/vlad.webp new file mode 100644 index 0000000000000000000000000000000000000000..88d47f4ea21b61e296ab1a4f7732eb6b92f52b4c GIT binary patch literal 13940 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 +// SPDX-License-Identifier: Apache-2.0 + +import { getCollection } from 'astro:content'; + +const articles = (await getCollection('articles')) + .sort((a, b) => +b.data.publishDate - +a.data.publishDate); +--- + +
+ {articles.map((article) =>
+ +

{article.data.title}

+
+
+ {article.data.authorImageSrc && + + } +
+ {article.data.author} + +
+
+
+
)} +
+ + diff --git a/src/components/Button.astro b/src/components/Button.astro index 2c81516a..9387c233 100644 --- a/src/components/Button.astro +++ b/src/components/Button.astro @@ -13,25 +13,3 @@ const { href } = Astro.props; - - diff --git a/src/components/LeaderboardMember.astro b/src/components/LeaderboardMember.astro index 2f41d426..459d339b 100644 --- a/src/components/LeaderboardMember.astro +++ b/src/components/LeaderboardMember.astro @@ -9,7 +9,7 @@ interface Props { const { member } = Astro.props; import { getDollarsPerDev, fmtCurrency } from '../memberFormatting.ts'; -import type { MemberWithId } from "../content/config.ts"; +import type { MemberWithId } from "../schemas/members.ts"; --- diff --git a/src/content/articles/join-the-pledge.md b/src/content/articles/join-the-pledge.md new file mode 100644 index 00000000..d8efe2ac --- /dev/null +++ b/src/content/articles/join-the-pledge.md @@ -0,0 +1,101 @@ +--- +title: 'Join the Pledge' +excerpt: "Today we officially launch the Open Source Pledge." +author: 'David Cramer' +authorImageSrc: '/images/authors/cramer.webp' +isDraft: false +publishDate: '2024-10-08' +--- + +
+ This post originally appeared + on blog.sentry.io. +
+ +Today we officially launch the Open Source Pledge. + +The Pledge started as an idea some years back: what if we could give back to Open Source on behalf of every employee at +Sentry? We threw around a number of ideas on how we might do that, but none of them seemed like they’d achieve the level +of impact we wanted. We always had two core goals with it: + +1. Pay maintainers, directly. +2. Do it sustainably, and scale it with our growth. + +My earliest thought in this space centered around a form of donation matching. The hope was we could take something like +GitHub Sponsors and match employees' contributions to Open Source maintainers. That posed a number of challenges, but +the biggest risk was participation. Not everyone cares about Open Source (that’s fine!), so donation matching breaks +down with reduced participation. Instead, we decided to do direct funding, driven by a variety of inputs (our dependency +graph, projects people voted on, and guidance from engineering leadership). + +That program is what you’ve [seen from us publicly][sentry-500], running it for three consecutive years. Each year we +increased the funding amount based on Sentry’s own financial growth. It became such a no-brainer within Sentry’s +leadership that we have aggressively increased the funding each year, even beyond our original targets. With the success +of that, we set off to take that program, codify it, and bring it to other companies to see if we could turn this into a +bigger thing. + +## Lead by Example + +As we started talking about this, thinking about how we might turn it into something bigger with more impact, I was +reminded of a number of scenarios that I had personally experienced when speaking with other founders. I regularly speak +at a variety of events, many where Open Source is a key part of the narrative. They’re generally filled with +venture-backed founders telling their story of why Open Source matters to their business, why they believe, and invest +in it. One thing that was commonly expressed by these folks was the sustainability challenges in the industry. “Great!” +I thought, “We have a solution!” + +Not a single one of those founders did anything more than talk about the problem. Sure, maybe they throw a few bucks at +one of the big foundations, and they almost certainly fund investments into their own ecosystem (their commercial +interests). Unfortunately, they rarely do anything measurable that improves the thing they claim to care so deeply +about. Worse, some of these people (often from the largest tech companies), have a laundry list of excuses for why +giving money to people is hard. + +So we decided to try and do something about it. That something is the Open Source Pledge. We don't think it’s the only +solution, nor do we think it’s the only way to give back, but we do believe giving cash money to maintainers is an +appropriate way to show your thanks, to recognize their hard work, the value they create for you. Maybe, just maybe, +we’ll do our small part in encouraging the maintainers to keep putting up with us in the enormous ecosystem we rely on. + +## How to Pledge + +If you’ve made it this far, there are probably two questions you have. + +**First, what does it take to join the Pledge?** You commit (with receipts) to giving 2,000 USD to your dependencies, +per engineer you employ, every single year. + +Sentry has ~135 engineers on staff, meaning our minimum commitment is $270,000 this year. Think about that in the +context that Sentry generates more than $100mm in recurring revenue. It’s a fraction of what we spend in any given +calendar month on digital advertising. It's a pretty modest amount in the grand scheme of things, but it's enough to +have genuine impact. + +**Second, what’s the ROI your company gets from joining?** It’s marketing. It’s your brand. It's top-of-funnel. It’s +software security. It’s free software. It’s Open Source. + +We see ROI in two major ways: brand marketing, and the supply chain. You may care about one more than the other, so +choose whichever helps you get over the finish line. + +From the supply chain angle, you’re encouraging maintainers of the software you use to continue to provide support. +You’re telling them that you value their work, and the contribution is there to encourage them to keep contributing to +it. At the very least, you’re giving them a big thank you, setting the tone for future generations of maintainers. +You’re thanking them for free software. Both of those improve the efficiency of your R&D investments. + +From the brand angle, it's what you make of it. If it's a space you care about, you are putting your money where your +mouth is, and your audience will recognize that. You buy products from brands that you connect with, and if your +customers care about Open Source, you’re giving them one more reason to care about you over your competition. You’re +also putting yourself out there, attracting new eyes to your brand that may not have heard about you before. + +We don’t yet know if the Pledge will be successful, but I’m thrilled with the number of people who have decided to +support the program ([directly with funds][members], and [indirectly with broadcasting and recruiting][endorsements]). I +especially want to thank the people who have put in the hours to really get this off the ground: [Chad Whitacre][chad] +and [Michael Selvidge][michael] from Sentry, as well as [Vlad-Stefan Harbuz][vlad] and [Ethan Arrowood][ethan]. + +While Sentry is funding getting the program off the ground, we’re hoping it lasts well beyond us and turns into +something much more. The industry is in a rocky place these days, and a little bit of effort from the people who can +afford it can go a long way. + +[chad]: https://x.com/chadwhitacre_ +[endorsements]: https://opensourcepledge.com/endorsements/ +[ethan]: https://github.com/Ethan-Arrowood +[members]: https://opensourcepledge.com/members/ +[michael]: https://www.linkedin.com/in/michaelselvidge/ +[sentry-500]: https://blog.sentry.io/we-just-gave-500-000-dollars-to-open-source-maintainers/ +[vlad]: https://vlad.website diff --git a/src/content/articles/the-open-source-sustainability-crisis.md b/src/content/articles/the-open-source-sustainability-crisis.md new file mode 100644 index 00000000..70fd1427 --- /dev/null +++ b/src/content/articles/the-open-source-sustainability-crisis.md @@ -0,0 +1,211 @@ +--- +title: 'The Open Source Sustainability Crisis' +excerpt: "What is Open Source sustainability? Fair pay, no hoops. Why is it in crisis? Burnout." +author: 'Chad Whitacre' +authorImageSrc: '/images/authors/chad.webp' +isDraft: false +publishDate: '2024-01-19' +--- + +
+ This post originally appeared + on openpath.quest. +
+ +Let's get [the XKCD reference](https://xkcd.com/2347/) out of the way, shall we? + +
+ This xkcd comic shows a Jenga-like tower of blocks, illustrating “all modern digital infrastructure”. The structure precariously rests on a small load-bearing block, titled “a project some random person in Nebraska has been thanklessly maintaining since 2003”. +
xkcd #2347 — Dependency
+
+ +Okay, now let's talk about the Open Source sustainability crisis. The purpose +of this post is to define terms. What is Open Source sustainability? Why do I +say it is in crisis? My answers are that sustainability is when people are +getting paid _without jumping through hoops_, and we're in a crisis because +people aren't _and they're burning out_. + +## What is Open Source Sustainability? + +Open Source sustainability is when any smart, motivated person can produce +widely adopted Open Source software and get paid fairly without jumping through +hoops. + +Consider these four examples: + +1. [**Jordan Harband**](https://twitter.com/ljharb) is a smart, motivated + person who produces [widely adopted Open Source + software](https://github.com/ljharb) and [can't get paid fairly without jumping + through + hoops](https://thenewstack.io/open-source-needs-maintainers-but-how-can-they-get-paid/). + +1. [**Josh Goldberg**](https://www.joshuakgoldberg.com/) is a smart, motivated + person who produces [widely adopted Open Source + software](https://github.com/JoshuaKGoldberg) and [can't get paid fairly + without jumping through + hoops](https://twitter.com/JoshuaKGoldberg/status/1737229604442517902). + + + +1. [**Filippo Valsorda**](https://filippo.io/) is a smart, motivated person who + produces [widely adopted Open Source + software](https://github.com/FiloSottile) and can't get paid fairly without + [jumping through hoops](https://words.filippo.io/full-time-maintainer/). + +1. [**Caleb Porzio**](https://calebporzio.com/) is a smart, motivated person + who produces [widely adopted Open Source + software](https://github.com/calebporzio) and can't get [paid + fairly](https://calebporzio.com/i-just-hit-dollar-100000yr-on-github-sponsors-heres-how-i-did-it) + without [jumping through hoops](https://calebporzio.com/sponsorware). + +Those are four people at the top of the Open Source game, clearly illustrating +that we have not reached Open Source sustainability yet. We've hardly begun. +For, sustainability means the opportunity to produce Open Source software and +get paid fairly without jumping through hoops is widely available to many, many +people. + +How many? There are [30 +million](https://www.statista.com/statistics/627312/worldwide-developer-population/) +developers in the world. The largest tech companies each employ on the order of +magnitude of 10,000 to 100,000 of us. The sustainable Open Source community +taken as a whole will be roughly the same size. Open Source is [a sleeping tech +giant](https://gratipay.news/your-company-should-probably-pay-2000-per-person-for-open-source-9205443e209d). + +- 1 person sustained - a glimpse +- 10 people - a glimmer +- 100 - a milestone +- 1,000 - progress +- 10,000 - arrival +- 100,000 - success + +Today we are at zero. + +## What's Wrong With Hoops? + +Hoops are boring. We've had scarcity-based economic relations for millenia. +Open Source is designed for a different world. It presents the first real +opportunity in our society to begin to develop a post-scarcity economic model +at scale. That likely wants unpacking in [a future +post](https://github.com/chadwhitacre/openpath/issues/15). For now, I assert +that our creative use of [well-trodden +paths](https://twitter.com/eigenjoy/status/862412458517962752) is Open Source +_subsidization_, not _sustainability_. + + + +As I define it, Open Source sustainability means no hoops, no "New Role" in +Nate's chart. Self-determined individuals freely produce Open Source software, +and get paid in proportion to their productivity without having to also become +tech influencers, or sell contracts, or any other shenanigans. Those can who +want to. I envision a world where we don't have to. + +## What is the Sustainability Crisis? + +High-profile security kerfuffles such as Heartbleed and Log4Shell often come to +mind when we think about Open Source in crisis. But, while they draw attention +to the sustainability crisis, the crisis is not about security. Microsoft pays +[100,000](https://devblogs.microsoft.com/engineering-at-microsoft/welcome-to-the-engineering-at-microsoft-blog/) +developers and still has [plenty of security +issues](https://msrc.microsoft.com/update-guide/vulnerability). Yes, companies +and governments should [care about Open Source security](https://openssf.org/), +and those efforts can contribute to what I'm calling sustainability, but +security is a proxy concern. Let's call that the Open Source security crisis. + +Just as the security crisis is adjacent to the sustainability crisis, so is the +[Open Source +diversity](https://en.wikipedia.org/wiki/Diversity_in_open-source_software) +crisis: Open Source is markedly less demographically diverse than software +engineering in general. We have not just inequality of outcome but inequality of +opportunity. +[35%](https://www.statista.com/statistics/617136/digital-population-worldwide/) +of people don't even have Internet access yet, let alone free time to hack on +Open Source projects. Structural inequalities can be thought of as the largest +of hoops to jump through in order to get paid fairly for producing widely +adopted Open Source software. We should [directly address this wider diversity +crisis](https://www.outreachy.org/), and, we should work on resolving the +sustainability crisis. + +Open Source has created an economic value vacuum. Our society depends +utterly on the common pool resource of Open Source software, and this commons +is severely underprovisioned. How do we know? The real indicator of the Open +Source sustainability crisis as I define it is **maintainer burnout**. + + + +We have a long-standing pattern of chewing people up and spitting them out, as +youthful idealism and enthusiasm give way to resentment and depression. We see +it most clearly when a high-profile vulnerability shines a spotlight, but it +plays out much more widely in less visible circumstances. For example, here is +how **Marc Grabanski** tells [his +story](https://blog.opencollective.com/frontend-masters/): + +> I created an open source component that literally every website or piece of +> software at the time used, and often still do. Go to the WordPress control +> panel and there's my date picker. But in 15 years, the only money I ever got +> for that was $400 from a guy who needed me to add a specific feature. I think I +> got a handful of change thrown at me through PayPal, like $50 bucks. There was +> no economic sustainability whatsoever. +> +> There was a long time where I was doing open source almost more time than my +> full time job, and getting paid nothing. I just burnt out. I stopped writing +> and contributing to open source. I never built up my GitHub profile when that +> came around. I just gave up, because what's the point when all you get is +> constant issues? You give and give and give, and people just take and take and +> take. +> +> My open source success went from a major blessing to a great curse. It was +> one of the darkest times in my life. Something that started out with such hope +> and light ended up just being about getting thousands of emails. + +There was no viral moment when we collectively realized that we were taking +advantage of Marc. We quietly crushed him without ever noticing. [There are +many such cases](https://blog.tidelift.com/maintainer-burnout-is-real). + +
+ Update + From Marc: +
The thing I'd add to that, is I was able to create a network + that eventually led to Frontend Masters. My story is not all doom and gloom + like it is portrayed in the article. But it def wasn't a given I'd be able to + capitalize on the networking opportunities that OSS gave me."
+
+ +## The Path Lies Through Platforms + +Funding platforms are critical to achieving Open Source sustainability. Maybe +you want to classify "join a platform" under "jump through hoops." It's not the +same, though. + + + +Building platforms and recruiting devs to receive free money is easy. The main +options today are [GitHub Sponsors](https://github.com/sponsors), [Open +Collective](https://opencollective.com/), and +[Tidelift](https://tidelift.com/). I'm also rooting for +[Thanks.dev](https://thanks.dev/home) (they are helping me a lot at Sentry) and +[Liberapay](https://liberapay.com/) (they are a fork of Gittip/Gratipay). + +What's hard is opening the corporate floodgates. Companies receive outsized +value from Open Source, and companies control nearly all the funds. How do we +open the floodgates? _tl;dr_ Taxes and social pressure. More on that in [a +future post](https://github.com/chadwhitacre/openpath/issues/14). diff --git a/src/content/articles/the-philosophy-of-the-open-source-pledge.md b/src/content/articles/the-philosophy-of-the-open-source-pledge.md new file mode 100644 index 00000000..f5cb9bff --- /dev/null +++ b/src/content/articles/the-philosophy-of-the-open-source-pledge.md @@ -0,0 +1,213 @@ +--- +title: 'The Philosophy of the Open Source Pledge' +excerpt: "We launched the Open Source Pledge today to make companies pay their fair share to Open Source maintainers they depend on. I wrote this post about why doing so is fair and smart." +author: 'Vlad-Stefan Harbuz' +authorImageSrc: '/images/authors/vlad.webp' +isDraft: false +publishDate: '2024-10-08' +--- + +
+ This post originally appeared + on vlad.website. +
+ +Today, we launched the [Open Source Pledge][osp]. Virtually all companies use Open Source +software, making the Open Source ecosystem crucial to virtually all of the technology we use. That Open Source software +is created and supported by maintainers. But the companies that use Open Source software almost never pay the +maintainers anything. This means that the maintainers end up doing a huge amount of work for free, often as a second +shift after their dayjob so that they can pay the bills, leaving them burned out and overworked, and leaving the +projects they maintain at risk of serious security issues. + +The Open Source Pledge aims to change that, by getting companies to pay the maintainers of the software they rely +on. We launched the Pledge today with the support of [25 wonderful companies](https://opensourcepledge.com/members/) and +[6 large foundations](https://opensourcepledge.com/endorsements/). + +I'd like to talk about why the way the Open Source ecosystem is organised harms both maintainers and companies. I'll +explain how companies can not only do the right thing, but also make sustainable and impactful investments in the Open +Source ecosystem. And I'll talk about why this means that companies that do not pay their share act uncaringly and +shortsightedly. + +![The screen on the Nasdaq tower in Times Square saying “Nasdaq congratulates the companies launching the Open Source Pledge”, followed by many company logos, and a link to https://opensourcepledge.com.](https://vlad.website/static/osp/nasdaq@1000px.jpg "Open Source Pledge on the Nasdaq tower in Times Square, NYC") + +## The Problem + +The device you're using to read this post runs Open Source software. There are some high-profile projects that any +computer is basically guaranteed to be using — [curl][curl], [OpenSSH][openssh], [Python][python], and so on. These +high-profile projects are often, but not always, able to secure funding for their development. + +But there are tens of thousands of projects, making up the vast majority of widely-used Open Source packages, that never +get more than a few dollars of funding, despite being relied on by companies such as Adobe [^adobe], Amazon [^aws], +Apple [^apple], Facebook [^facebook], Google [^google], Mastercard [^mastercard], Microsoft [^microsoft], Netflix +[^netflix], Sony [^sony], eBay [^ebay], and many many others. These companies do not pay back their fair share — in many +cases, they pay back _nothing_ — to the Open Source software developers whose work they continue to monetise and depend +on year after year. + +For example, without [FFmpeg][ffmpeg], YouTube wouldn't work, yet the people who make FFmpeg don't meaningfully get paid +by Google or by anyone else. + +
+ @mok says “ffmpeg has created more enterprise value than we can fathon”. @FFmpeg says “Yet we receive essentially no support from these enterprises relative to the value we provide”. +
FFmpeg's tweet on 20 Oct 2024
+
+ +There's more. Though the maintainers of Open Source software are often not paid for developing this software, +creators of widely-used internet infrastructure such as [Elasticsearch][elastic] can set up hosted versions of their +software that they can sell as a service, in order to be able to afford to fund further development. But even this is +made difficult by monopolistic free riders such as Amazon. Elasticsearch was previously Open Source, but had to [change +their license to a non–Open Source one][elastic-license] when Amazon took Elasticsearch and started selling it +themselves, using their massive scale to take revenue from the original creators of the software. These kinds of moves +leave the people who maintain our internet infrastructure unable to earn an income, while enriching profiteering and +mooching corporations who don't give back, such as Amazon. + +Basically, the people who make the software we all rely on don't get paid. This xkcd comic sums it up nicely: + +
+ This xkcd comic shows a Jenga-like tower of blocks, illustrating “all modern digital infrastructure”. The structure precariously rests on a small load-bearing block, titled “a project some random person in Nebraska has been thanklessly maintaining since 2003”. +
xkcd #2347 — Dependency
+
+ +This has bad consequences for all of us. Putting maintainers in a position where they're overworked and vulnerable to +burnout renders the Open Source software we rely on vulnerable. There have been multiple serious worldwide +security issues because of bugs that are demonstrably a result of overworked and underpaid maintainers. The [XZ +backdoor][xz], which affected billions of devices worldwide, happened because [Lasse Collin][lasse], the maintainer of +XZ, was overworked and underpaid, and ended up being forced to accept “help” from someone who turned out to be a +malicious contributor who would go on to add a backdoor to XZ. And there are other examples, such as the [Log4Shell +vulnerability][log4shell], where underpaid maintainers doing their best to fix a major security issue were rewarded with +death threats. + +## Analysing the Problem + +So why, specifically, is the status quo of Open Source funding bad? Two reasons. + +**#1: It's unfair and uncaring.** People like [Jordan Harband][ljharb], [Josh Goldberg][josh], [Filippo +Valsorda][filippo], [Caleb Porzio][caleb], and thousands of others, build software billions of people rely on, but [have +to jump through a million hoops][chad-sustainability] to pay the bills. This is unfair because these developers +contribute massively to our tech infrastructure, and companies don't support them. Why is it uncaring? To care about +someone means approximately [to be motivated to act when they might be harmed, even when you personally stand to gain +nothing][care]. Companies happily profit off of Open Source maintainers' work, but do not care when these maintainers +struggle to pay the bills. + +**#2: It harms our tech infrastructure.** If we do not support the maintainers of the software our phones, games and +airplanes run, we will continue to drive away maintainers, leaving our tech infrastructure neglected, un-innovative, and +vulnerable to serious worldwide security issues. + +## The Solution + +There are many possible solutions. Governments could support Open Source developers with tax money, which is what +Germany is doing with the [Sovereign Tech Fund][stf]. We could add tooling to the Open Source ecosystem that makes it +easier for maintainers to sell their work, which is what [Polar][polar] is working towards. + +But there's a really obvious solution that we can implement _today_. That's for **companies to pay the maintainers of +the software they rely on**. “Pay”, not “donate”, because payment is already overdue, and it has been for a long time. + +This is what the [Open Source Pledge][osp] is — a cultural movement asking companies to pay $2000 per employed developer +per year to the Open Source maintainers they depend on. + +Some companies might say that they already contribute in other ways. They might contribute by allocating time for their +employees to contribute back to Open Source projects, or by offering Open Source maintainers cost-free use of cloud +services. These contributions are great and should be celebrated. But they fall short in one important way — they do not +help underpaid maintainers pay the rent. + +Here's one obvious question, though. Why would companies make these payments? There are three big reasons. + +**#1: It's fair and manifests care.** Companies might care about the fact that the developers whose work they rely on +are suffering, and they might therefore be motivated to correct this. This sounds good, but it's relying on a lot of +goodwill. This is fine though, because there are two other big reasons. + +**#2: Signalling thought leadership.** Companies that join the Pledge can signal their thought leadership by being one +of the innovators driving a paradigm change in the funding of the Open Source ecosystem. This benefits the company's +brand and reputation, which appeals to potential customers. + +**#3: Ensuring companies can base their products on a healthy foundation.** If the Open Source ecosystem that companies +rely on starts crumbling, this is bad for those companies, because they will have now built their software on top of a +poorly maintained foundation. Paying money to ensure the software they use is innovative, secure and well-maintained +just makes sense. + +What's interesting here is that reasons #2 and #3 involve companies making payments for something that they expect to +gain future value out of. This is what we call an _investment_, and paying Open Source maintainers is a particularly +good investment. Venture capital firm [Accel][accel] agrees, which is why they [support the Pledge][endorsement-accel]. + +The corollary of the above is that companies that do not pay the Open Source maintainers they rely on act uncaringly and +short-sightedly. Unfortunate! + +## How We Can Implement the Solution + +I think many companies want to do the right thing. And paying maintainers is something that companies can do today, by +[joining the Pledge][join]. The Open Source Pledge does not handle any funds — we simply facilitate money being paid +directly to maintainers. [Sentry][member-sentry] has joined the Pledge, and will be giving more than $500,000 this year +directly to the maintainers it depends on, continuing a tradition it has kept up for the past 3 years. +[Antithesis][member-antithesis] has given $186,000. We have members ranging in size from 135 developers, to 1 developer. +And many other companies will follow. If our current members can do it, other companies can too. + +Some companies might worry that it is too logistically complicated to figure out which maintainers' work they depend on, +then figure out how to pay those maintainers. But this process is made simple by services such as [thanks.dev][thanksd], +which I am also a contributor to. The Open Source Pledge [“About” page][about] addresses many questions companies might +have. + +If you're an employee, tell your company to pay the maintainers of the software it relies on. And if you're a key +decision maker such as a CEO, CFO or CTO? Do the right thing — it will benefit you, your brand, and the ecosystem you +live and work in. + + + +[about]: https://opensourcepledge.com/about/ +[accel]: https://www.accel.com/ +[caleb]: https://calebporzio.com/ +[care]: http://www.barrymaguire.com/uploads/2/3/2/7/23270406/efficient_markets_and_alienation_-_published.pdf +[chad-sustainability]: https://openpath.quest/2024/the-open-source-sustainability-crisis/ +[chad]: https://openpath.quest/ +[cramer]: https://cra.mr/ +[curl]: https://en.wikipedia.org/wiki/CURL +[elastic-license]: https://www.elastic.co/blog/why-license-change-aws +[elastic]: https://www.elastic.co +[endorsement-accel]: https://www.accel.com/noteworthy/why-accel-is-supporting-the-open-source-pledge +[ethan]: https://ethanarrowood.com/ +[ffmpeg]: https://en.wikipedia.org/wiki/FFmpeg +[filippo]: https://filippo.io/ +[join]: https://opensourcepledge.com/join/ +[josh]: https://www.joshuakgoldberg.com/ +[lasse]: https://tukaani.org/xz-backdoor/ +[ljharb]: https://x.com/ljharb +[log4shell]: https://en.wikipedia.org/wiki/Log4Shell +[member-antithesis]: https://opensourcepledge.com/members/antithesis/ +[member-sentry]: https://opensourcepledge.com/members/sentry/ +[openssh]: https://en.wikipedia.org/wiki/OpenSSH +[osp]: https://opensourcepledge.com +[polar]: https://polar.sh/ +[python]: https://en.wikipedia.org/wiki/Python_(programming_language) +[selviano]: https://github.com/selviano +[sentry]: https://sentry.io/ +[stf]: https://www.sovereigntechfund.de/ +[thanksd]: https://thanks.dev/home +[xz]: https://en.wikipedia.org/wiki/XZ_Utils_backdoor + +[^adobe]: https://thanks.dev/d/gh/adobe/dependencies +[^apple]: https://thanks.dev/d/gh/apple/dependencies +[^aws]: https://thanks.dev/d/gh/aws/dependencies +[^ebay]: https://thanks.dev/d/gh/ebay/dependencies +[^facebook]: https://thanks.dev/d/gh/facebook/dependencies +[^google]: https://thanks.dev/d/gh/google/dependencies +[^mastercard]: https://thanks.dev/d/gh/mastercard/dependencies +[^microsoft]: https://thanks.dev/d/gh/microsoft/dependencies +[^netflix]: https://thanks.dev/d/gh/netflix/dependencies +[^sony]: https://thanks.dev/d/gh/sony/dependencies + +[^endorsement-django]: https://www.djangoproject.com/weblog/2024/oct/08/why-django-supports-the-open-source-pledge/ +[^endorsement-osc]: https://blog.opencollective.com/why-the-open-source-pledge-is-both-relevant-and-timely/ +[^endorsement-osi]: https://opensource.org/blog/the-open-source-initiative-supports-the-open-source-pledge +[^endorsement-perl]: https://news.perlfoundation.org/post/-open-source-pledge +[^endorsement-php]: https://thephp.foundation/blog/2024/10/08/open-source-pledge/ +[^endorsement-play]: https://www.playframework.com/blog/open-source-pledge-launched diff --git a/src/content/config.ts b/src/content/config.ts index cf6e5590..168464d6 100644 --- a/src/content/config.ts +++ b/src/content/config.ts @@ -2,49 +2,17 @@ // © 2024 Vlad-Stefan Harbuz // SPDX-License-Identifier: Apache-2.0 -import { z, defineCollection } from "astro:content"; - -/* Welcome to the schema for the Open Source Pledge. - * - * If you are implementing an Open Source Pledge report for a member - * organization, and need to understand how to format it, you've found the - * source of truth. If you have questions or run into limitations, please open - * an issue: - * - * https://github.com/opensourcepledge/opensourcepledge.com/issues/new - * - */ - -const memberReport = z.object({ - url: z.string().url(), - dateYearEnding: z.string().date(), - averageNumberOfDevs: z.number().nonnegative(), - payments: z.number().nonnegative(), - // NOTE: Deprecated. - monetaryValueOfTime: z.number().optional(), - // NOTE: Deprecated. - monetaryValueOfMaterials: z.number().optional(), -}); - -const member = z.object({ - name: z.string(), - // NOTE: Deprecated. - urlSquareLogoWithBackground: z.string().url().optional(), - urlLearnMore: z.string().url(), - description: z.string().optional(), - annualReports: memberReport.array().nonempty(), -}); - -export type Member = z.infer; -export type MemberReport = z.infer; -export interface MemberWithId { - id: string, - data: Member, -} +import { defineCollection } from "astro:content"; +import { memberSchema } from '../schemas/members'; +import { articleSchema } from '../schemas/articles'; export const collections = { members: defineCollection({ type: "data", - schema: member, + schema: memberSchema, + }), + articles: defineCollection({ + type: "content", + schema: articleSchema, }), }; diff --git a/src/layouts/Layout.astro b/src/layouts/Layout.astro index e3d695aa..36a4e7aa 100644 --- a/src/layouts/Layout.astro +++ b/src/layouts/Layout.astro @@ -54,6 +54,9 @@ const { title, navless } = Astro.props;
  • Members
  • +
  • + Blog +
  • ) } @@ -63,6 +66,7 @@ const { title, navless } = Astro.props; Join About Members + Blog Endorsements Press @@ -423,6 +427,27 @@ const { title, navless } = Astro.props; list-style-position: inside; } } + .button { + display: inline-block; + margin: 1rem 0; + padding: 0.8rem 2rem; + color: var(--color-bg); + background-color: var(--color-primary); + border-radius: 0.5rem; + text-align: center; + text-decoration: none; + text-transform: uppercase; + font-weight: bold; + font-size: 1.2em; + &:hover { + background: var(--color-secondary); + color: var(--color-bg); + } + &:active { + background: var(--color-tertiary); + color: var(--color-bg); + } + } section { margin: 4rem 0; @media (max-width: 800px) { diff --git a/src/memberData/common.ts b/src/memberData/common.ts index f99e3ea3..1495c7b4 100644 --- a/src/memberData/common.ts +++ b/src/memberData/common.ts @@ -4,7 +4,7 @@ import dayjs from 'dayjs'; import fetch from "node-fetch"; -import type { Member, MemberWithId, MemberReport } from "../content/config.ts"; +import type { Member, MemberWithId, MemberReport } from "../schemas/members.ts"; export enum MemberException { JsonFileNotAccessible, diff --git a/src/memberFormatting.ts b/src/memberFormatting.ts index f2996b13..dcaa4e9a 100644 --- a/src/memberFormatting.ts +++ b/src/memberFormatting.ts @@ -3,7 +3,7 @@ import memberRoles from "./memberRoles.json" import type { Map } from './util.ts'; -import type { MemberWithId, MemberReport } from "./content/config.ts"; +import type { MemberWithId, MemberReport } from "./schemas/members.ts"; import { getCollection } from 'astro:content'; import { sortReportsForMemberWithId } from "./memberData/common.ts"; diff --git a/src/pages/articles/[id].astro b/src/pages/articles/[id].astro new file mode 100644 index 00000000..b49a3c96 --- /dev/null +++ b/src/pages/articles/[id].astro @@ -0,0 +1,108 @@ +--- +// © 2024 Vlad-Stefan Harbuz +// SPDX-License-Identifier: Apache-2.0 + +import Blob from "../../components/Blob.astro"; +import Layout from "../../layouts/Layout.astro"; + +import { getCollection } from 'astro:content'; + +import type { Article } from "../../schemas/articles.ts"; + +interface ArticleWithMeta { + id: string; + slug: string; + body: string; + collection: string; + render: any; + data: Article; +} + +interface Props { + article: ArticleWithMeta; +} + +const { article } = Astro.props; + +export async function getStaticPaths() { + const articles = await getCollection('articles'); + return articles.map((article: ArticleWithMeta) => { + return { params: { id: article.slug }, props: { article } }; + }); +} + +const { Content } = await article.render(); +--- + + +
    + + +
    +
    + + + + + +
    +
    +

    {article.data.title}

    +
    + {article.data.authorImageSrc && + + } +
    + {article.data.author} + +
    +
    +
    + +
    +
    +
    +
    +
    + + diff --git a/src/pages/articles/index.astro b/src/pages/articles/index.astro new file mode 100644 index 00000000..6e4acbf9 --- /dev/null +++ b/src/pages/articles/index.astro @@ -0,0 +1,43 @@ +--- +// © 2024 Vlad-Stefan Harbuz +// SPDX-License-Identifier: Apache-2.0 + +import ArticleList from "../../components/ArticleList.astro"; +import Blob from "../../components/Blob.astro"; +import Button from "../../components/Button.astro"; +import Layout from "../../layouts/Layout.astro"; +--- + + +
    + + +
    +
    + + + + + +
    +
    +
    +

    Articles

    +
    + +
    + +
    +
    +
    +

    Convinced?

    +
    + +
    + +
    +
    +
    +
    +
    +
    diff --git a/src/pages/join.astro b/src/pages/join.astro index 36c0a4df..45f7a38b 100644 --- a/src/pages/join.astro +++ b/src/pages/join.astro @@ -98,7 +98,7 @@ import Layout from "../layouts/Layout.astro"; > or the full schema.

    @@ -304,7 +304,7 @@ import Layout from "../layouts/Layout.astro";