1. 40

  2. 34

    A long time ago I was a huge fan of a certain programmer¹ who had a lot of technical prowess and put TONS of angry rants that I thought were funny in their code. Bashing other tech companies’ engineers in a funny way while writing awesome code seemed to be a great thing to aspire to. One day I decided to contribute a one-line patch to this programmer’s side project which was on their self-hosted git instance. Not wanting to go through the annoying process of setting up git to work with gmail for a one-line patch, I just typed the diff into what I thought was a decent and friendly email. I received no response and forgot about it.

    A few months later the programmer, not realizing (or caring) that I followed them on twitter wrote a pointed angry rant about idiots who could only use github and not send in a properly formatted git patch. This was followed by a tweet asking a question about the thing my patch aimed to fix, meaning that the previous rant was almost certainly about me. Suddenly, all the programmer’s funny angry rants weren’t so funny anymore, and just made this programmer seem like… a jerk. They are now the CEO of a successful startup. Am I going to apply to work for them? Probably not. Am I going to use their product were I to need its features? Maybe, but with hesitation.

    The whole reason I’m telling this story is to remind people that it’s possible to be opinionated without being a jerk, and that it’s bad to celebrate when people voice good opinions in a jerk-like way². The programmer in question could have emailed me back asking for a properly formatted git patch, privately complained to their friends, or expressed their frustration on twitter in a way that wasn’t mean. I think the last part is the most important – rants have their place to vent frustration (and clearly Drew is very frustrated) or even change people’s minds, but have a different tone entirely when one of the core aspects of a rant is “I am smarter and more ethical than these other people.”

    I hope Drew’s concerns get addressed, but I also hope he is able to voice them more constructively in the future.

    ¹ Left unnamed, but not @ddevault

    ² See Linux Torvalds, for example

    1. 16

      Not to pile on, but this is the reason I unfollowed Drew on fosstodon. How angry rants become very pointed and are sometimes on the brink of harassment.

      1. 5

        I didn’t even had to do that, he blocked me after insulting me. I still like to read his posts, but more for the spectacle than for objective opinions, really.

      2. 5

        rants have their place to vent frustration (and clearly Drew is very frustrated)

        I think this is key. Drew seems to be generally angry and frustrated with the state of the world, technology, ethics of technologists, etc. And he’s right to be angry, a lot of stuff sucks! Anger can be a good/useful emotion, if it drives you to change shitty situations instead of accepting them, and that’s something I admire about Drew, his refusal to take the status quo for granted and his ability to follow through on groundbreaking projects. (I’m rooting for Sourcehut because it isn’t a clone of Github, it has a different philosophy and design goals, whereas many open source products look like inferior knockoffs of some proprietary progenitor.) Maybe he wouldn’t be making the kind of software+projects he does if he weren’t so angry. But, like most things, anger can be toxic when taken to extremes or misdirected, and it can drive people away.

        Whenever I introduce one of Drew’s projects like Sourcehut to my friends/colleagues, or forward a post of his, I have to add the disclaimer that Drew is kind of a dick, even though I tend to agree with him on many things. At some point his anger may do more damage to his projects by preventing people from using or contributing to them than whatever motivational benefits his anger provides to his personal productivity.

        1. 5

          One of the effects of having some of my own posts being posted on sites like Reddit and Hacker News a few times is that I’ve become a lot more careful in how I comment on other people’s posts. In general, I strive to write anything public as if the author of the post would actually read it. In quite a few cases, they probably do.

          It’s easy to think you’re oh-so-witty-and-funny with your snarky sarcastic takes or whatever; but in reality it’s usually not, especially not over the internet.

          I’ll readily admit I don’t always succeed at this though; but I try. I sometimes rant a bit to my friends or girlfriend in private, which has the same frustration-venting effect and doesn’t upset anyone. Just because someone is wrong, or because you strongly disagree with them, isn’t a reason to be a jerk to them.

        2. 22

          Drew is quickly falling into the group of engineers that I find too exhausting to parse through the philosophically based rant to get to the perhaps reasonable technical complaints. Which is sad because I kind of want Sourcehut to succeed but I’m finding it very problematic to give money to someone who communicates this way online.

          1. 16

            Here is the issue where this all started. Here is the library documentation that had the error, and you can now see it’s fixed and links to git.sr.ht. I feel like I’ve seen Drew harass OSS developers on GitHub far too often.

            Here is the actual source code that contains the regexps filters for domains. One thing to note here is that it assumes any site beginning with gitlab., gittea., or gogs. is a valid instance of those git services, which is in direct contrast to what Drew tell us. He paints this as a malicious attack on decentralized git instances, when you are free to name your git instance appropriately or submit a change that adds your domain. This seems very standard for the service pkg.go.dev is providing, and I don’t think this flamebait is useful.

            1. 9

              you are free to name your git instance appropriately


              This assumption doesn’t hold in practice. See e.g. salsa.debian.org or source.puri.sm.

              or submit a change that adds your domain

              This doesn’t really fly. If I host a small instance of GitLab/sr.ht/Gitea I don’t want to chase down each programming language specific tooling requiring a special case for my instance, and wait for the changes to propagate in releases etc.

              1. 5

                The entire thing is that just the source code links don’t work for self-hosted instances; this is not great, but certainly quite a bit different than the entire repo not working as the article makes it out to be. When I pointed this out on HN last night I got handwaving “but Google sucks!” replies first, and a slew personal insults when I pressed the matter.

                This is the kind of attitude these things are written with… meh. But hey, “Google bad” confirmation bias makes it get to the front page anyway 🤷‍♂️

                There’s is some valid criticism here, as the entire way this works is kinda hacky and confusing; but it worked like that on godoc.org too, which was originally developed outside of Google. It might be a good idea to improve on that, but I can’t blame the devs for continuing on what’s already here, rather than taking the initiative to develop an entire new specification for this. If you feel such a thing is vitally important then maybe create it?

                I’ve got a few other gripes with pkg.go.dev as well, but wrapping it all in an article like this isn’t helping anything. Indeed, if anything it’s going to put the developers in the defensive.

                I feel like I’ve seen Drew harass OSS developers on GitHub far too often.

                Well, that was a fun read 🙃 (that wm4 fella doesn’t seem … very pleasant … either)

                1. 1

                  Thanks for sharing this. I’ve always had a feeling about the way he communicated and expressed himself, but this made it a lot more clear!

                2. 12

                  Go has been a Google product from the start. Does this really surprise anyone?

                  1. 9

                    I think the people who most need to hear it are Googlers, especially Googlers who work on teams related to the Go language and ecosystem. I know firsthand that it can be really difficult to listen to this kind of feedback from inside the corporate bubble.

                    1. 0

                      No no no, you don’t understand:

                      Go is a Google product whenever it’s convenient, but also Go is not a Google product whenever it is convenient.

                      You have to keep the distinction in mind!

                    2. 7

                      The good intentions are spoilt by the fact that pkg.go.dev fetches the list of modules from proxy.golang.org: a closed-source proxy through which all of your go module fetches are being routed and tracked (oh, you didn’t know? They never told you, after all).

                      It is just incorrect to say that they never told you, the Go 1.13 release notes mentioned this as well as most of the talks about Go modules.

                      Update: clarify what I think is is incorrect.

                      1. 3

                        Wow, I should read those next time more carefully. I got used to the fact that any environment variable with PROXY in its name will always default to being empty.

                        Now, honestly curious, would this (proxy set by default to something) be considered a good system design if it came from Oracle (comparing it to Java), Mozilla (Rust), Microsoft (C#), Facebook (Hack)?

                        1. 3

                          I think the idea is pretty good actually: modules can be hosted anywhere on pretty much any (mainstream) VCS; it’s pretty decentralized. However, you do want some protection against “left-pad” type incidents where popular repos just vanish, and this is where the GOPROXY comes in to play. If the upstream vanishes you’re protected because there’s still a copy in the GOPROXY.

                          On one hand, do we really want some Google-hosted proxy to route all our traffic? What are the potentials for abuse? What type of information does it collect and what’s done with that? But on the other hand, how likely is it that this would happen, and how is this different from npm, rubygems, PyPi, etc?

                          At least you can easily disable GOPROXY if you want and just fetch from the source. It seems to me that this on its own makes it considerably more privacy-friendly (if you’re really worried about this, I’m personally not really) and decentralized than similar systems I’m familiar with.

                        2. 2

                          What is wrong in this statement? The “They never told you” part only?

                          1. 2

                            Yes, I guess should have highlighted that.

                          2. 2

                            Yep, and there’s this [1] excellent talk on why the service exists and how it works.

                            1 https://youtu.be/KqTySYYhPUE

                          3. [Comment removed by moderator pushcx: Nothing good if going to come of a cheapshot like this. If you think there's a pattern, talk about it, don't just post a personal attack that boils down to "everyone agrees with me rite".]

                            1. 2

                              It saddens me to see that one of the top voted comments in a snarky, ad hominem tweet.

                              Personality and style of the writer aside, maybe there is some grain of truth in the complaint? Could you offer some constructive critizism of the content? Don’t we all have some gripes with the cloud and the way companies interact with oss communities?

                              This is already a second big article I see about Google (first one was about etcd). I hope we will get to the state of acceptance that not everything big companies do is great, that they have a bunch of average programmers, too, and maybe we should be doing them differently, as our scales and incentives are different.

                              1. 2

                                “tweet”? What?

                                I don’t offer constructive criticism for people who have been assholes directly to me and my friends. I just call them assholes, because they are, and I think the opinions of assholes should be disregarded.

                            2. 4

                              That’s rather sad. Google giveth, Google taketh.

                              On the other hand, maybe it’s time to host a community service.

                              Or just have each hosting run their own godoc. The question then would be, how do you learn what godoc instance belongs to a specific source code hosting, so that you can traverse the dependency graph.

                              1. 6

                                Back when I was using “clone & check your dependencies in per-project” for package management (like much else in go-land, it was a hassle but made many things very simple & reliable), running a local godoc was amazing. You got docs for the exact versions of every package you had installed, and nothing else, and every page rendered instantly.

                                1. 1

                                  You got docs for the exact versions of every package you had installed, and nothing else, and every page rendered instantly.

                                  I think this did not change, just run godoc inside a Go modules project and you will see the exact same thing.

                                  Back when I was using “clone & check your dependencies in per-project” for package management..

                                  This got easier with Go modules as well, just run go mod vendor to setup the /vendor directory.

                                  1. 1

                                    Godoc may well have learned to respect go modules.

                                    It did not support it at the time go modules became the official recommendation (nor for many months afterwards), which I found to be a bothersome oversight.

                                2. 5

                                  On the other hand, maybe it’s time to host a community service.

                                  godoc.org actually started out as a community project, and was moved to the golang organisation in 2014.