8 ms·
An open-source maintainer's guide to saying “no”
- zygentoma 1y agoHm, my first though is > A user proposes a new feature. It’s well-designed, useful, and has no obvious technical flaws. And yet, the answer is “no.” Why? If it is well-designed, useful, and has no obvious technical flaws, why shouldn't it be included in open source software. > This work has gotten exponentially harder in the age of LLMs. Maybe that is more of the problem. But that's probably not really "well-designed, useful, and has no obvious technical flaws" kind of stuff … But since this is about an MCP tool, almost reads like LLM generated and the image above definitely is … maybe you're part of the problem!
- johnny22 1y ago> Why? If it is well-designed, useful, and has no obvious technical flaws, why shouldn't it be included in open source software. If you have a vision and boundaries for what the software does, then you wouldn't want to take a feature that makes it do more than that. The project owner still has to keep the scope where they want it.
- arccy 1y agoit may not have technical flaws, but it can be scope creep, doesn't align with the vision for a project, or just additional complexity the project doesn't want to take on. remember that people will often drive by contribute features they want, but then it's up the maintainers to keep it working forever (until they remove it, if they even can).
- clickety_clack 1y agoIf it’s your project, it’s up to you to decide where the focus of the project should be. There’s lots of good ideas on the boundary of every project, and you can’t include them all. Even useful features can be a distraction.
- aDyslecticCrow 1y ago> Why? If it is well-designed, useful, and has no obvious technical flaws, why shouldn't it be included in open source software. I think its quite easy to find examples by thinking of the extremes. - Why don't git add a native UI? (out of scope) - Why don't excel add lua scripting? (already has visual basic) - Why don't neofetch add a built-in ascii art editor so people can more easily customize their logo display? (Bloat) - Why don't pandas and numpy just merge? (confusing user experience) They can be amazingly written, with impeccable docs and test suite. But they're out of scope, deviate from the project philosophy, confuse the user, add maintenance for the future, or could could be their own projects.
- johnisgood 1y agoSure. Although git has a simple native UI, and there are many frontends, like Git Cola, lazygit, and so forth, although only the first is developed by git. The others are welcome. It is definitely out of scope for git itself.
- eviks 1y ago> - Why don't git add a native UI? (out of scope) Git has native UI, just a bad one just like its cli UI, so it is in scope. You've just out-of-scoped better user experience. > - Why don't excel add lua scripting? (already has visual basic) Visual Basic is a bad/obscure language. Even real Excel didn't stop and added some JS/Python support. So you've again just rejected better user experience, very nice "project philosophy"!
- OtherShrezzing 1y ago> Why? If it is well-designed, useful, and has no obvious technical flaws, why shouldn't it be included in open source software. More features means more code to maintain. More code to maintain means more time consumed. Time is finite. Time is the only resource you really meaningfully have in life. I’m prioritising watching my kids take their first steps over expanding the scope of my open source python package.
- Aurornis 1y ago> Why? If it is well-designed, useful, and has no obvious technical flaws, why shouldn't it be included in open source software In my experience, there is a subset of open source projects where contributions are theoretically accepted, but in practice the maintainer doesn’t actually want to accept anything from anyone else unless it’s something they’ve asked for. They view contributors as assistants who are willing to volunteer their time to handle tasks that have been delegated, but they prefer to keep it as their own project. That’s fine, of course, if that’s what they want from their project. It’s their project. Where it starts to get frustrating is if they throw a fit when someone forks their open source project, or when they start rejecting PRs from other people but then lightly rewriting the code and resubmitting it as their own work. Both of these have happened to me in recent years. In one case I spent a long time writing a new feature that the maintainer had created an issue for and marked as open for contributions. Yet no amount of responding to his PR reviews made him happy about the structure of my solution. Eventually I didn’t respond for 30 days because I was busy and he closed it as stale. Then a few months later I saw the release notes included the feature he claimed he didn’t want. I looked at the commit history and saw he had committed something strikingly similar to the exact PR I had been working on, with only minimal changes to function names and locations of code blocks. That’s life, of course, but at the same time it’s getting a little frustrating to read all of the writing holding open source maintainers up on a pedestal simply because they’re holding that position. Over the years many of the projects I use have had to fork off and take new leadership and names because the old maintainer was getting in the way of progress. Again, they are within their rights to do so, but that doesn’t mean we need to praise any and every move they make.
- StilesCrisis 1y agoI had a somewhat similar experience with libjpeg-turbo. Found a real bug, submitted a working PR, needed to argue my case that the bug was real despite providing examples, and eventually the maintainer paraphrased my PR into their own PR and landed their own fix. It's fine I suppose, but it was a weird experience.
- arccy 1y agosometimes people have a strong vision for the code they maintain. in those cases they'll usually more happily accept issues, rather than code. but GitHub doesn't let you turn off prs...
- 2OEH8eoCRo0 1y agoSay you're making a music player and someone opens a PR to add PDF support. Suppose the implementation is immaculate.
- ChrisMarshallNY 1y ago> Why? If it is well-designed, useful, and has no obvious technical flaws, why shouldn't it be included in open source software. Ooh! Ooh! I know this one! Very often, folks want to modify a shared system, to optimize for their own application. However, the modifications could do things that would negatively impact other users of the system, or make it difficult to customize for specific implementations. They can also add maintenance overhead, which can impact quality and release cadence.
- einpoklum 1y ago> ... articulate the project’s philosophy, setting expectations before a single line of code is written... Historically, we could assume that since writing code is an expensive, high-effort activity, contributors would engage in discussion before doing the work, or at least seek some sign that time would not be wasted. Today, LLMs have inverted this. Code is now cheap. No. We could n ot assume that contributors would engage in such discussion, in the past; nor has this been inverted today. Let's start with the second point: Good code, that reflects, or even evolves, a project's philosophy - is "expensive". LLMs can't write it (will they ever? I don't know), so they have not made it less expensive. As for the first point: The order of things has never been quite like that. Code "discusses itself" with you as write it, and once you've written a piece, your perspective on what you're writing and what you should be writing in the future - and even on what you had already written. Your own reflection happens before writing any code, during writing, as well as afterwards.
- aDyslecticCrow 1y ago> No. We could not assume that contributors would engage in such discussion, in the past; nor has this been inverted today. If the author experience a shift in the nature of PR and discussions, then at the very least it's been inverted in the projects they maintain. Even if there were contributors that did so in the past, if the ratio increased it's an issue worth discussing. > Code "discusses itself" with you as write it Perhaps (though i lean towards disagreement), but that discussion is not with the maintainer or rest of the team. "I thought about it and this is the best approach trust me bro" is not a great push request. All those questions the contributor answered and "discussed" are un-resolved for everyone else, and the burden of proof should be on the contributor. If you have to think it through in front of an IDE to think about it properly, script it out in some quick python and return to the issue thread to discuss the approach. Perhaps post the python prototype even.
- einpoklum 1y ago> ... is not a great push request. indeed, but that is no different now that it was before. > If you have to think it through in front of an IDE to think about it properly, script it out in some quick python Again, that is not possible; or rather, it is meaningless. It's like telling an author to sketch out a few chapters ahead. It doesn't work like that: The story has its own life and nature - even if, to an extent, drawn out from the author's psyche and unconscious - which develops through the process of writing. The sketches are very often just not what the story works itself out to be. In fact, not unlike literature - sometimes, truths reveal themselves only on the first or second rewrite.
- aDyslecticCrow 1y ago> we recently tried to nudge this behavior by requiring an issue for every PR I've not maintained or worked much with open source. But i would have assumed this was already common? It reflects how (from my experience) companies work internally with code. Discussion about a feature or a bug is done before writing any code (over lunch, or in a issue thread). We don't want to pay someone to write a feature we don't agree we need, or that collides with future maintenance. Even before AI, i'd argue the vast majority of code is cheap and simple. But that is what makes it more important than ever to decide what code should exist before someone (well paid) wastes a day or week writing it.
- criemen 1y ago> Even before AI, i'd argue the vast majority of code is cheap and simple. But that is what makes it more important than ever to decide what code should exist before someone wastes a day or week writing it. This 1000%. In my opinion, the biggest part of my job is figuring out what should be built at all, not building what we all eventually agree should be built - that's often pretty easy, AI or no AI.
- Aurornis 1y agoRequiring an issue per PR makes sense for significant bugs and features, but taken to the extreme it feels arbitrary and pedantic. I occasionally submit documentation fixes when I find broken docs (outdated commands in the docs, incorrect docs). I’ve had these rejected before because someone insisted I create an issue and have it go through some process first just to submit an obvious 1 line fix. At the extremes it clouds the issue backlog. You try searching for something and find pages and pages of arbitrary issues that didn’t need to exist other than for someone to get past the gatekeeper.
- giancarlostoro 1y agoI forget the episode its been years but the Talk Python podcast had someone I think from the Django team mention tips on contributing to open source and one of them was start by volunteering to document things, most devs dont do it or want to do it. It forces you to know and understand the codebase and by the time you want to contribute more you know the library better.
- firefax 1y agoMore OS projects need to be willing to stop adding features and just focus on the occasional bugfix or security update. Look at say GIMP. They have no market force demanding they add features every year in the way Adobe does. And while it's good and cool to add basic functionality like new image standards when they are published, many projects get stuck in this cycle of adding "stuff" for no reason. (Back in the day that's why I liked Firebird^H^H^H^Hfox -- you could bolt on extensions if you wish, but the core product was light.)
- ChrisMarshallNY 1y agoI’ve had some experience developing an infrastructure-level system for use around the world. I had to maintain it, almost completely alone, for ten years, before it was taken over by a competent team, and I could finally walk away. One of the most important things I did, in that decade, was say “no” a lot. Some folks were not happy about it, and Godwin’s Law was invoked on my ass, multiple times. A lot of requests were ones that would optimize for a specific use case, but it was a generalist system, so it had to remain “imperfect.” In the end, it all worked out well, if not “perfectly.” It’s now a worldwide system, being run by hundreds of organizations, and used daily, by thousands of people.
- jddil 1y ago> I had to maintain it, almost completely alone, for ten years, before it was taken over by a competent team, and I could finally walk away. No you didn't. Younger folks reading this, you don't owe anyone free labor. If you want to donate your time to open source that's ok but just know there are thousands of people in this industry that don't care about your mental health and will continue to take advantage of you because you enjoy coding and don't understand how valuable your time is yet.
- ChrisMarshallNY 1y agoSometimes, we do stuff for reasons that folks, these days, can't relate to. I'm truly sorry that you've never had a Cause to which you could dedicate that kind of effort. No one ever "took advantage" of me. I'm actually kind of hard to hoodwink. Yes, I did "have to." If I have to explain, you wouldn't understand.
- kiddico 1y agoI think folks these days can relate just fine. That particular guy a bit less so.
- AlexeyBelov 1y ago> If I have to explain, you wouldn't understand. It's not that I don't agree with you, but this sentence is very strange. It can be used to "support" anything and everything at all.
- deckar01 1y agoI see a solution to this for both sides: encourage published forks. This allows the contributor to shoulder the burden of packaging and support. If you support the patch, adopt the fork and advocate on the issue. If you find issues, help refine it in the fork’s issue tracker.
- jaggederest 1y agoOr build a proper plugin system, or other means of composition. I like the "core" plus "contrib" model myself, but it does require a lot of upkeep which is often the reason to say "no" in the first place.
- saulpw 1y agoThere will be pressure to make it easier to discover plugins, install plugins, install plugin dependencies, manage plugin options, uninstall plugins, verify and validate plugins, etc. It's all well and good to punt these problems to 'someone else' but that usually means either no one, someone who does a one-shot that becomes immediately out-of-date, or someone nefarious. The project mono-repo is the way to go. Long-term maintenance is the primary software challenge, and distributed maintenance is strictly more difficult. If the project truly has hundreds of motivated contributors, then forks or plugins might be worthwhile, but most projects struggle to keep more than one motivated contributor.
- Nevermark 1y ago> "“In writing, you must kill all your darlings.” - William Faulkner [0] This quote is becoming a cliche. Perhaps because it provides such helpful dramatic motivation to the act of maintaining creative quality through active negative selection. When have the freedom to create things we want, that can be hard. [0] https://www.goodreads.com/quotes/79715-in-writing-you-must-kill-all-your-darlings https://www.goodreads.com/quotes/79715-in-writing-you-must-k...
- prymitive 1y agoIf someone has a “readfile” cli app on gh it’s just a moment away from a issue being open: > thanks for a great project, in our org we have a requirement that we only write files, not read them. Can you please add —-write flag so this app works for us? The fact that someone clones your repo or uses your software doesn’t mean that you owe them anything. Every person with open source code should realise this before they start responding to feature requests.
- ungreased0675 1y agoWhat would be an example of a well-designed, useful feature that doesn’t mesh with the philosophy of the project?
- martinky24 1y ago“What if we added a GUI based web browser to CURL?”
- BobBagwill 1y agoIMHO a better example is: "Can we make a teeny tiny change to CURL that would allow me to use it as a fetch engine for the GUI web browser I'm making? I can't think of anything else that might use that change, but pretty pretty please?"
- Too 1y agoThis could have been a good example, except curl is not only a CLI, it builds on top of libcurl, one of the most popular libraries for doing HTTP in C. If building a web browser, it’s one of the first candidates for a fetch engine I would reach for.
- busymom0 1y ago"What if we allowed posting GIFs to hacker news posts and comments?"
- zahlman 1y agoAnything that falls outside the intended scope of the project.
- arccy 1y agoMaintainers really do need to say no more often, and teach users to be way less entitled. helping maintain a big project you see all sorts of users trying to push features just for themselves onto you.
- Liriel 1y agoMy pet peeve is people who use LLMs to generate code, never check whether it works, and then submit a PR. As if open-source maintainers don't have enough chores.
- BowBun 1y agoOver the last 6 months this has been my experience with new engineers at work, absolutely awful. I wish people didn't feel the need to throw out SDLC once the LLMs came along.
- palata 1y agoIt's not rare for me to ask if they tested it. They can lie, but if they say they did and it crashes on me right when I start it, then I may never trust this contributor ever again. Also I don't hesitate to be frank in my review, it's okay to say "I won't merge your feature because I don't think I can maintain that, but you're free to keep your fork". Or "I can merge it if you change this and this", but in that case I need to actually merge if they do what I asked for.
- latexr 1y ago> They can lie, but if they say they did and it crashes on me right when I start it, then I may never trust this contributor ever again. If it’s obvious without a shadow of a doubt that someone has lied, either on an issue or a PR, I’m very much inclined to block them. I have a lot of patience for people who are still learning or make silly mistakes but are genuinely making an effort; but if someone doesn’t even help me help them, that’s disrespectful and such behaviour shouldn’t be rewarded.
- rikroots 1y agoI await the first LLM generated PR to my JS canvas library with eager anticipation. I can't wait to ask them if they've run the PR branch against all of the test demos, so they can prove that the PR doesn't break existing functionality. Currently there's just under 200 test demos, each of which needs to be tested manually (because: hell = canvas library + animation) across the three main browsers to make sure nothing breaks. Bonus points for going the extra mile for testing on mobile device browsers.
- dismalaf 1y agoMaintainers owe users absolutely nothing. This is how open source was back in the day: - Someone puts code out there - You fork, then use code. Maybe you change it, put it out there - Someone forks it back if they like the changes That's it. No one owes anyone a single thing except following the terms of the license. Want a change? Do it your self, pay up, or fuck off and wait for someone else to maybe do it, or not do it at all, depending on how they feel.
- jonorsi 1y agoStruggling with this right now at my current job as one of four lead devs tasked with implementing our design system with using a React component library. I am of the opinion that we only theme the components and provide snippets for how to use them for larger UI elements; the rest are of the mindset that we should be building more components in addition to the library for simple things like: a button that has a chevron in it for dropdown menus; a specific component for combining a tooltip with an info icon; a dialog with just an okay button, in addition to the dialog with both cancel and okay buttons; etc. etc. Just the other day I got flak for saying no to accepting another version of a tooltip that had a different icon -- what's hard about using the tooltip with the icon you want...
- brian_cunnie 1y agoA year ago I changed my CONTRIBUTING document to say that I don't accept pull-requests on my very modest open source project (a special purpose DNS server) I like coding, but am not fond of reviewing other people's code. Also, the few PRs I received weren't up to snuff: for example, they included code changes but not tests. If they included tests, they weren't comprehensive. And they never included documentation changes.
- palata 1y agoI think it's fine. Open source does not mean at all that it has to be open development. Doesn't mean it cannot be, of course.
- joshdavham 1y ago> There is nothing more delightful than the drive-by PR that lands, fully formed and perfectly aligned, fixing a bug or adding a small, thoughtful feature. I'm actually generally not a fan of "drive-by" PR's. Unless the drive-by PR is fixing a simple bug in a simple way, then the contributor really should've opened an issue first. Doing otherwise is rude imo. This is actually open source etiquette that I'd like to see encouraged more in the future. Something like "If you've never contributed to this project before, then open an issue first". I understand that this can be explicitly placed in a CONTRIBUTING.md file, but I think that this should just become common etiquette that we all follow and understand.
- palata 1y ago> Unless the drive-by PR is fixing a simple bug in a simple way, then the contributor really should've opened an issue first. Doing otherwise is rude imo. I kindly disagree. If the project is open source, it means that I can fork it. If I find an open source project and want to add a feature to it, I will fork, implement my feature, and then open a PR to the original project. A couple things there: 1. I have no need to open a PR to upstream, it's totally right to keep my changes in my fork (as long as I honour the licence). 2. If the maintainers don't feel like merging my PR, they don't have to. It's their right. They may request changes, and I may choose not to implement them. It's not the only way to do it: it's perfectly fine to open an issue and ask for guidance. But I don't see the problem in opening a PR saying "look what I did with your project: you can merge it if you want".
- IshKebab 1y agoI strongly disagree. I don't find it rude at all. In fact I find the idea that you have to get permission to offer code much more rude. You are free to say "sorry I don't want to do it like this; you've wasted your time". That's totally fine.
- Daimanta 1y agoI understand, but my experience with open source projects on Github basically says the opposite. It doesn't really matter how detailed my issue is or if I point to the actual bug in the code, if there isn't a PR it simply gets ignored. This grinds my gears regularly but I try to let it go because I have no power to solve this issue.
- sanarothe 1y agoWhen I was a teenager I submitted a random/unsolicited pull request to something in the spree ecosystem, got a very nice message from the maintainer/author saying that he appreciates it but it wasn't in the direction he wanted to take the library, but I could collaborate with him in some other way. Glad for the patience in that message, if it were spicy I might have been put off programming.
- palata 1y ago> As an open-source maintainer, you should be ecstatic — in fact, you owe a significant debt — to every single person who engages with your project. I totally disagree. I don't owe them anything at all. If anything, they're using my work, for free. > After all, if you don’t want those interactions, keep your code to yourself! Because I'm giving my code for free (generally under a copyleft licence) does not mean at all that I want interactions. > The goal in open-source must always be to create a positive, compounding community. Again, no. It may be one of your goals if you want to, but it's perfectly fine to open source your code without wanting to create a community at all.
- throwaway346434 1y agoI strongly disagree with the premise of the article and content being reiterated here by a number of commenters. An incredibly common pattern is a maintainer thinking they know better in an area they are inexperienced in, and rejecting change because they don't like the sound of something or are unable to see past their cultural biases. We know this by another name - not invented here. Common, practical areas this occurs in boring open source business CRUD applications: - Address models aren't thought out. "Why would anyone want geocoding? What addresses don't fit the US style?" - Phone numbers get modelled as plain strings and all of a suddenly "but changing them to be standardised is really hard" - Company, brand, account structures rarely add URLs or links to external datasets. What possible use is a wikidata ID? - Why would I put in vCard/CSV/Schema.org/any other import/export? All of these areas are often ancillary to the primary purpose of whatever the application is, so get rejected out of hand. But the use cases they enable for users - who don't use the application in isolation - are then completely blocked. - Map, route or visualise spatial data mashed up with other datasets. Send people to remote locations without formal addresses. - Hook up phone systems to make your system run for teams with centralisation, integrate SMS based messaging, etc. - Join to public datasets to understand more about your customers (food safety, licencing registers, corporate entity registers, contract management systems, etc) A typical maintainer is going to say "wait, what; my accounting system is all about finance, none of this is relevant!"; but they miss out on what users really want in many cases: interoperability or data portability. The problem is the maintainer's frame is in their world view; and if they aren't dogfooding their project they aren't running into their users problems - how likely is it the maintainer is the BI analyst, or the low level data entry person, or from a country where QR code payment is the norm, or a million other considerations?
- zahlman 1y ago> A typical maintainer is going to say "wait, what; my accounting system is all about finance, none of this is relevant!"; but they miss out on what users really want in many cases: interoperability or data portability. I think you are the one missing the point. Users can want whatever they want to want. They're receiving, generally, et gratis et libre software which depends on someone else's time and effort. If they aren't getting what they want from the project, they are free to fork that project — and when they do, they're still getting more than they would otherwise be entitled to (i.e. the ability to start from scratch). Further, a maintainer by definition is normally someone not charged with implementing new functionality (that's a "developer"), but simply with bugfixes.
- eviks 1y agoGiven how many improvements are ignored or rejected in so many of the open source projects, it doesn't seem like "one of the hardest parts" is hard at all. Especially when "burden of proof is on the contributor, never the repo" and the repo is hiding behind immeasurable principles such as "ultimate success of a project isn’t measured by the number of features it has, but by the coherence of its vision and whether it finds resonance with its users." with the perfect example > This threat can take many forms. The most obvious is a feature that’s wildly out of scope, like a request to add a GUI to a CLI tool Indeed, a threat to the project that can transform a niche tool into a widely used one of at least reduce the usability barriers for a wider user base. Shoo the "incoherent vision" of a drive by Trojan horse bearing gui contribution gifts! > there is a significant transfer of responsibility when a PR is merged. ... maintainer who is suddenly on the hook for it. > we’ve introduced and documented the contrib Oh, so all you had to do to get off the hook was add a comment that you're not responsible?
- sdenton4 1y agoYou are free to fork and make whatever mess of features you wish for!
- eviks 1y agoYou're free to address any of the actual points in my comment instead of using an irrelevant cliche!
- const_cast 1y agoScope creep destroys projects and software. Most software is bad because it does too much, so most of it barely works and of the parts that do kind of work, they don't work together. Writing code is easy. Not writing code is much harder. Know what code to write, and what not to, is hardest.
- IshKebab 1y agoNot really. That solution only works if you are willing to maintain your fork forever just for your one patch, and you're happy to build the software yourself every time you need it and it's a "leaf" project (e.g. it's not good if you want to add a feature to Linux and it only exists on your machine). This answer is very much like "well if you don't like Trump you're free to live in another country!". Technically true.. ish. Practically dumb as hell.
- kazinator 1y ago> As an open-source maintainer, you should be ecstatic every time someone engages with your project. After all, if you didn’t want those interactions, you could have kept your code to yourself! I don't agree; some maintainers just want the code to be /used/ somewhere and possibly in modified form, but are nto interested in upstreaming anything. For instance the SQLite project operates like this.
- Too 1y agoMaintainers should understand that saying no and closing an issue is polite. Much better than ignoring, stalling conversations, demanding yak-shaving, bike-shedding or pretending that a feature request could be added if only someone else contributes it, then never accepting the PR once it arrives.
- jagged-chisel 1y agoContributors should understand that receiving a no and having their issue closed is polite.
- IshKebab 1y agoBut closing it immediately is definitely not polite.