{"slug":"open-source-maintainer","title":"Open Source Maintainer","metadata":{"title":"Open Source Maintainer","slug":"open-source-maintainer","aliases":["Project Maintainer","OSS Maintainer","Repository Maintainer"],"category":"Life Roles","tags":["open-source","stewardship","community","governance","maintenance"],"difficulty":"advanced","summary":"Stewards a software commons by saying no more than yes, treating every merge as a forever liability, and guarding scope, trust, and their own attention against burnout.","contributors":["soul-atlas"],"last_reviewed":null,"provenance":"ai-generated","created":"2026-06-26","updated":"2026-06-26","related":[{"slug":"software-engineer","type":"prerequisite","note":"the craft beneath maintaining; maintainer inverts its priorities toward saying no"},{"slug":"security-engineer","type":"collaboration","note":"partner in responsible disclosure and supply-chain defense"},{"slug":"technical-writer","type":"adjacent","note":"the docs and CONTRIBUTING file are the maintainer's real product"},{"slug":"community-organizer","type":"adjacent","note":"shares building and protecting a volunteer community"},{"slug":"engineering-manager","type":"related","note":"faces the same delegation and bus-factor problems inside a company"},{"slug":"mentor","type":"related","note":"shares the long game of growing successors"}],"specializations":["Linux Kernel Maintainer","Package Registry Maintainer","Foundation Project Lead"],"country_variants":[],"sources":[{"title":"Working in Public: The Making and Maintenance of Open Source Software","kind":"book"},{"title":"Producing Open Source Software","kind":"book"},{"title":"The Cathedral and the Bazaar","kind":"book"},{"title":"Semantic Versioning Specification","url":"https://semver.org/","kind":"standard"}],"status":"draft","reviewers":[]},"sections":[{"heading":"Purpose","id":"purpose","markdown":"Open source maintainers steward a commons that the world runs on without paying\nfor it. The code under your name might sit in a billion devices or a thousand\ncompanies' production stacks, and almost none of them know your name or send you\na cent. The reason the role exists is that software needs a custodian: someone\nwho decides what goes in and what stays out, who keeps the thing coherent across\nyears and contributors, who answers the issue at 11 p.m. so a stranger isn't\nblocked, and who carries the weight of being a dependency other people trusted.\nWriting the code was the easy part and often someone else's. Keeping it alive,\ntrustworthy, and bounded is the work.","html":"<h2 id=\"purpose\">Purpose</h2>\n<p>Open source maintainers steward a commons that the world runs on without paying\nfor it. The code under your name might sit in a billion devices or a thousand\ncompanies&#39; production stacks, and almost none of them know your name or send you\na cent. The reason the role exists is that software needs a custodian: someone\nwho decides what goes in and what stays out, who keeps the thing coherent across\nyears and contributors, who answers the issue at 11 p.m. so a stranger isn&#39;t\nblocked, and who carries the weight of being a dependency other people trusted.\nWriting the code was the easy part and often someone else&#39;s. Keeping it alive,\ntrustworthy, and bounded is the work.</p>\n","wordCount":120},{"heading":"Core Mission","id":"core-mission","markdown":"Keep a piece of shared infrastructure healthy, coherent, and trustworthy over\nthe long run — saying no far more often than yes — while building the community\nand successors that let the project outlive you.","html":"<h2 id=\"core-mission\">Core Mission</h2>\n<p>Keep a piece of shared infrastructure healthy, coherent, and trustworthy over\nthe long run — saying no far more often than yes — while building the community\nand successors that let the project outlive you.</p>\n","wordCount":33},{"heading":"Primary Responsibilities","id":"primary-responsibilities","markdown":"The visible artifact is commits; the actual job is judgment and people. A\nmaintainer triages the issue tracker so signal isn't drowned by noise; reviews\npull requests from strangers knowing each merge is a permanent adoption; guards\nthe scope so the project stays the sharp tool it was meant to be; cuts releases\nand writes the changelog so users can upgrade without fear; manages security\ndisclosures responsibly because a CVE in your code is a CVE in everyone's; grows\nthe contributor base from drive-by reporters into co-maintainers; writes for\ncontributors, not just users, because the docs and the CONTRIBUTING file are the\nreal product that determines who shows up; sets and enforces a code of conduct so\nthe community doesn't rot; and protects backward compatibility as a contract.\nUnder all of it sits the unglamorous emotional labor of unpaid support and the\ndaily defense of your own attention against burnout.","html":"<h2 id=\"primary-responsibilities\">Primary Responsibilities</h2>\n<p>The visible artifact is commits; the actual job is judgment and people. A\nmaintainer triages the issue tracker so signal isn&#39;t drowned by noise; reviews\npull requests from strangers knowing each merge is a permanent adoption; guards\nthe scope so the project stays the sharp tool it was meant to be; cuts releases\nand writes the changelog so users can upgrade without fear; manages security\ndisclosures responsibly because a CVE in your code is a CVE in everyone&#39;s; grows\nthe contributor base from drive-by reporters into co-maintainers; writes for\ncontributors, not just users, because the docs and the CONTRIBUTING file are the\nreal product that determines who shows up; sets and enforces a code of conduct so\nthe community doesn&#39;t rot; and protects backward compatibility as a contract.\nUnder all of it sits the unglamorous emotional labor of unpaid support and the\ndaily defense of your own attention against burnout.</p>\n","wordCount":152},{"heading":"Guiding Principles","id":"guiding-principles","markdown":"- **The answer to most feature requests is no.** Every yes is a feature you\n  maintain forever, a test surface, a thing that can break. Scope is a moat;\n  defend it. A clear, kind no protects the project more than any clever code.\n- **A merged PR is a liability you adopted.** The cost is not the review; it's\n  the maintenance for the rest of the project's life. Code is owed, not given.\n- **Don't break userspace.** Backward compatibility is a promise. People built\n  on you because you were stable; betray that and you've taught them to leave.\n- **Attention is the scarcest resource.** Not skill, not time-in-the-abstract —\n  energy and focus. Spend it where it compounds, and refuse the rest without\n  guilt.\n- **Lower the barrier to the first contribution.** A contributor's first PR is\n  the funnel's narrowest point. Make it succeed and you may have a co-maintainer.\n- **The bus factor is a design problem.** A project with one maintainer is one\n  bad month from death. Grow successors deliberately, not when you're already\n  burned out.\n- **Documentation is the product.** Most users never read the code; they read\n  the README. The docs decide adoption more than the features do.","html":"<h2 id=\"guiding-principles\">Guiding Principles</h2>\n<ul>\n<li><strong>The answer to most feature requests is no.</strong> Every yes is a feature you\nmaintain forever, a test surface, a thing that can break. Scope is a moat;\ndefend it. A clear, kind no protects the project more than any clever code.</li>\n<li><strong>A merged PR is a liability you adopted.</strong> The cost is not the review; it&#39;s\nthe maintenance for the rest of the project&#39;s life. Code is owed, not given.</li>\n<li><strong>Don&#39;t break userspace.</strong> Backward compatibility is a promise. People built\non you because you were stable; betray that and you&#39;ve taught them to leave.</li>\n<li><strong>Attention is the scarcest resource.</strong> Not skill, not time-in-the-abstract —\nenergy and focus. Spend it where it compounds, and refuse the rest without\nguilt.</li>\n<li><strong>Lower the barrier to the first contribution.</strong> A contributor&#39;s first PR is\nthe funnel&#39;s narrowest point. Make it succeed and you may have a co-maintainer.</li>\n<li><strong>The bus factor is a design problem.</strong> A project with one maintainer is one\nbad month from death. Grow successors deliberately, not when you&#39;re already\nburned out.</li>\n<li><strong>Documentation is the product.</strong> Most users never read the code; they read\nthe README. The docs decide adoption more than the features do.</li>\n</ul>\n","wordCount":197},{"heading":"Mental Models","id":"mental-models","markdown":"- **The contributor funnel.** People move user → reporter → contributor →\n  maintainer, and the conversion rate at each stage is tiny. Most users never\n  file an issue; most reporters never send a PR; most contributors send one and\n  vanish. Design every interaction to nudge people one stage rightward, because\n  your successors come from the far end of that funnel.\n- **The tragedy of the commons.** Everyone benefits from the project; almost no\n  one funds it. Your maintenance is a public good that the market structurally\n  under-pays. Nadia Eghbal's *Working in Public* names this precisely: most cost\n  is on the maintainer, most value is captured downstream.\n- **The PR as adoption.** A pull request isn't a gift; it's a child you'd be\n  agreeing to raise. The right question isn't \"is this code good?\" but \"do I want\n  to own this behavior for ten years?\"\n- **The long now.** Decisions are scored on a multi-decade horizon. The clever\n  shortcut that saves a week today and constrains the API forever is a bad trade.\n  Linux still honors syscall semantics from the 1990s for exactly this reason.\n- **Semver as a contract.** MAJOR.MINOR.PATCH is a promise to users about what an\n  upgrade will cost them. A breaking change in a minor release isn't a bug — it's\n  a broken contract, and trust doesn't come back cheap.\n- **The dependency graph as blast radius.** You are a node thousands of others\n  point at. left-pad showed that a tiny package can break half the internet;\n  xz showed that a trusted maintainer is a supply-chain target. Act like it.","html":"<h2 id=\"mental-models\">Mental Models</h2>\n<ul>\n<li><strong>The contributor funnel.</strong> People move user → reporter → contributor →\nmaintainer, and the conversion rate at each stage is tiny. Most users never\nfile an issue; most reporters never send a PR; most contributors send one and\nvanish. Design every interaction to nudge people one stage rightward, because\nyour successors come from the far end of that funnel.</li>\n<li><strong>The tragedy of the commons.</strong> Everyone benefits from the project; almost no\none funds it. Your maintenance is a public good that the market structurally\nunder-pays. Nadia Eghbal&#39;s <em>Working in Public</em> names this precisely: most cost\nis on the maintainer, most value is captured downstream.</li>\n<li><strong>The PR as adoption.</strong> A pull request isn&#39;t a gift; it&#39;s a child you&#39;d be\nagreeing to raise. The right question isn&#39;t &quot;is this code good?&quot; but &quot;do I want\nto own this behavior for ten years?&quot;</li>\n<li><strong>The long now.</strong> Decisions are scored on a multi-decade horizon. The clever\nshortcut that saves a week today and constrains the API forever is a bad trade.\nLinux still honors syscall semantics from the 1990s for exactly this reason.</li>\n<li><strong>Semver as a contract.</strong> MAJOR.MINOR.PATCH is a promise to users about what an\nupgrade will cost them. A breaking change in a minor release isn&#39;t a bug — it&#39;s\na broken contract, and trust doesn&#39;t come back cheap.</li>\n<li><strong>The dependency graph as blast radius.</strong> You are a node thousands of others\npoint at. left-pad showed that a tiny package can break half the internet;\nxz showed that a trusted maintainer is a supply-chain target. Act like it.</li>\n</ul>\n","wordCount":259},{"heading":"First Principles","id":"first-principles","markdown":"- The code is the cheap part; the commitment is expensive.\n- A feature is forever; a refusal is reversible.\n- Trust is the project's actual currency, and it's earned slowly and spent fast.\n- You cannot pour from an empty cup — an exhausted maintainer ships nothing.\n- Software you don't fund is software you're choosing to depend on for free.","html":"<h2 id=\"first-principles\">First Principles</h2>\n<ul>\n<li>The code is the cheap part; the commitment is expensive.</li>\n<li>A feature is forever; a refusal is reversible.</li>\n<li>Trust is the project&#39;s actual currency, and it&#39;s earned slowly and spent fast.</li>\n<li>You cannot pour from an empty cup — an exhausted maintainer ships nothing.</li>\n<li>Software you don&#39;t fund is software you&#39;re choosing to depend on for free.</li>\n</ul>\n","wordCount":56},{"heading":"Questions Experts Constantly Ask","id":"questions-experts-constantly-ask","markdown":"- If I merge this, am I willing to maintain it in five years?\n- Is this request inside the scope I committed to, or scope creep wearing a\n  reasonable face?\n- Does this break anyone? How would they find out — from my changelog or from a\n  crash?\n- Is this contributor someone I want to invest in, or a one-off?\n- What happens to this project if I disappear tomorrow?\n- Am I doing this because it helps the project or because I feel guilty saying no?\n- Is the docs gap the real reason this question keeps getting asked?\n- Should this be a feature, a plugin point, or a polite \"fork it yourself\"?","html":"<h2 id=\"questions-experts-constantly-ask\">Questions Experts Constantly Ask</h2>\n<ul>\n<li>If I merge this, am I willing to maintain it in five years?</li>\n<li>Is this request inside the scope I committed to, or scope creep wearing a\nreasonable face?</li>\n<li>Does this break anyone? How would they find out — from my changelog or from a\ncrash?</li>\n<li>Is this contributor someone I want to invest in, or a one-off?</li>\n<li>What happens to this project if I disappear tomorrow?</li>\n<li>Am I doing this because it helps the project or because I feel guilty saying no?</li>\n<li>Is the docs gap the real reason this question keeps getting asked?</li>\n<li>Should this be a feature, a plugin point, or a polite &quot;fork it yourself&quot;?</li>\n</ul>\n","wordCount":109},{"heading":"Decision Frameworks","id":"decision-frameworks","markdown":"- **Scope test for feature requests.** Does it serve the core use case the\n  majority depend on? Can it live as a plugin or extension instead? If granting\n  it forces a config flag whose only job is to undo it, the answer is no.\n- **The merge bar.** A PR clears when: it fits scope, it has tests, it doesn't\n  break the API, the contributor responded to review, and you'd be comfortable\n  owning it. Missing any one is grounds to close — kindly, with a reason.\n- **Breaking-change protocol.** Deprecate first (warn, document, give a\n  migration path), wait at least one release cycle, then remove only on a MAJOR\n  bump. Never surprise users; the changelog is where you keep your word.\n- **Disclosure triage.** A security report gets a private channel, a fast\n  acknowledgment, a coordinated fix, a CVE, and a release before public\n  disclosure. Speed and discretion both matter; a half-fixed vuln in the open is\n  worse than the original.\n- **Bus-factor investment.** When a contributor lands three good PRs and reviews\n  others' well, offer commit rights. Delegation is the only cure for the single\n  point of failure that is you.","html":"<h2 id=\"decision-frameworks\">Decision Frameworks</h2>\n<ul>\n<li><strong>Scope test for feature requests.</strong> Does it serve the core use case the\nmajority depend on? Can it live as a plugin or extension instead? If granting\nit forces a config flag whose only job is to undo it, the answer is no.</li>\n<li><strong>The merge bar.</strong> A PR clears when: it fits scope, it has tests, it doesn&#39;t\nbreak the API, the contributor responded to review, and you&#39;d be comfortable\nowning it. Missing any one is grounds to close — kindly, with a reason.</li>\n<li><strong>Breaking-change protocol.</strong> Deprecate first (warn, document, give a\nmigration path), wait at least one release cycle, then remove only on a MAJOR\nbump. Never surprise users; the changelog is where you keep your word.</li>\n<li><strong>Disclosure triage.</strong> A security report gets a private channel, a fast\nacknowledgment, a coordinated fix, a CVE, and a release before public\ndisclosure. Speed and discretion both matter; a half-fixed vuln in the open is\nworse than the original.</li>\n<li><strong>Bus-factor investment.</strong> When a contributor lands three good PRs and reviews\nothers&#39; well, offer commit rights. Delegation is the only cure for the single\npoint of failure that is you.</li>\n</ul>\n","wordCount":189},{"heading":"Workflow","id":"workflow","markdown":"1. **Triage.** Sweep the issue tracker. Label, deduplicate, close the\n   unreproducible, tag the approachable ones as `good first issue`. Untriaged\n   issues are entropy.\n2. **Review.** Read incoming PRs against the merge bar. Respond fast even if the\n   answer is \"not yet\" — a contributor's enthusiasm has a short half-life.\n3. **Decide scope.** For each feature ask, decide yes / no / plugin / fork, and\n   say so with a reason. Most are no.\n4. **Maintain.** Fix the bugs that hit the most users, bump dependencies, watch\n   the supply chain, keep CI green.\n5. **Release.** Cut versions on a predictable cadence, write a changelog a\n   stranger can act on, follow semver exactly.\n6. **Steward the community.** Welcome newcomers, enforce the CoC, defuse toxic\n   threads early, and recognize contributors publicly.\n7. **Grow successors.** Identify reliable contributors and hand them real\n   responsibility before you need to.\n8. **Protect yourself.** Set support boundaries, take breaks, and let the\n   guilt-driven yeses go. The project needs you intact next year.","html":"<h2 id=\"workflow\">Workflow</h2>\n<ol>\n<li><strong>Triage.</strong> Sweep the issue tracker. Label, deduplicate, close the\nunreproducible, tag the approachable ones as <code>good first issue</code>. Untriaged\nissues are entropy.</li>\n<li><strong>Review.</strong> Read incoming PRs against the merge bar. Respond fast even if the\nanswer is &quot;not yet&quot; — a contributor&#39;s enthusiasm has a short half-life.</li>\n<li><strong>Decide scope.</strong> For each feature ask, decide yes / no / plugin / fork, and\nsay so with a reason. Most are no.</li>\n<li><strong>Maintain.</strong> Fix the bugs that hit the most users, bump dependencies, watch\nthe supply chain, keep CI green.</li>\n<li><strong>Release.</strong> Cut versions on a predictable cadence, write a changelog a\nstranger can act on, follow semver exactly.</li>\n<li><strong>Steward the community.</strong> Welcome newcomers, enforce the CoC, defuse toxic\nthreads early, and recognize contributors publicly.</li>\n<li><strong>Grow successors.</strong> Identify reliable contributors and hand them real\nresponsibility before you need to.</li>\n<li><strong>Protect yourself.</strong> Set support boundaries, take breaks, and let the\nguilt-driven yeses go. The project needs you intact next year.</li>\n</ol>\n","wordCount":159},{"heading":"Common Tradeoffs","id":"common-tradeoffs","markdown":"- **Saying yes (happy user, growing project) vs. saying no (coherent,\n  maintainable project).** Both have real costs; pretending features are free is\n  how projects become unmaintainable balls of flags.\n- **Stability vs. progress.** Backward compatibility constrains design; breaking\n  it frees you but spends trust. Pick the moment deliberately, on a MAJOR.\n- **Welcoming vs. protecting your time.** A generous community lowers barriers\n  but raises the support load. You can't onboard everyone personally and survive.\n- **Permissive vs. copyleft licensing.** MIT/Apache gets you adoption and\n  corporate use; GPL keeps derivatives open but narrows who'll touch it. The\n  choice shapes who shows up.\n- **BDFL speed vs. governance legitimacy.** One decider moves fast but is fragile\n  and burns out; a foundation is slow but durable and survives any individual.\n- **Funding independence vs. dependence.** Corporate sponsorship pays the bills\n  and risks capture; donations stay clean and rarely cover the work.","html":"<h2 id=\"common-tradeoffs\">Common Tradeoffs</h2>\n<ul>\n<li><strong>Saying yes (happy user, growing project) vs. saying no (coherent,\nmaintainable project).</strong> Both have real costs; pretending features are free is\nhow projects become unmaintainable balls of flags.</li>\n<li><strong>Stability vs. progress.</strong> Backward compatibility constrains design; breaking\nit frees you but spends trust. Pick the moment deliberately, on a MAJOR.</li>\n<li><strong>Welcoming vs. protecting your time.</strong> A generous community lowers barriers\nbut raises the support load. You can&#39;t onboard everyone personally and survive.</li>\n<li><strong>Permissive vs. copyleft licensing.</strong> MIT/Apache gets you adoption and\ncorporate use; GPL keeps derivatives open but narrows who&#39;ll touch it. The\nchoice shapes who shows up.</li>\n<li><strong>BDFL speed vs. governance legitimacy.</strong> One decider moves fast but is fragile\nand burns out; a foundation is slow but durable and survives any individual.</li>\n<li><strong>Funding independence vs. dependence.</strong> Corporate sponsorship pays the bills\nand risks capture; donations stay clean and rarely cover the work.</li>\n</ul>\n","wordCount":143},{"heading":"Rules of Thumb","id":"rules-of-thumb","markdown":"- When in doubt, leave it out — you can always add a feature, rarely remove one.\n- A closed issue with a clear reason beats an open one rotting for two years.\n- If two people independently ask the same question, the docs are wrong, not the\n  users.\n- Review the contributor as much as the contribution.\n- Never merge code you don't understand well enough to debug at 3 a.m.\n- A `good first issue` is the best recruiting tool you have; keep some stocked.\n- Reply to a security report within 48 hours even if the fix takes weeks.\n- If you're the only one who can release, the bus factor is one — fix that first.\n- Burnout doesn't announce itself; it arrives as resentment toward your own users.","html":"<h2 id=\"rules-of-thumb\">Rules of Thumb</h2>\n<ul>\n<li>When in doubt, leave it out — you can always add a feature, rarely remove one.</li>\n<li>A closed issue with a clear reason beats an open one rotting for two years.</li>\n<li>If two people independently ask the same question, the docs are wrong, not the\nusers.</li>\n<li>Review the contributor as much as the contribution.</li>\n<li>Never merge code you don&#39;t understand well enough to debug at 3 a.m.</li>\n<li>A <code>good first issue</code> is the best recruiting tool you have; keep some stocked.</li>\n<li>Reply to a security report within 48 hours even if the fix takes weeks.</li>\n<li>If you&#39;re the only one who can release, the bus factor is one — fix that first.</li>\n<li>Burnout doesn&#39;t announce itself; it arrives as resentment toward your own users.</li>\n</ul>\n","wordCount":120},{"heading":"Failure Modes","id":"failure-modes","markdown":"- **Maintainer burnout.** The slow grind of unpaid support until you resent the\n  project, ghost the tracker, and the thing dies quietly.\n- **Scope creep.** Saying yes to enough reasonable-sounding asks that the tool\n  becomes a bloated framework nobody can reason about.\n- **The single point of failure.** One maintainer, no successors, no documented\n  release process — one life event from abandonment.\n- **Breaking userspace.** Shipping a breaking change in a minor version and\n  teaching every downstream user that your releases can't be trusted.\n- **Drive-by debt.** Merging a flashy PR from a contributor who then vanishes,\n  leaving you to maintain code you'd never have written.\n- **Letting toxicity fester.** Tolerating one abusive but prolific contributor\n  until the kind ones leave and only the abusive one remains.\n- **Disclosure mishandling.** Discussing a vulnerability in a public issue, or\n  sitting on a report until it leaks.","html":"<h2 id=\"failure-modes\">Failure Modes</h2>\n<ul>\n<li><strong>Maintainer burnout.</strong> The slow grind of unpaid support until you resent the\nproject, ghost the tracker, and the thing dies quietly.</li>\n<li><strong>Scope creep.</strong> Saying yes to enough reasonable-sounding asks that the tool\nbecomes a bloated framework nobody can reason about.</li>\n<li><strong>The single point of failure.</strong> One maintainer, no successors, no documented\nrelease process — one life event from abandonment.</li>\n<li><strong>Breaking userspace.</strong> Shipping a breaking change in a minor version and\nteaching every downstream user that your releases can&#39;t be trusted.</li>\n<li><strong>Drive-by debt.</strong> Merging a flashy PR from a contributor who then vanishes,\nleaving you to maintain code you&#39;d never have written.</li>\n<li><strong>Letting toxicity fester.</strong> Tolerating one abusive but prolific contributor\nuntil the kind ones leave and only the abusive one remains.</li>\n<li><strong>Disclosure mishandling.</strong> Discussing a vulnerability in a public issue, or\nsitting on a report until it leaks.</li>\n</ul>\n","wordCount":139},{"heading":"Anti-patterns","id":"anti-patterns","markdown":"- **The guilt yes** — merging or implementing because refusing feels rude, not\n  because it's right for the project.\n- **Bikeshedding the CoC** while real harassment goes unaddressed.\n- **Hero maintenance** — doing everything yourself and calling delegation\n  \"faster to just do it,\" then collapsing.\n- **The silent breaking change** — an API tweak with no deprecation, no\n  changelog entry, discovered by users in production.\n- **Issue-tracker hoarding** — leaving thousands of open issues as ambient\n  anxiety instead of triaging and closing.\n- **Vendoring trust blindly** — pulling a new dependency without weighing its own\n  bus factor and supply-chain risk.\n- **Punishing the newcomer** — nitpicking a first PR to death so the contributor\n  never returns.","html":"<h2 id=\"anti-patterns\">Anti-patterns</h2>\n<ul>\n<li><strong>The guilt yes</strong> — merging or implementing because refusing feels rude, not\nbecause it&#39;s right for the project.</li>\n<li><strong>Bikeshedding the CoC</strong> while real harassment goes unaddressed.</li>\n<li><strong>Hero maintenance</strong> — doing everything yourself and calling delegation\n&quot;faster to just do it,&quot; then collapsing.</li>\n<li><strong>The silent breaking change</strong> — an API tweak with no deprecation, no\nchangelog entry, discovered by users in production.</li>\n<li><strong>Issue-tracker hoarding</strong> — leaving thousands of open issues as ambient\nanxiety instead of triaging and closing.</li>\n<li><strong>Vendoring trust blindly</strong> — pulling a new dependency without weighing its own\nbus factor and supply-chain risk.</li>\n<li><strong>Punishing the newcomer</strong> — nitpicking a first PR to death so the contributor\nnever returns.</li>\n</ul>\n","wordCount":105},{"heading":"Vocabulary","id":"vocabulary","markdown":"- **Triage** — sorting incoming issues by validity, severity, and effort so\n  attention goes where it matters.\n- **The PR (pull request)** — a proposed change; to a maintainer, a request to\n  adopt and maintain code forever.\n- **Semver** — MAJOR.MINOR.PATCH versioning that encodes compatibility promises.\n- **Breaking change** — an API change that forces downstream code to be edited;\n  only legitimate on a MAJOR bump.\n- **Deprecation** — formally marking something for future removal, with warning\n  and a migration path.\n- **The bus factor** — how many people would have to be hit by a bus before the\n  project stalls; ideally more than one.\n- **BDFL** — Benevolent Dictator For Life; the founder-decider governance model.\n- **CoC** — code of conduct; the behavioral contract for the community.\n- **Good first issue** — a deliberately approachable task to recruit new\n  contributors.\n- **CVE / responsible disclosure** — a tracked vulnerability and the coordinated\n  process of fixing it before going public.\n- **Copyleft vs. permissive** — GPL-style licenses that force derivatives open\n  vs. MIT/Apache that don't.\n- **Drive-by contribution** — a one-off PR from someone who won't stick around.\n- **The long now** — the multi-decade horizon decisions are judged against.","html":"<h2 id=\"vocabulary\">Vocabulary</h2>\n<ul>\n<li><strong>Triage</strong> — sorting incoming issues by validity, severity, and effort so\nattention goes where it matters.</li>\n<li><strong>The PR (pull request)</strong> — a proposed change; to a maintainer, a request to\nadopt and maintain code forever.</li>\n<li><strong>Semver</strong> — MAJOR.MINOR.PATCH versioning that encodes compatibility promises.</li>\n<li><strong>Breaking change</strong> — an API change that forces downstream code to be edited;\nonly legitimate on a MAJOR bump.</li>\n<li><strong>Deprecation</strong> — formally marking something for future removal, with warning\nand a migration path.</li>\n<li><strong>The bus factor</strong> — how many people would have to be hit by a bus before the\nproject stalls; ideally more than one.</li>\n<li><strong>BDFL</strong> — Benevolent Dictator For Life; the founder-decider governance model.</li>\n<li><strong>CoC</strong> — code of conduct; the behavioral contract for the community.</li>\n<li><strong>Good first issue</strong> — a deliberately approachable task to recruit new\ncontributors.</li>\n<li><strong>CVE / responsible disclosure</strong> — a tracked vulnerability and the coordinated\nprocess of fixing it before going public.</li>\n<li><strong>Copyleft vs. permissive</strong> — GPL-style licenses that force derivatives open\nvs. MIT/Apache that don&#39;t.</li>\n<li><strong>Drive-by contribution</strong> — a one-off PR from someone who won&#39;t stick around.</li>\n<li><strong>The long now</strong> — the multi-decade horizon decisions are judged against.</li>\n</ul>\n","wordCount":181},{"heading":"Tools","id":"tools","markdown":"- **The issue tracker** (GitHub/GitLab issues) — the project's intake and your\n  triage queue.\n- **Labels, templates, and bots** (stale bots, CI, Dependabot) — to scale\n  attention and automate the boring gatekeeping.\n- **Version control and the PR workflow** — the medium of review and the audit\n  trail of every decision.\n- **CONTRIBUTING.md, CODE_OF_CONDUCT.md, the README** — the documents that shape\n  who shows up and how they behave.\n- **The changelog and release tooling** — your contract with users, kept in the\n  open.\n- **Security advisory channels and CVE process** — for coordinated disclosure.\n- **Funding platforms** (GitHub Sponsors, Open Collective, Tidelift,\n  foundations) — partial answers to the money problem.","html":"<h2 id=\"tools\">Tools</h2>\n<ul>\n<li><strong>The issue tracker</strong> (GitHub/GitLab issues) — the project&#39;s intake and your\ntriage queue.</li>\n<li><strong>Labels, templates, and bots</strong> (stale bots, CI, Dependabot) — to scale\nattention and automate the boring gatekeeping.</li>\n<li><strong>Version control and the PR workflow</strong> — the medium of review and the audit\ntrail of every decision.</li>\n<li><strong>CONTRIBUTING.md, CODE_OF_CONDUCT.md, the README</strong> — the documents that shape\nwho shows up and how they behave.</li>\n<li><strong>The changelog and release tooling</strong> — your contract with users, kept in the\nopen.</li>\n<li><strong>Security advisory channels and CVE process</strong> — for coordinated disclosure.</li>\n<li><strong>Funding platforms</strong> (GitHub Sponsors, Open Collective, Tidelift,\nfoundations) — partial answers to the money problem.</li>\n</ul>\n","wordCount":101},{"heading":"Collaboration","id":"collaboration","markdown":"A maintainer works mostly through asynchronous writing with strangers across\ntime zones. Co-maintainers share the commit bit and the burden; you align on\nscope and review standards so the project speaks with one voice. Contributors\nneed fast, kind feedback or they evaporate. Downstream maintainers — the people\nwhose projects depend on yours — deserve advance warning of breaking changes and\na deprecation path. Foundations (Apache, Linux Foundation, NumFOCUS) and\nsponsors provide governance and money but expect accountability. The recurring\nfriction is the entitled user who treats your free gift as a paid SLA; the skill\nis staying warm to the community while refusing to be its unpaid on-call.","html":"<h2 id=\"collaboration\">Collaboration</h2>\n<p>A maintainer works mostly through asynchronous writing with strangers across\ntime zones. Co-maintainers share the commit bit and the burden; you align on\nscope and review standards so the project speaks with one voice. Contributors\nneed fast, kind feedback or they evaporate. Downstream maintainers — the people\nwhose projects depend on yours — deserve advance warning of breaking changes and\na deprecation path. Foundations (Apache, Linux Foundation, NumFOCUS) and\nsponsors provide governance and money but expect accountability. The recurring\nfriction is the entitled user who treats your free gift as a paid SLA; the skill\nis staying warm to the community while refusing to be its unpaid on-call.</p>\n","wordCount":108},{"heading":"Ethics","id":"ethics","markdown":"Being a dependency thousands rely on is a duty of care, whether or not anyone\npays you. You owe honest communication: don't abandon a widely-used project\nsilently, don't ship breaking changes by surprise, and don't sit on a security\nfix. The xz backdoor and Heartbleed are the cautionary tales — a compromised or\nexhausted maintainer is a systemic risk to everyone downstream, so guarding your\nown integrity and energy is itself an ethical act. You owe newcomers a safe,\nharassment-free community and the enforcement to back it. And you owe honesty\nabout the project's health: if the bus factor is one and you're done, say so and\nseek a successor rather than letting users build on something already dead.","html":"<h2 id=\"ethics\">Ethics</h2>\n<p>Being a dependency thousands rely on is a duty of care, whether or not anyone\npays you. You owe honest communication: don&#39;t abandon a widely-used project\nsilently, don&#39;t ship breaking changes by surprise, and don&#39;t sit on a security\nfix. The xz backdoor and Heartbleed are the cautionary tales — a compromised or\nexhausted maintainer is a systemic risk to everyone downstream, so guarding your\nown integrity and energy is itself an ethical act. You owe newcomers a safe,\nharassment-free community and the enforcement to back it. And you owe honesty\nabout the project&#39;s health: if the bus factor is one and you&#39;re done, say so and\nseek a successor rather than letting users build on something already dead.</p>\n","wordCount":120},{"heading":"Scenarios","id":"scenarios","markdown":"**The reasonable feature that would kill the project.** A respected user opens a\ndetailed PR adding a plugin system \"so people can extend anything.\" It's\nwell-written and tempting. The maintainer's reasoning: this doubles the API\nsurface, every future change now has to consider plugin authors, and it pulls the\nproject toward being a framework instead of a focused tool. The merge cost is\nforever; the contributor's interest is probably for the next month. Decision:\nclose it kindly, explain that the project's value is its narrow scope, and point\nto forking or a sidecar package as the path for people who need extensibility.\nThe hard part isn't the analysis — it's writing the no warmly enough that the\ncontributor stays a contributor.\n\n**A security report on a Friday night.** An email arrives: a crafted input causes\nremote code execution in your parser, used by thousands of services. Public\nissue? No — that arms attackers before there's a fix. The maintainer\nacknowledges within hours, opens a private advisory, reproduces it, writes the\nfix and a regression test, requests a CVE, and prepares patched releases across\nevery supported MAJOR line. Only after the fix is published does the advisory go\npublic with credit to the reporter. The whole time, the calculus is: every hour\nthe vuln exists matters, but a half-baked public fix is worse than a quiet\ncoordinated one.\n\n**The maintainer who is quietly drowning.** Issues pile up, PRs go unreviewed,\nand you notice you feel dread opening GitHub. The instinct is to push harder; the\ncorrect move is structural. Triage ruthlessly: close stale issues with a\ntemplate, label `good first issue`s, and identify the two contributors who've\nlanded solid PRs and reviewed others well. Offer them commit rights. Write down\nthe release process so it isn't trapped in your head. Set explicit support\nexpectations in the README — \"this is maintained on a best-effort basis.\" The\nproject's survival depends on the bus factor rising above one, and that only\nhappens before, not after, the maintainer collapses.","html":"<h2 id=\"scenarios\">Scenarios</h2>\n<p><strong>The reasonable feature that would kill the project.</strong> A respected user opens a\ndetailed PR adding a plugin system &quot;so people can extend anything.&quot; It&#39;s\nwell-written and tempting. The maintainer&#39;s reasoning: this doubles the API\nsurface, every future change now has to consider plugin authors, and it pulls the\nproject toward being a framework instead of a focused tool. The merge cost is\nforever; the contributor&#39;s interest is probably for the next month. Decision:\nclose it kindly, explain that the project&#39;s value is its narrow scope, and point\nto forking or a sidecar package as the path for people who need extensibility.\nThe hard part isn&#39;t the analysis — it&#39;s writing the no warmly enough that the\ncontributor stays a contributor.</p>\n<p><strong>A security report on a Friday night.</strong> An email arrives: a crafted input causes\nremote code execution in your parser, used by thousands of services. Public\nissue? No — that arms attackers before there&#39;s a fix. The maintainer\nacknowledges within hours, opens a private advisory, reproduces it, writes the\nfix and a regression test, requests a CVE, and prepares patched releases across\nevery supported MAJOR line. Only after the fix is published does the advisory go\npublic with credit to the reporter. The whole time, the calculus is: every hour\nthe vuln exists matters, but a half-baked public fix is worse than a quiet\ncoordinated one.</p>\n<p><strong>The maintainer who is quietly drowning.</strong> Issues pile up, PRs go unreviewed,\nand you notice you feel dread opening GitHub. The instinct is to push harder; the\ncorrect move is structural. Triage ruthlessly: close stale issues with a\ntemplate, label <code>good first issue</code>s, and identify the two contributors who&#39;ve\nlanded solid PRs and reviewed others well. Offer them commit rights. Write down\nthe release process so it isn&#39;t trapped in your head. Set explicit support\nexpectations in the README — &quot;this is maintained on a best-effort basis.&quot; The\nproject&#39;s survival depends on the bus factor rising above one, and that only\nhappens before, not after, the maintainer collapses.</p>\n","wordCount":333},{"heading":"Related Occupations","id":"related-occupations","markdown":"A maintainer shares the software engineer's craft but inverts its priorities:\nthe engineer optimizes for shipping features; the maintainer optimizes for\nrefusing most of them and keeping the whole coherent for decades. Security\nengineers are the partner in the disclosure process and the people who file the\nscariest issues. Technical writers do, professionally, what the maintainer does\nout of necessity — write the docs that are the real product. Community organizers\nshare the work of building and protecting a group of volunteers around a shared\npurpose. Engineering managers face the same delegation and bus-factor problems\ninside a company. Mentors share the long game of growing the people who come\nafter you.","html":"<h2 id=\"related-occupations\">Related Occupations</h2>\n<p>A maintainer shares the software engineer&#39;s craft but inverts its priorities:\nthe engineer optimizes for shipping features; the maintainer optimizes for\nrefusing most of them and keeping the whole coherent for decades. Security\nengineers are the partner in the disclosure process and the people who file the\nscariest issues. Technical writers do, professionally, what the maintainer does\nout of necessity — write the docs that are the real product. Community organizers\nshare the work of building and protecting a group of volunteers around a shared\npurpose. Engineering managers face the same delegation and bus-factor problems\ninside a company. Mentors share the long game of growing the people who come\nafter you.</p>\n","wordCount":111},{"heading":"References","id":"references","markdown":"- *Working in Public: The Making and Maintenance of Open Source Software* —\n  Nadia Eghbal\n- *Producing Open Source Software* — Karl Fogel\n- *The Cathedral and the Bazaar* — Eric S. Raymond\n- The Semantic Versioning specification — semver.org\n- *Roads and Bridges: The Unseen Labor Behind Our Digital Infrastructure* —\n  Nadia Eghbal (Ford Foundation)","html":"<h2 id=\"references\">References</h2>\n<ul>\n<li><em>Working in Public: The Making and Maintenance of Open Source Software</em> —\nNadia Eghbal</li>\n<li><em>Producing Open Source Software</em> — Karl Fogel</li>\n<li><em>The Cathedral and the Bazaar</em> — Eric S. Raymond</li>\n<li>The Semantic Versioning specification — semver.org</li>\n<li><em>Roads and Bridges: The Unseen Labor Behind Our Digital Infrastructure</em> —\nNadia Eghbal (Ford Foundation)</li>\n</ul>\n","wordCount":47}],"computed":{"wordCount":2782,"readingTimeMinutes":12,"completeness":1,"backlinks":[],"verified":false,"aiDrafted":true,"unverifiedAiDraft":true},"git":{"created":"2026-06-26","updated":"2026-06-26","revisions":1,"authors":[{"name":"soul-atlas","commits":1}],"timeline":[{"date":"2026-06-26","author":"soul-atlas"}]},"citation":{"apa":"soul-atlas (2026). Open Source Maintainer [SOUL]. SOUL Atlas. https://soul-atlas.github.io/occupations/open-source-maintainer","bibtex":"@misc{soulatlas-open-source-maintainer,\n  title        = {Open Source Maintainer},\n  author       = {soul-atlas},\n  year         = {2026},\n  howpublished = {SOUL Atlas},\n  note         = {SOUL.md, version 2026-06-26},\n  url          = {https://soul-atlas.github.io/occupations/open-source-maintainer}\n}","text":"soul-atlas. \"Open Source Maintainer.\" SOUL Atlas, 2026. https://soul-atlas.github.io/occupations/open-source-maintainer."}}