My FOSS Story
blog.burntsushi.net
blog.burntsushi.net
Trolls are much louder than lurkers. There are a silent majority of us that know how much time and sweat goes into building free tools. We appreciate what you do because you do it for love of being a hacker and showing everyone else how you did it.
I don't think people realize how hard it is having a day job and then building a huge project people want to use. It's mentally taxing. It sucks even more when it's only negative things. Life is already hard man, why do these people have to keep trolling you? It's enough to make you want to flip the desk and give it all up.
I love reading your Rust code, and seeing how active you are on reddit/hacker news. Going through how you built the Aho Corasick crate and comments on you trying to reverse hyperscans teddy algo. was amazing for me. I spent so many hours that day reading ripgrep source code. I was amazed and what you did and the comments everywhere about why, like why the printer was pull/push. The whole time, I was geeking over what you did so much that you started my love of Rust.
Anyways, thanks for just being you man.
Thank you Burntsushi. You rock my world!
I am going back to university (a place a swore never to return to) to learn about algorithms and algorithmic design, starting next Monday. Because of you.
Nobody has had this big an influence on my career, and every time I hit `rg` on my computer I do so with immense gratitude.
Just thought you should know.
Thanks for the awesome crates!
[1] https://github.com/stickeritis/wordpieces/blob/7abbfb893ec20...
I will second Kragen in saying that there surely are many others like me, that has been inspired by your work.
Oh and btw, it was the post on Automata, not ripgrep. This one https://blog.burntsushi.net/transducers/
If you are reading this burntsushi, I'm really thankful for ripgrep, a tool I use tons of times almost everyday, as a backend for fzf etc. Definitely a happy user!
To everyone, it seems programmers write 500 words SEO spam posts so not worth much or hard. They can program the same if they wanted to.
(Note - SEO spam posts here refers to subjecive low quality code, duplicate of existing solutions or very similar to what you can do by combining two existing tools.)
Perception or feelings like above are quick to convey so they get conveyed.
Spitting out code is not the hard part of open source imo. It's dedication, commitment, building a community and sustaining feedback. If I am writing software to solve trivial problem, then it wouldn't take me much time but if I am writing software to solve trivial problems for others, It would take me tremendous time to write insignificant piece of code because it needs to be documented, accessible, thoughtful, clean, hosted, testable, branded (naming is one of the hard problems, after all.) and pass through many such criteria.
It doesn't need to but most people who love open source feel this way about their projects.
It's hidden. It's not visible to someone who just created an issue. Somehow we live in meritocratic ideals but forget that meritocratic solution on their own don't get much attention. Without a good readme, a lot of people simply ignore the project. We are actively optmized to go through ton of information that it de-empathizes us to human touch or mistakes. It's quick to notice a typo and make an insignificant comment about it because you can't focus on everything. Anything unexpected is a distraction and we get easily distracted, thus sometime vent on meaningless things.
I’ve aliased grep to it so that I never have to suffer through slow searches if I type grep out of muscle memory.
Love reading his code too.
grep () {
echo "Use rg"
rg "$@"
}I think a large part of it is (at least for me) the inability to believe that you cannot eventually make them see the light.
Sometimes that actually happens. Mostly it doesn’t.
Something I struggle with on other internet forums, too. I try to tell myself that I'm not just writing to change the low-effort antagonist's mind, but for everyone else reading the thread, too.
On emotions:
> When I was a young adult, I'd pride myself on being “logical” and “free of emotional decision making.” Like all good lies we tell to ourselves, there's a kernel of truth to it. But for the most part, at least for me personally, I am a deeply emotional being.
> Emotions run deep and can be a really useful well to tap for intrinsic motivation. For example, for some time after ripgrep was released, I began to immediately hate touching the code that was responsible for printing search results. It was convoluted, buggy and difficult to change. While rewriting is a perfectly logical decision to make on purely technical grounds only, I was motivated to do it because I didn't like the way it made me feel. My emotion helped drive me to make things better for myself.
On communicating thoughtfully in order to communicate effectively:
> ...being thoughtful in one's communication is important to advance your cause. If you're thoughtless, even if you're correct, you risk working against your own ends because the person on the other end might not be able to look past your thoughtlessness.
On the fact that even the author can't and doesn't read every line of every dependency they pull in:
> ...As someone who uses FOSS and tries hard to be discriminating with the dependencies I use, it is just not possible for me to review every line of code I depend on. Even if I could somehow manage to read it all, I certainly wouldn't be able to understand it all in enough detail to be confident that it was doing what I thought it was doing.
Turns out I was just an asshole who wasn't self aware enough to understand my own feelings and was making other people around me hurt.
"I'd rather be right than popular, and I usually am".
But I mostly wasn't convincing, whether I was right or wrong. And that's what I'm continually working on. Being convincing is arguably more important than being right in the first place. And to be convincing you need to know your topic from a number of angles, and you need to know the audience you're playing to. But you also need to know whose worthy of convincing, because there are some (plenty) that won't be convinced either way, so don't waste your time on them - know a lost cause so as to avoid committing self-denial-of-service.
But the very bad thing about that philosophy is that it makes one tend to default to thinking that it's others that are inferior and can't handle the facts you see so clearly... so if it turns out you were not right in the end, we've got the worst case scenario -- Now you're not just preventing yourself from learning and improving (which should always be the goal), you've become just like a troll, an asshole who's wrong.
I agree. It takes discipline to be right without being righteous.
Not to disagree, but, quoting the article, I'd like to "underscore the asymmetry" between people that are right and condescending VS people that are wrong, think they are right (or don't care if they are, most of the times) and are condescending just because they can or because that's the way they think you advance your career.
They read somewhere that CEOs have a bad temper and imply that bad temper is necessary to become CEO.
Only from selfish point of view. If you are wrong and convince people to be wrong too, you just very likely made world less good place.
It is important to be right and double check yourself especially if you are able to be convincing.
This is only true when being "correct" doesn't really matter very much (certainly true on the Internet). One of the hard earned pieces of wisdom from age is that the situations in which there IS a "correct" AND it matters are far fewer than you think. Most decisions are a wash so it's fine to concede.
In addition, "polite" is in the eye of the beholder. I can oppose something politely and people will still scream about how unreasonable I am being.
The problem is that "correct" sometimes matters a LOT and has opposition for non-"correct" reasons. Those same people that you deferred to so many times in the past now get very angry when you suddenly put a stick in the ground and go "No. This is correct and it matters and I'm not moving on it." In addition you will find that there is an entire class of social manipulators who just like to "play poker" and will go absolutely apoplectic when you will not budge a decision without new factual evidence.
“The reasonable man adapts himself to the world: the unreasonable one persists in trying to adapt the world to himself. Therefore all progress depends on the unreasonable man.”--George Bernard Shaw
In short, be polite and understanding by default but don't be a pushover.
Is it tied to HN or hacker/startup culture, SV mentality? To pride oneself on being an effective robot? No care in the world except building the next great thing, damned be everything else? Maybe it's about the types of people attracted to computers? I hear the same kind of response daily at work, I mean, generally, we're not known to be the most socially intelligent group.
Thanks for your work BurntSushi, Andrew, ripgrep is great.
Sometimes we fill the picture in favorably, but if there's anything in a comment that rubs us the wrong way—anything activating—then the picture we create is not a nice one. Since a forum like HN gets millions of posts a year, there are inevitably plenty of hooks to snag us in this way. If you stop and think about what that means experientially, it's sort of shocking: it means that we are surrounded by our own demons. Since everyone else is having the same experience, a forum like this is a community of people who feel surrounded by their own demons, not realizing that we are mostly creating them for ourselves. This is why disagreements degenerate so quickly, even though each party is sure that they're the one in good faith. It's also why you'll regularly see generalizations about how awful the community is, posted by users who participate in it every day. It's surprising that it can function at all.
By "demons" I just mean a composite of our own past painful experiences, which is the store we draw on when connecting the dots about someone else in a defensive way. This phenomenon isn't only online; it happens everywhere that people don't know each other well. But online, we know each other so little that there are more dots to connect.
I've been thinking about this all day since I read it. Thanks for this. It's a profound insight for me.
This along with BurntSushi's insight about emotional code smell makes this one of the best hn post ever for me.
You can.
And probably you should.
Just accept it is not the _only_ tool.
You have a life too, things come at different angles, from everywhere, and impact you and the people you love differently.
I've been working hard for the past 25 years to become an emotionless decision maker when it's about my primary job: writing software.
I don't keep code around because I'm attached to it, if there's a better way to execute the same thing.
I don't reject other people's code just because it's not the way I would write it.
I don't research pureness, I know that to be useful and, most importantly, correct, software has to solve a lot of edge cases and inevitably is going to be full of trade offs.
I don't only work on new software or features, I don't plan complete rewrites of legacy systems if I can work around the problem, I do maintainance, even of legacy systems, maybe nobody is gonna credit you for doing it, but it's what keeps the World spinning and rationally it's one of the most important tasks.
I used to care about "what will people think if I'll solve this with an 'if'?", now I know that it was my emotions blocking me from doing the right thing.
I don't take bug reports personally, although there are times I struggle with the usual "haven't read the documentation" or "it doesn't work it's not really helpful as a description of the problem", but I try to let my emotions out of it, I try to stay away from them as much as possible.
Emotionless doesn't mean rude or "acting like a killing machine" it means you're detached from emotions and when a problem arise you help to find the solution instead of blaming someone or something.
Emotionless is that alert on the plane that tells you to put your oxygen mask first, before helping your children. Because it's the most rational and logic thing to do, the opposite of what a parent would instinctively do out of love.
> Turns out I was just an asshole
Don't be an asshole is a good start too :)
But sometimes is hard when you're young and everyone older around you talks about tricking the system while you just want to fix it (at least that was my struggle with it when I was younger).
> You can.
This is narrowly true in theory, noting particularly that it applies only after the problem is defined, because defining a problem is an application of values which ultimately are rooted not in rationality but in emotional preference.
In practice, people don't and probably practically cannot fully define problems in advance of approaching them, but feel out the parameters of the problem in the course of addressing it, so attempting an unemotional approach invaluable means accepting an incomplete understanding of the problem.
There is no switch that make it true just by flipping it.
That's why I said I've been trying for the past 25 years, it's a process.
On the other hand empathy doesn't work much better in practice.
People (we) are largely irrational.
> attempting an unemotional approach invaluable means accepting an incomplete understanding of the problem.
Of course!
That's a bit silly to say.
It doesn't work like that, it's like saying that if you ignore your arm it stops working.
And nobody ever said you should ignore emotions, but that you are perfectly capable of behaving differently in different situations.
You're not always emotionally charged, you are not always made of steel, you can control what happens to you much more than you imagine.
> Psychology and neuroscience have again and again found how irrational and emotional
Irrational and hormonal, as in "driven by hormones", the layman term is emotional, but it isn't entirely correct.
Emotional is about emotions (nobody consider rage or sadness or loneliness or "I wanna be left alone" emotions, they are considered bad things, something to be removed), but being autistic is not being emotional, for example.
There are a lot of behaviours not caused by emotions, which, BTW, are located in our brain, our logic processing unit, not in our hearts. They are in its backend, the irrational brain, and they are perfectly rational: they are a tool humans used to survive and take life-saving decisions in the span of milliseconds.
They are the same thing as a fire alarm, they signal a change of state, possibly for the worse.
I'll go further and say that we all are at the mercy of our selfish genes, as R. Dawkins proved.
Ignore your emotions and you'll become emotionally immature and a person people won't like to interact with, because your emotions will come up when inappropriate.
The importance of learning to feel and label your emotions is one of the most basic findings in psychology.
I recommend reading about Non-Violent-Communication. It sounds like it is something completely different, but it is a practice for learning to labeling you emotions in different situations, and then being able to react more appropriately.
https://en.wikipedia.org/wiki/Nonviolent_Communication https://www.youtube.com/watch?v=VT8KGgDo6TY
Sorry but no, it doesn't.
If you fall you stretch your arms forward, to protect your head, it's an automatism, your body works the way it is supposed to work even when you ignore it
Most of what it does it's independent from your will
It just works
The heart doesn't stop beating if you don't think about it
All that said, as a complete aside, I have tremendous respect for Mr Gallant. Everything he writes is gold, and if you haven't yet, I'd recommend taking a look at his awesome open source projects.
Has anyone else had this experience? Maybe the trouble comes with libraries as popular as ripgrep, or maybe it comes more often to a specific type of person. I'm generally not very patient, so I'd expect to have much more trouble than other maintainers, but I'm also just not negatively affected by bugs and PRs at all. People filing them have taken their time to do it, which means my code is important enough to them to spend time improving it, and bugs happen, so I take bug reports as compliments rather than as personal failures.
Hopefully someone else has the same experience as me, and maybe we can figure out how to generalize that experience for others.
I think the other thing I'd like to re-iterate is that the vast majority of my interaction with others in FOSS is either neutral or positive. This is kind of what I meant by the negativity overshadowing the positive and how, at least for me personally, the negativity sticks in my memories more than anything else.
I think this is the issue. I get maybe a few issues a month, so I don't get enough volume to have very negative interactions.
By the way, thanks for ripgrep, it's one of the most-used and most useful tools in my command line.
I always get new bugs or low-score reviews claiming "the extension didn't detect my dupes!" - when actually the messages are not quite dupes, just very similar, and I have to err on the side of caution when suggesting messages to delete.
So I have to keep explaining this to people who are telling me that my extension sucks or doesn't work.
But - with some other FOSS libraries it's been mostly positive.
Personally, by the time I release something as open source, it is Finished. That is, it's feature complete and working to my satisfaction, and as far as I'm concerned probably won't need much in the way of improvement going forward.
So while I do occasionally get feedback from people using it, there's never any pressing need for me to do anything about it. There have been a handful of genuine bugs over the years, but mostly it's requests for features that I don't need, and therefore probably won't add.
Occasionally somebody will go as far as adding one of those features themselves, including a patch or PR with the addition. Thus far, all of those cases have been for stuff I hadn't personally seen as necessary, so my only response is to politely decline and suggest the author forks off his own version if he wants to publish that change.
My philosophy, in short, is that the code I release is out there to use if you want. But it's not something that needs "maintenance". It's Finished.
It was quite sad to read this post for me, because I can see that the author has partly interwoven their sense of self-worth with their OSS work. The whole blog is a painful balancing act between speaking their mind and being polite which can only end in more grief for them until they let their displeasure show.
This is not coincidentally the impression I also get from the larger online Rust community. They repress their feelings, always trying to be prim and proper in their interactions, but those normal(!) negative feeling are still there and vent in bizarre ways, such as bothering random Rust developers the other day because their code is not "safe enough".
That's exactly what setting boundaries is.
You can put that in a README, but people won't read it. Github won't let you disable i̶s̶s̶u̶e̶s̶ ̶l̶a̶s̶t̶ ̶I̶ ̶l̶o̶o̶k̶e̶d̶ pull requests, unless you archive the project (making it read-only). Is it possible on one of the other hosting services, like Gitlab?
We need better ways to draw boundaries around open source projects and contributors.
ETA: How can we counter the Bullshit Asymmetry Principle? https://en.wikipedia.org/wiki/Bullshit#Bullshit_asymmetry_pr...
> The amount of energy needed to refute bullshit is an order of magnitude bigger than to produce it.
On GitHub you can disable issues but not pull requests.
[0] https://en.wikipedia.org/wiki/Useless_machine [1] https://developer.github.com/v3/activity/events/types/#pullr...
Unfortunately that useful information comes mixed in with, eg, users who think the author's time is worth so much less than theirs (didn't the author demonstrate it was worth nothing by offering this work for free?) they want hand-holding for every little thing. The author can put it in README.md and point these guys at it when closing their issue.
I mean I'm trying to pick an alternative to Ant Design (because Chinese) and there's a billion of them, but I'm having trouble deciding which one is the best option - Bootstrap, because most stars? Material UI because it shows up high in search results? And there's at least dozens more that will be objectively better (on a technical level) which I'll probably never see, and which I'll probably never use (because low popularity means low engagement and no guarantees that it'll still be around and maintained a few years down the line).
echo "Don't" >CONTRIBUTING
git add CONTRIBUTING
git ci -m "Clarify that contributions are not welcome"
git pushLooks like you can on GitLab under "Settings" > "General" > "Visibility, project features, permissions".
Disclaimer: nobody submits contributions to my hobby projects anyway.
I’ve seen this in quite a few people, both online and in the real world – people that think they are all about logic and not about emotions. And in each and every case, I believe they are only fooling themselves in thinking so. Emotions are really powerful and they affect us all in far more ways than a lot of people like to admit.
Love, hate, jealousy, insecurity, and the list goes on.
People are really good at rationalizing their feelings though, so it is easy to get fooled into thinking that a decision or stance we took was based in some objective truth when in reality emotions were steering us.
Yet so many people refuse to accept that this is the case for them just like it is for everyone else. Even though it is blatantly clear to a lot of people around them when they are acting as they do because of emotions.
I think the world would be a better place if everyone admitted to themselves that emotions is a part of our nature. Then perhaps more people would be able to handle their own emotions better, and we would all, including themselves, be better off.
I certainly try to listen to my emotions and to understand how they effect me.
All the stuff that's neither logic or emotion. Which tend to be invisible to geeks.
I came up with gamers. Most very smart, in the high IQ and educational achievement departments. About half were very dismissive of other people's ideas, views. "I'm smart and logical. You're wrong. Meaning you're dumb, illogical, or worse, emotional."
One thing that I found surprising was that the author considered comments along the lines of "Just chiming in to say that I would also really like this feature." to be rude. I would have thought it was helpful feedback; more people indicating the value of a feature seems helpful in assessing whether it's worth doing (if it's not obvious for other reasons).
This probably does not apply to OSS projects that are products built by companies.
In my opinion a good feature request does all that legwork. The goal (my goal) is to arm the maintainer with a action-plan that they can pull out of the drawer and start working on immidiately. If this doesn't work — seeing that the other side did the legwork can still be motivating and creates a good climate.
Just imagine we are not talking about code, but about cool Lego-towers for a moment. If you want the other kid to add a certain detail to the tower, the least you can do is explain it to them properly. Better is to inspire their creativity alltogether: who says your idea is the only/best way to solve the problem?
Quite definitly. But even more helpful would be if you listed all scenarios you can think of where this would be helpful, even ones that are not useful to you, but might be to others.
Then you think about how it would impact existing functionality (both positively and negatively), would it be the consistent thing to do? Where could be traps and pitfalls? Maybe even ad a mockup of hoe it would look.
If you did that, the maintainer sees that you didn't just demand a feature drive-by-shooting-style, but you did the actual legwork of fleshing the thing out. Don't marry your own ideas, others might be inspired by you and have a even better way of solving this.
If you are writing one sentence you are doing to little usually (in my eyes).
The danger with this is encouraging overengineering. It's easy, particularly if someone else is going to be doing the work, to say, "Maybe someone out there might someday want to do X, Y, or Z"; causing a maintainer to put a whole lot of effort and extra complexity into their code for use cases which nobody uses.
In fact, when only a single person wants a feature, there's a similar risk, that I'll put a whole lot of extra effort and complexity into the code for a use case which only one person thinks they want; and that after it's implemented, they decide they don't like it and go somewhere else anyway.
That's why I didn't understand why he considered "I would also use this feature" comments to be rude or unhelpful. I would think knowing that at least two (or three or four) people wanted a feature would be helpful feedback in knowing what kinds of things were worth adding extra complexity.
Perhaps in his mind they took the tone of, "Hey yeah, we're all waiting for you to do this work for us for free; what's the hold-up? Get cracking!" Which of course would be a bad attitude; but looking at the exact thing he quoted, I'd say that's more about what he's reading into it than what the commenter actually said.
Perhaps the point was that unless you have something useful to add to a GitHub issue then don't comment.
People don't want Reddit style pun threads here and yet to hear complaints about that being enforced, in fact the opposite. GitHub issues is similar in that sense. Everything has its place and time.
That's an UI problem.
If a bug affects 100% of the users no matter what or just a few of them, in some weird condition and setup, is completely different.
There should be a way to be prioritize or sort bugs by popularity.
If you add one more use case that might help the maintainer reconsider the feature, then I’d find it acceptable. Sometimes the issue opener didn’t explain the utility that well or wrote some example that made it sound like it would be a niche feature and not worth it.
And regardless, for some projects, at some times, you just feel like working what you feel like working on, and more users clamoring for a particular feature just doesn't motivate you.
First, the assumption that ‘voting’ is an appropriate and helpful form of social interaction with someone who has not expressly invited that participation from others.
Second, the assumption that a group expression of a statement is emotionally equivalent to a single individual’s expression of the same statement.
These are not universally shared assumptions, especially in open source.
> One thing that I found surprising was that the author considered comments along the lines of "Just chiming in to say that I would also really like this feature." to be rude.
I mentioned on r/rust that "rude" is perhaps too strong of a word. I was more or less thinking of things that annoyed or grated on me, and then just kind of lumped that in with "rude." To be sure, I do not get to lay claim to a universal definition of rudeness. :-)
But yeah, I think others responding to you pretty much summed up why it can be mildly annoying. And to be clear, I do think part of this is on me: I'm working on trying to let such minor things like this slide more. It's a process.
So to reiterate: any bug report or pull request that isn't good will waste the maintainer's time and effort. I wonder if the community could address that. I mean, most anyone could screen issues for tone and the effort taken. We could have a group of volunteers that tag issues worthy of the maintainer's time and explain to reporters how they should improve. That would be a valuable contribution to FOSS.
Setting up the system to do this is not trivial, however. Ideally I'd love to just tag my repos for issue review. I'd wish for the reviewers to be trustworthy. And as a volunteer reviewer I'd want a queue of issues to review, and I'd require some compensation (e.g. a profile page showing how helpful I've been).
I guess the feasibility of this idea comes down to the availability of volunteers. What do you people think?
PS. Burntsushi, if you're reading this, huge thanks for your great software. You're one of the people whose contributions I appreciate the most in FOSS.
You have an interesting idea, but it seems tricky to pull off in practice. To be clear, I'm not necessarily trying to say that low effort issues _are_ a waste of my time, but rather, that is sometimes how _I feel_. I think it would be good to collectively reduce their occurrence---I'm not sure how---but sometimes the choice isn't between "low effort issue" and "high quality issue," but rather, "low effort issue" and "none at all." In the latter case, I'm not sure which I would prefer. Certainly, sometimes low effort issues really do lead to productive outcomes.
It's tough and it's not something that has an easy answer. Some part of it is me overcoming how negatively I feel about them and another part is perhaps others spending a bit more time filing good issues. At least, in my opinion anyway!
Maintainer burnout is a real problem and I personally would run a real risk if I ever released something worthwhile.
I agree that the idea is raw and difficult to implement, but we should think about these things as a community (ie. I don't have the energy to do anything about it, but I'm hoping someone would).
Often times I'll run across a FOSS project that claims to solve a problem I have, encounter a bug that makes the project useless for my purposes, and discover that said bug has had an open entry in the issue tracker for years. This even occurs in major FOSS software with paid developers working on it.
Clearly no one actually cares about the bug, and "chiming in" is apparently considered rude. So I ignore your software and move on. Whatever, you don't owe me anything.
Then some day I respond to a forum post by someone asking about experiences with your software, and relate mine. Apparently this is also rude, and I should have filed a bug report.
I guess my question is: is there any scenario under which one can actually provide feedback other than praise that you will accept?
Something like this is fine with me: "I'm having this issue as well. It's unusable for me without this feature, because my use case is such that..." In fact, this is downright helpful, because I may be able to offer an alternative solution using already-implemented functionality.
Here's the same post, but rude and unhelpful: "I'm having this issue as well. This project is useless without this."
People often judge the merits of a project based on their own use-case and nothing more. If they can't use it for their use-case, they can't imagine any other use-cases where it's useful, and so the project is deemed useless (or some other hyperbolic, universal judgement of worth).
I clarified this a bit more in my article.
> Then some day I respond to a forum post by someone asking about experiences with your software, and relate mine. Apparently this is also rude, and I should have filed a bug report.
... that is definitely not what I said. What I said was this:
> Unconstructively whining about software on [insert social medium here].
I'm not sure how this means you can't post constructive critical feedback. That's certainly fair game.
I hope you don’t think this comment is also rude!
Anyway, let me say, ripgrep is an amazing fucking tool. Really love it. <3
This resonates so much. Users who blatantly waste your time despite multiple cues steering them towards actionable bug reports are worse then trolls or haters IMO. (I use issue templates, with all caps and explosive emojis, and I even put specific actionable wiki links in error messages, but some people still insist on opening barebones “doesn’t work” bug reports. Or duplicates. People open duplicates when there are like three open issues in total and one is clearly the same issue as theirs. What the hell?)
With trolls or haters you can simply drop the ban hammer, easy. With this kind of high-maintenance users, it’s hard to decide whether you should waste time helping them, or simply refuse action until they get their act together.
> It can be maddening. But that's emotions for you. They certainly aren't always rational. The documentation could probably be clearer. Or the user could have just missed that part of the documentation. Or the user doesn't have experience maintaining FOSS projects or filing bug reports and maybe does not know how to provide an easy reproduction. These are all perfectly reasonable things to have happen, and it's why I do my best not to let my emotions get the best of me. While the way I feel is important, empathizing with the person on the other end of the wire is important too.
Honestly it’s hard to empathize with users who can’t follow “run command with --debug, post entire output” or who don’t bother to read anything when the error message clearly says “here’s a wiki article for your specific error, read it before reporting a bug”.
We also had a helpdesk-style support chat for our developer tooling, complete with a bot that would respond to common error messages with links to solutions and people would STILL directly message engineers that supported the tools asking for help on trivial build issues or inability to use command line tools.
It was sort of baffling to see, its not like its any quicker than doing the right thing, it was simply people being lazy. Some of it's an Eternal September, too, I think.
burntsushi is one of these people in open source that we would need more of — both because of the quality of his work and the positive and grown way he interacts with the world.
If you read this: thank you for the incredible effort, switching to your software was a complete no-brainer as it is well documented and works — and before this creates pressure: it certainly will not get any worse. Work at your own pace.
What I've learnt is that if you want something done then ask politely, if you want something done now then try and do it yourself. That's the inherent beauty of open source.
I have a hard time conveying my thoughts properly without writing them down. You would watch me blubber about the process rather than the problem.
Beside, it being a privacy issue and not comfortable sharing something that might get memed or used for political purposes.
It helps convey some intent. Hm, that would actually be interesting. A browser plugin that automatically inserts emojis to convey your current emotions or feelings. You can set it yourself, it may learn from your interactions too.
If you consider what you want and you think that it clearly aligns with the maintainer’s needs, then consider sharing your ‘want’ along with an explanation of why you think it’s valuable for their needs.
If you can’t figure out what their needs are, and you can’t provide an explanation for why this is important to them, then there’s no reason for you to bring it up to them at all.
(This will seem abrupt, but it’s not meant to be hurtful in any way - I’m just literal and sociology-ish. I did my best to be clear and kind about my view. No harm intended, apologies if any caused.)
What always fascinated me is just how much the form of a request impacted the probability that I would spend energy to help. Someone who submits a polite and well thought-out bug report just makes you want to help them. OTOH someone writing "Hey when will you fix your stupid bug? My startup has already lost $XXX in revenue because of you" just fills you with schadenfreude and makes you want to troll that person, even if the request is essentially the same in both cases. Some users just don't understand how much they undermine their requests. This kind of attitude may work if you are a boss or a customer, but open source runs on common courtesy.
One bit of the article that I disagreed with is classifying "Just chiming in to say that I would also really like this feature" as rude. Yes, it is passive aggression, but it is better than active aggression and still provides a bit of valuable information. Open source at its best is like a swarm of locusts devouring the problem domain and for this to work information must flow from users back to developers.
Oh, and thanks for your open source work, burntsushi!
Now, maybe the maintainer doesn't want this form of input, or prefers to have the input in the form of issue voting, etc. Overall though I don't see the action as inherently rude.
Then again I'm not a major project maintainer.
Respent for every maintainer and contributor, it's not easy. You can read some issues in the repository, the authors of some issues are just complaining or criticizing the idea or bug, it's unfair and rude. in the end, hurt maintainer's passions. Every developer should know it and respect it like the README or guideline before posting issues or comments.
It's a fantastic post about the analysis of OSS maintainer, Respect for Mr. Gallant.
This makes perfect sense. The author seems to understand well that there's a balance to be struck when working on OSS; you can't always work only on the stuff you want to work on. On the other hand, being the one who initiates and maintains some FOSS has to mean something. If it doesn't mean you get to decide (within reason) on somewhat subjective calls such as "is this feature worth implementing when weighed against the maintenance burden?" then contributing and maintaining OSS ends up meaning nothing other than willingly doing work for free and letting everyone else in the world be your boss. Clearly that's an untenable situation.
> out the issue template?
Really? I'm thankful when people just report bugs, rather than ignoring them. Assuming they're actual bugs. I can always ask them for details and wait until they give them.
I feel like I've been saved the embarrassment of the bug continuing to live on in the code.
> Or, in cases where bugs are user errors that could be
> resolved by just reading the documentation, all I can
> think of is: I spent this time gifting this user some
> software, but they can't even read the README before
> filing a bug report?
For me, I'm frustrated that the UI and documentation are not clear enough, or not attractive enough, to ensure everybody reads them and abides by them. I mean, for me it's an imperfection on my part, or perhaps "basic human nature".
What I'm most frustrated about is when people can invest the time and effort to write long bug reports without realizing that the behavior they're seeing is not a bug at all.
Another source of frustration is bugs which are not mine, but affect the behavior of my software, and which I can mostly do nothing about.
It was also for me a gateway in the sense I see rust come up on HN, but only when I started using these tools I realised how fast and light those little apps can be. It made me want to learn Rust and seeing the community around it I realise, it is a very wonderful thing.
“That looks like an excellent feature! Good work, thanks for showing it to me :)” [pull request closed]
“I’m sorry to hear that it’s not working out for you. If you’re able to work out what went wrong, feel free to post an update.” [closes issue]
“That’s an unfortunate flaw to have encountered. It doesn’t come up in my usage, but I agree with your diagnosis. If you end up fixing it in your own fork, please do mention this issue.” [closes issue]
And an accompanying “Open source user guide” that covers the basics (much of which I don’t know today)
“How to fork, repackage, and replace an upstream Node dependency when you’re trying to fix a bug”
“When is it appropriate to submit an issue/feature/pull request?”
“How do I upvote something I want to see an open source author do for me?”
etc.
We have learned to ignore this, and adopted a policy that we just don't care about ratings. If the user is asking for help in a polite way, we help him however we can, for free. If he is an entitled jerk, we just mock him for being entitled.
Of course, then some start ranting how immature our behavior is are and how we must learn to treat our 'customers' better. Of course, right.
Slightly off topic - I can understand that people publish on Google Play to get reach, but it's upsetting when open source projects make it their sole binary distribution mechanism. It is strange to mandate that the user adopt the model of centralized control by Google, when 3rd party binary distribution is just as well supported on Android as any other platform. This goes for any app, of course, but open source apps in particular ought to know better (and with F-Droid, need not even host the files themselves).
As for alternatives. FCM (or, for that matter, Apple's APNS) requires a persistent connection between a device and push servers to work. Curiously, both Google and Apple seem to be doing this via maintaining a modified XMPP protocol. And this just can't be replicated by any other party: to maintain a persistent connection an app must work all the time and be active in the background, and both Google and Apple heavily suppress background app activity (google has some workarounds, but they become more and more restricted with each OS update).
All in all, I believe that this policy is begging for some antitrust action, so device owners could legally subscribe to alternative app stores and push notification providers. From what I know about XMPP, replicating a server part of a push service should not be insanely hard to do.
Keeping a TCP connection open on a mobile link requires occasional keepalive package exchange. That wakes up the mobile radio, which is quite power hungry if the device isn't doing anything else.
That radio wakeup is needed for each independent TCP connection's keepalives, so to minimise the power consumption of multiple idle app/notifier connections, you want them multiplexed over a single TCP connection.
Another factor is the ability to send the underlying event over a lower-level mobile protocol. The mobile base station is regularly exchanging with the handset anyway, to maintain a link which can carry station-to-handset events already and to monitor the link. The whole thing is very well optimised for the radio. So an occasional application event can be sent over that link as well without needing any extra keepalives or radio wakeups. That's the most power efficient thing to do in principle, assuming application events aren't happening often.
Unfortunately, having lots of independent push notification providers being used by different apps at the same time would be quite power hungry.
I think it would be great if a user could direct all the subscriptions through one or two services of their choice though, including an option to provide their own service URL that they run themselves.
ego-boosting: projects I don't care much and that I give away just because I enjoy making them and increment my selfish ego-feelings when someone uses it.
work: a project that has a specific work purpose or is the base or core product and that I want the users to adopt it.
Now, I hope the following isn't too rude, but it's the way I developed a thick skin, and also how I think about it when trolls and haters come around my projects: being a repo maintainer gives you a (small) position of power (take it easy, you are not Torvalds!). That is, when someone downloads or uses your project, is that someone that came to you and not the way around; when shitposting in some forum happens, it's them talking about you and not the way around. When there is a rude request of some type, it's them needing you and not the way around.
When someone comes with "you should X...", my toughs are "yes, I should because, instead of being completely useless about it, I'm the only one who can do something about it".
Of course, the above applies to the ego-boosting kind of projects more than to the work ones (since I want adopters coming and staying around, I can be more flexible).
If the request or critique comes from well educated, patient users, then obviously the above doesn't apply and the support/request goes through smoothly.
If the critique comes from a peer maintainer or someone you esteem, then the situation could be different (and happened a few times to me, and I can't remember how I felt).
Until now, I’ve always shied away from any of the modern `grep`-like programs as I prefer to be comfortable with the standardised utilities as specified by POSIX (`find` and `grep`). However, I often find myself using GNU extensions – since they’re so useful and make certain tasks easier. I figured today would be a good day to take it a step further and try out `ripgrep`. One feature that immediately appeals to me is that `rg` automatically respects `.gitignore` and skips hidden files/directories and binary files; When searching recursively, I pretty much always use `-I` with GNU grep and often use its `--exclude` and `--exclude-dir` options (features not specified by POSIX). I’m looking forward to experimenting with ripgrep and discovering what other benefits it can offer.
So thanks, Burntsushi/Andrew.
That said, I never had the request to rewrite in a different programming language, yet. Downstream library users as well as package maintainers seem delighted with Python.
I think GitHub sponsors and patreon-like systems can be the way forward. If open source users said "hey, I'll give (10/20/50/whatevers affordable to me now) bucks a month toward open source projects" and then proportion them across projects they choose, that can go forward to things.
But open source is much bigger than projects themselves. One example would be package maintainers on Debian, Ubuntu, Fedora, Arch, BSD port systems, and so on. They put enough time into it they should be compensated.
I think with these new platforms like GH Sponsors, we're on a trajectory toward fixing this.
> I got a drive-by comment effectively telling me to use a “working” license instead, along with some (what felt like) condescending lecture on how licensing works.
I hope my many drive-by github issues on licenses over the years weren't taken as condescending. I want to avoid the headache in the future of a migration, an example of what it can entail: https://github.com/twbs/bootstrap/issues/2054
That's a lot of work.
Worse is the matter of ambiguity with certain licenses. Having something clear and simple that'll work across jurisdictions is a winner.
Wishful thinking or intent doesn't matter when the door is left open for a legal adversary different interpretation of the facts, then having to pay expenses to defend it. That's drama in and of itself, but could also really hurt a business, esp. in early phases.
I made some issues asking for some enhancements and was kindly denied. I like this. It tells me the project is focused. Well I liked it because I got a proper response within 48 hours. Most projects just have things laying there forever.
Andrew, if you’re reading this. How do you manage your time to get so much time to write OS code? Also how do you make enough money to be sustainable ?
> How do you manage your time to get so much time to write OS code?
I don't think there's any secret to it. I just love it, so I wind up _making_ time for it. And my life circumstances allow for it.
> Also how do you make enough money to be sustainable?
I work in Cambridge, MA on stuff mostly unrelated to FOSS. I'm very fortunate to live in a location where salaries for engineers are pretty good.
I'm a happy ripgrep user. I'm impressed by its speed, its ease of use, and the positive vibe on the issue tracker. Naturally, I never reached out to burntsushi -- I don't have anything to complain about!
> When I was a young adult, I'd pride myself on being “logical” and “free of emotional decision making.” Like all good lies we tell to ourselves, there's a kernel of truth to it. But for the most part, at least for me personally, I am a deeply emotional being.
I wonder if this is in part related to getting older. When I was younger, I was into being logical myself. But as best I can tell, that was true for myself back then: I cared about work progressing effectively, and in my mind the best to achieve that was through direct, blunt communication. When I was on the receiving end of that, I was happy about it. Now that I'm older and have kids, I do think a lot more about how to say things. It does make working with people who are exactly like I was a bit slower, but it increases the pool of people I can collaborate with. So it's worth it (...I tell myself).
> Rudeness, on the other hand, comes in all shapes and sizes: “Just chiming in to say that I would also really like this feature.”
This is a great example. From the side of the person leaving this comment, it feels so innocuous! "I'm just saying I'd like this too. Ignore me if you want, I'm just adding a harmless data point." But from the side of the person who's getting tens of these messages, it feels so very draining.
Regards, A very happy user
I recently read an article titled "Healthy Open Source Maintenance"[1], which proposed the introduction of a MAINTENANCE_MANIFESTO.md, meant to communicate expectations.
Quoting the fun part:
"Even though this idea is still in early stages, for the sake of clarity, this is what a selection of manifestos could look like:
- The sponsor me to get priority on your bug fix manifesto.
- The this is free goods and service, so you get what you get manifesto.
- The micro-donations to keep the project alive, but I decide what to work on manifesto.
- The hire the agency I work for to sponsor features manifesto.
…
The presence of the Healthy Maintainer Manifesto will be a tool to deflect social pressure. This will help maintainers that suffer from avoidance anxiety because they are not obligated to pay the maintenance taxes. Their manifesto says so! If any demanding user wants to pressure them into doing anything in particular, they can point them to the manifesto. The manifesto replaces complicated social interactions with a discharge form. The goal of this is to protect the maintainer, because, after all, maintainers are the cornerstone of open source—and thus all the software industry. And because we all prefer a community where maintainers are happy, and not at the brink of burnout."
[1] https://www.lullabot.com/articles/healthy-open-source-mainte...
I only create an issue in a bug tracker for bugs or change request. The interaction feels impersonal.
On the other hand with a forum you get more of a community feel. There might be a subforum for writing about your experience with the software (so you get positive feedback) and one where users help each other, with the maintainer only chiming in occasionally.
Andrew should not have to deflect burning arrows fired in his direction on a regular basis, and when they are fired he needs be able to cut them down before they make a mark. Further, while he has developed the required skills, his counterparts haven't. I remember an interaction I had with Andrew where he mistook something I said as a flaming arrow and acted accordingly. Realizing this, I immediately considered how what I said could be misinterpreted and did not take offense to his reaction. His situation is far different from mine and he's fighting battles I can only imagine.
For his sake, and that of others, there needs to be a concerted effort to address the difficulties that open source authors are dealing with. In an organization, an employer facilitates various types of training to help employees navigate challenging situations. Ethics and professional conduct are learned, as well as conflict resolution. I've taken such training a number of times and continue to learn from them. There is a huge chasm between knowing and doing, though, so hands-on training is required to internalize these skills.
I propose a concerted effort to provide "soft skill" training for the technology community. Users and authors of open source will benefit. I realize that this alone will be insufficient but it is one concrete step that can be taken in the immediate future to begin to address challenges that many people are having.
Free time is unscheduled is I think reasonable and it make sense. But also you might have nothing to change for some time, so until then there would not have any next release.
I write many programs too, but rarely get any comments, whether positive or negative or neutral. (One exception is my "bystand" NNTP client; I have received a patch to make it work on BSD, and some bug fixes, which I have accepted.)
And to write a FAQ document, I think you would need to know the questions.
But yeah, public domain isn't well-defined internationally, so MIT and public domain is more permissive than just public domain, in practice.
This sounds really weird to me. It's not the first time it's been said either, but my experiences being a FOSS maintainer (for some reasonably popular projects) aren't at all dwarfed by negative comments. In my experiences, the comments are almost universally along the lines of "How do I do X?" and "Thanks!".
Thinking it over, there have been 2 instances I'd consider rude in the last few years. One was just... someone being overly demanding, the other was (I think) just a young person not used to being told No. ;)
Nothing else negative comes to mind.
My point is that being an OSS maintainer isn't automatically something like the author describes. Some Communities are nice, and the people help each other out authentically. :)
Even just restricting in to FOSS, I will often oscillate between different projects in order to keep things fresh and avoid burning out. For example, almost a year ago, I started working on a rewrite of one of my Rust libraries. I hit a thorny problem and my motivation waned, so I moved on to something else. I've just recently moved back to continue my rewrite, now almost a year later, with renewed vigor.
I personally think a major issue is he may have over-stretched in terms of the repos he sought to create and support as a maintainer. He has 140 public repos many of them significant. As his interests, shifted I have experienced that the pace of reviewing and responding to comments and pull requests became really slow and ultimately led to frustration among contributors as well.
Might have been better to clearly prioritize and state which repositories he planned to support and which not and possibly either hand over ownership or mark the repo he didn't intend to support as orphaned.
I hope you don't take my comments as combative, I'm trying to speak from experience. I also learned of Mr. Gallant from being on the Go code review lists. I also noticed he seemed to "switch" to Rust. With that knowledge, anything I used heavily I would fork. If one day the two can reconcile, great. If not, congratulations, you own it until you get tired of it and someone else forks it. Such is the nature of open source!
Mentioning that you don't intend to maintain a project is not "labour".
If you don't look at any PR in the next 3/6 months, mark it unsupported.
I got the same vibe from the article TBH, a lot of what he considers rude just seems like well intentioned, if possibly misunderstood, suggestions.
Consider that even filing a bug report is an effort 95% of users would never make. So even doing that is in most cases a contribution, at least as seen from the point of view of the submitter. But the author actually considers it an affront if it doesn't conform to the bug report template.
With the disclaimer that I have never maintained a highly popular GitHub repo, I get a lot of feedback for my projects that is unuseable, and some that is aggravating. I always have the option of simply ignoring it, and that's the end of that interaction. Perhaps the author is not actually good at setting boundaries and ends up blaming others for imposing.
This was not the vibe I meant to express. I'm sorry it came across that way. I meant to express how it made me _feel_. The next paragraph goes on to say how such issues are eminently reasonable in a lot of cases, and my coming to terms with that is a struggle I face.
My goal was to explain my own perspective in the hope that it increases understanding of everyone involved.
> Perhaps the author is not actually good at setting boundaries and ends up blaming others for imposing.
I tried really hard to leave blame out of my article (for anyone other than myself). That is not how I feel. On the contrary, as I mentioned in my article, setting boundaries is exactly what has helped me so much.
eg If you fork the code where the upstream project is obviously still active, and your changes target the same audience as the original (eg not taking in a new/experimental direction), then it could be rude.
However, if the upstream repo is no longer active the upstream authors may even happy to have someone picking up the leadership role for that particular project.
Characterizing this as "sense of entitlement" in a one liner is quite uncalled for.
In most cases it's a request for more of the maintainer's time to review, fix, and merge a change which they themselves likely don't need (otherwise they would have added it). In my experience, at least 80% of the time I end up spending more time and effort on accepting someone's change than I would have writing it myself. It only becomes net-positive when a contributor has a long-lived interest in the project and turns out to be a capable maintainer with similar sensibilities; even then there is significant ramp-up time. 99% of the time this doesn't happen; most contributions are drive-bys.
P.S. It so happens that that we previously interacted on that very PR thread: https://github.com/BurntSushi/toml/pull/65#issuecomment-1919...
Yup. I recognized your username and note that our interaction happened over a year after the original pull request discussion with no response from the repo owner.
> In my experience, at least 80% of the time I end up spending more time and effort on accepting someone's change than I would have writing it myself
Sure but the general culture and expectation in open source is when people find bugs or create features, as good citizens they share the changes upstream. If what you want to do is "throw the code over" or you've lost interest in developing further, all you need to do is to say that as common courtesy to your fellow open source developer especially if like in this case a lot of people use it. Lots of repos do this and clearly stated deprecation.
Whereas "the account has too many prominent repositories to accept contributions to in a reliable manner" lowers trust (which the burntsushi post also discusses).
It's as fair to say "I don't trust the project because it isn't maintained" as it is to say "the code is free, the maintainer's time is not". - I think this is exasperated by that "just fork it" works in a small sense for one or two patches; but there's a communal inertia that complicates it in a larger sense.
The one contributing the most gets notified to accept or deny the request.
How many people vet the author before installing something from npm? If you trust someone because they have some code that looks good, then shouldn't you trust contributors who have good code in there too.
How many points of cracks are there in the dependencies of dependency?
If it's a widely used tool then author wouldn't go inactive for a year without doing something unless they are not getting paid or even acknowledged for their efforts.
If people like security, then pin and mirror your dependencies. Don't update without checking them.
This is unworkable for a large number of reasons. But it's also largely beside the point. If the code is available under a permissive license and is not being maintained, fork it.
I have of course done this many times across different projects. Sometimes it works. Sometimes it doesn't. It isn't the silver bullet you portray it to be. Nevermind the risks involved due to supply chain attacks.
That's my software development experience in a nutshell.
In big projects, it's less problematic because it's never your failure, it's the entire teams failure :)
But this idea that you can respond to all issues won't scale very far.
As the author says we need to set boundaries. Maybe sometimes we're too nice in trying to respond to all bugs...
It's important to remember this. Many developers maintain software because they personally care about the projects, not because they have customers. They can always just drop everything and let the community deal with it, no questions asked.
Obviously it won't fix the damage of those who are rude or entitled, but perhaps it'll help provide a boost.
---
I think the various things people are trying to do to fund open source contributors and maintainers is a great thing. I love what GitHub is doing with its sponsorships and encourage folks to use that if it helps them.
But for me, I do not want money to get involved with what is right now a volunteer activity that I perform exclusively in my free time. If I accepted money, then at least for me personally, it would magnify a lot of the problems I struggle with in my blog post. I do not want that.
If folks insist, then I generally advocate donating it to a cause they find important. The ones I like are Wikipedia, The Internet Archive and Rails Girls.
---
[1] - https://old.reddit.com/r/rust/comments/er4qrn/my_foss_story/...
Hope this also resonates with you Andrew.
My own motivations in open source have been a bit different (and sometimes conflicted), and my experiences and perceptions also a bit different, but a lot is the same.
And xsv has been a standard work tool.
If I *EVER* write a piece of code that's .1% as good as RipGrep, I'll feel like a damned Superstar.I too, tend towards “prolix” (you can see that in my HN comments), and have often been told “TL;DR.”
I’ve been writing FOSS stuff for a couple of decades, and can relate to pretty much all of it.
But I keep writing it. No intention to stop.
I tend to write for a pretty tough crowd. It’s helped me to get comfortable with the fact that I only do this for my own reasons, and I’m glad to help others, but I don’t need their approval.
I write Swift code, these days. Has some similarities to Rust.
I use ripgrep and xsv daily at work - thank you Andrew aka burntsushi for sharing your code!
I've run my fair share of OSS over the years and had negative comments, rude bug reports, unconstructive API complaints etc. At my feelings about this specifically have evolved to: Fuck 'em it's free.
FOSS, itself, is the necessary lego kit the entire web (and to a lesser extent mobile and desktop etc) rns on... are you suggesting that everyone go buy Coldfusion or ATG Dynamo? the 90's called and want their time machine back...
I honestly don't care that people work for free, it just saddens me that it takes so long for these people to realize how important financial incentives are. It is clear as day that this model rarely produces any financial results for the developer, even if people and companies are actively using and profiting from your work. That stuff seriously makes me wanna puke.
The reason why it doesn't work is because it violates a very basic business principle. You don't wait for someone to "give" you money for your product, because noone is going to do that. As a manager it is incredibly painful for me to go through the entire chain of command to give you money "for maintenance". Instead you should "take" it by making me wanna buy it.
The strawman part of your argument i will avoid, since it is a clear nonsensical trap.
Two big incentives that you see in most human activities:
* build something for other people
* try to be recognized
Money is a tool to make society work, it isn't really what people live for. People inherently want to contribute to society.
When I didn't, it was a fun hobby. One that lead directly to my job, so there's another incentive for you. Enjoying oneself is also quite sufficient.
There's a significant and growing free-rider problem with open source software, but your not understanding why people do FOSS is on you. It's not difficult to understand.