> So, here we are in 2020, and nix#864 remains unmerged. Fred, you say, you overreact. I read the entire PR. I _want_ to agree with the author, but I didn't find this reasonable. The feedback, for the most part, was not about being perfectionism. Not remotely. It's about being correct . This is not unique to Rust, which as a language spends a lot of time being correct in a few dimensions, but pretty traditional. You…
Rust maintainer perfectionism, or, the tragedy of Alacritty (2020)
241–245 of 245 posts
Re: Rust maintainer perfectionism, or, the tragedy of Alacritty (2020)
#242Earlier quoted context omitted.
As I maintainter myself, I completely disagree. It's a fair complaint that everyone contributing to open source will eventually suffer from. > Please don't ever post things like this. What the hell, is this against any HN policy? Or you think no one should post their point of view here if it's against yours? EDIT: I think it's important to note that burnout is a result of you having an issue within yourself (at least…
> I think it's important to note that burnout is a result of you having an issue within yourself I think this is an oversimplification. You can be perfectly happy with yourself, but if your environment creates a neverending treadmill of situations that drains your soul, you will get burnout if you cannot find any mechanism to cope with it, to avoid it or to deal with it. And in open source we are each others environm…
I agree with you it's more complicated than that, but you seem to be supporting my point by saying this :)
... you will get burnout if --> *you* cannot find a way to cope... --> *you* cannot deal with it.
It's like offense... it must be taken to work... I know, I know... sometimes you cannot avoid taking it and bringing it with you because you care about others thinking you should be offended, or that they feel offended on your behalf even (with seems to be a common feeling today), but I find it great that the English language uses the term "take offense", as it is so accurate: if you don't take it, it simply evaporates, no one can offend you and force you to take offense if you choose to not do it.
Same with burnout.
Re: Rust maintainer perfectionism, or, the tragedy of Alacritty (2020)
#243Earlier quoted context omitted.
Wowwww this is lovely! Have you written anywhere about what you've done on the projects you've maintained along these lines? I think we'd all benefit from hearing more about what you can do in a project to make contributors more capable and helpful. After all, it seems like their incentives should align? Like, why wouldn't they want to make a contribution that actually helps? Making that easier to actually do seems l…
A lot of the time making a contribution that actually helps means fixing something foundational rather than bolting on another quick bug fix. That takes work, sometimes quite a lot of it, and there's no trick around getting the work done any easier. A lot of contributions to open source are simply worth what you paid for them, which is nothing. Early in a project it is possible to find areas of the codebase where eas…
Re: Rust maintainer perfectionism, or, the tragedy of Alacritty (2020)
#244> So, here we are in 2020, and nix#864 remains unmerged. Fred, you say, you overreact. I read the entire PR. I _want_ to agree with the author, but I didn't find this reasonable. The feedback, for the most part, was not about being perfectionism. Not remotely. It's about being correct . This is not unique to Rust, which as a language spends a lot of time being correct in a few dimensions, but pretty traditional. You…
Pointing out back-tics got me worst - adding those or changing it take less time than making a comment on PR for it. Especially pointing out each place ... reviewer could spend his time on much more interesting things.
Re: Rust maintainer perfectionism, or, the tragedy of Alacritty (2020)
#245Earlier quoted context omitted.
"Accepting" a pull request means merging it, and broken code should not be merged. By all means feel free to propose improvements to the PR, then merge it. And if achieving a reasonably well-defined standard of correctness (i.e. avoiding complete and utter breakage) is not feasible, the PR should be scaled back until it becomes so. Start with the minimum useful change, then expand on it.
Broken is a very loaded word. So i don't agree with this as written. If by broken you mean "does not compile or pass tests", then fine, sure. If by broken you mean "there are likely some hard issues in there", then no, i don't agree. I've watched plenty of really good software where the dev process amounts to: 1. Integrate code that is more experimental into the development trunk 2. Let people discover what is wrong…
> The `nix` crate is a cornerstone of the Rust development ecosystem: if you do anything that requires POSIX or various nix-specific APIs beyond those wrapped by the standard library, then `nix` most likely provides a high-level and safe wrapper for them. Perfectionism is a virtue in this context, one that keeps large parts of the Rust ecosystem from accidentally consuming buggy code.
I think "refuse to integrate code until every conceivable thing is thought out and dealt with" is the right* approach when contributing unsafe code to Rust projects, especially to a foundational crate. Rust is designed around the separation of safe code (which allows non-expert programmers to write code with the speed of C and the safety of Java), and safe APIs around unsafe code (exposing a interface around dangerous primitives, constrained so non-expert programmers can't misuse the API to achieve undefined behavior, use-after-free, dereferencing wild pointers, reading uninitialized memory, etc.).
To ensure that safe Rust is actually safe (can't achieve segfaults), third-party libraries which expose safe APIs around unsafe code (like nix) should be proven/provable to never use-after-free, write to wild pointers, expose uninitialized data, etc. This is a high bar to clear, and takes dedicated learning to develop the necessary expertise. But not doing so would expose users of the library to possible segfaults when users "hold the API wrong", which is the failure mode of C++ that Rust exists to avoid. Sadly, the compiler and standard library itself has some unsoundness bugs (described as the "worst kind of bug") which allow convoluted code constructions to result in segfaults despite not containing `unsafe` blocks . These are tracked at https://github.com/rust-lang/rust/issues?q=label%3AI-unsound.)
On the topic of application-level code quality (rather than foundational libraries), I believe that for native applications, code which can't be proven to be memory-safe (either because the program's author doesn't know C++ and the libraries well enough, or because they accept poorly written code from outside contributors) is a significant factor towards the instability of C++ apps I've used. I'm not sure how to best develop this knowledge; perhaps newbies creating/maintaining codebases could be mentored by more experienced developers (who hopefully have prior experience with the app or problem domain)? Perhaps managed/GC'd languages make it easier to write approximately-correct code, since they don't require global architectural knowledge and flawless reasoning to avoid segfaults. However it still takes global architectural knowledge and flawless reasoning to avoid race conditions.
Even though I value code quality over velocity, and despite how incorrect memory-management and threading inevitably results in broken programs, I hate to admit that that gatekeeping code quality and user-facing experience (perhaps architectural design?) could result in more stress, less progress and contributors, and a worse end result.