1. 6

    Clearly a lot of work went into this post, but I found it less of a “state of type hints” and more of a “what and how”, in that I was expecting an overview of adoption, or progress in the type system. Having said that, it’s probably an excellent post for someone wondering “what are type hints in Python and how can I use them?”

    However, I’m pretty sure the final paragraph is incorrect?

    Remember that, similar to unit tests, while it does makes your code base contain an extra number of lines, at the end of the day all the code you add is code that is automatically checked and enforced to be correct. It acts as a safety net to ensure that when you change things around later on things keep working

    In a statically-typed language this would be true, but type hints in Python are just hints. There’s no guarantee from Python that either the hints or what’s passed is actually correct.

    1. 7

      While it’s true that Python’s type-hints aren’t automatically enforced, the same is true of tests: they don’t help either unless you run the test suite. At least for Python, comparing types and tests in this way seems reasonable.

      1. 3

        In a statically-typed language this would be true, but type hints in Python are just hints.

        I write a lot of Python and thus far I’ve eschewed type hints, for the simple reason that if I’m gonna go to all that effort I might as well just write Go.

        (I’m being slightly sarcastic, but there’s a kernel of truth in there.)

        1. 5

          I also write a lot of Python, and I type-hint 100% of it. The type hints typically take very little effort to write, and the benefits (IDE help + fewer bugs + easier refactoring) save me a lot of work, so on net it’s almost certainly effort-saving.

          (A bonus that’s possibly orthogonal to effort is that having to think about and write out the types I use encourages me to design cleaner APIs and makes a lot of bad code smells much more obvious.)

          1. 2

            Sure, and Python will still support that. Now imagine you’re an organization like Google and you have 100 million lines of Python in your company’s repo. It’s not going to be economically viable to rewrite it but you’d still like to incrementally add type checking to try to lower the rate bugs are found in Python code. That’s where Python’s type checking makes sense at the moment. I’ve still yet to see much adoption in the scientific Python space, for example, although I bet that’s mostly because NumPy doesn’t have type stubs yet.

            1. 3

              If wishes were fishes, one of the fish in my river would be to have something like [Elm’s record types], but for specifying Pandas data frame column names instead of record fields. Elm’s record types do not require you to specify all of the input’s fields; instead, you specify the ones the function expects, and the fields that are guaranteed to be in the output. The typechecker keeps track of which fields a record has as it passes through the functions.

              It would be perfect for the domain-specific cleaning and wrangling functions one writes on top of pandas. I realise this is not a trivial thing to wish for, though.

        1. 14

          This blog post: a case study in being a jerk to someone who is being a jerk, only since Linus is a “jerk” you get off scott-free. Unsurprisingly, this is written by someone who has never contributed to the Linux kernel and who was uninvolved in the discussion he’s picking apart.

          The revised email at the end does lose information. Contrary to what hipsters write blog posts complaining about, 99% of Linus’s emails are cordial. The information that’s lost is the conveyance that this is more important to Linus than most subjects.

          1. 19

            This comment: a case study in being a jerk to someone who is being a jerk to a jerk.

            In all seriousness, I don’t believe that Gary Bernhardt is being a jerk at all. There’s a line between being critical of a piece of work and calling someone brain damaged, and hopefully, we all can see the difference.

            Aside: I love when people use the word “hipster” to invalidate other viewpoints. Apparently, there are two modes of being: Being Right and Being A Hipster.

            1. 2

              To the unserious comment, I don’t think I was being a jerk. I called him a jerk, which I guess you could argue is a jerk move under any circumstances, but if I’m being a jerk then so is Gary.

              To the serious comment, I just want to note that “brain damaged” is a meme among old school hackers which isn’t as strong of a word as you think.

              To the aside, I don’t use hipster as an insult or to imply wrongness, but I do use it to invalidate his point. Gary is a Ruby developer. Linus is a kernel developer. The worlds are far removed from each other.

              1. 48

                I’ve put tens of thousands of lines of C into production, including multiple Linux kernel drivers. In one case, those kernel drivers were critical-path code on a device used in strain testing the wings of an airplane that you might’ve flown in by now.

                I’m not a stranger to the kernel; I just left that world. Behavior like Linus’ in that email was part of the reason, though far from the only reason.

                With all of that said: having written a bunch of systems software shouldn’t be a prerequisite for suggesting that we avoid attacking people personally when they make programming mistakes, or what we suspect are programming mistakes.

                1. 10

                  Exactly. I’ve also met many people that do high-performance, embedded, and/or safety-critical code in C that are more polite in these situations. Linus’ attitude is a separate issue from what’s necessary to evaluate and constructively criticize code.

                2. 16

                  “brain damaged” is a meme among old school hackers which isn’t as strong of a word as you think.

                  Yikes. That “meme” is a whole other thing I don’t even care to unpack right now.

                  I don’t use hipster as an insult or to imply wrongness, but I do use it to invalidate his point. Gary is a Ruby developer. Linus is a kernel developer. The worlds are far removed from each other.

                  Gotcha. Kernal developer == real old-school hacker. Ruby developer == script kiddie hipster. Are we really still having this argument in 2018?

                  1. 2

                    Yikes. That “meme” is a whole other thing I don’t even care to unpack right now.

                    “Brain damaged” is a term from back in the Multics days, Linus didn’t make that one up for the occasion. If you’re unfamiliar with the “jargon file” aka hacker dictionary, you can see the history of this particular term here: http://www.catb.org/jargon/html/B/brain-damaged.html

                    1. 1

                      Yikes. That “meme” is a whole other thing I don’t even care to unpack right now.

                      Listen, cultures are different and culture shock is a thing. I’m in a thread full of foreigners shocked that customs are different elsewhere. You better just take my word for it on “brain damaged” because you clearly aren’t a member of this culture and don’t know what you’re talking about.

                      Gotcha. Kernal developer == real old-school hacker. Ruby developer == script kiddie hipster. Are we really still having this argument in 2018?

                      How about you quit putting words in my mouth? Do you really need me to explain the world of difference between Ruby development and kernel hacking? In 2018? It’s not a matter of skill. Gary is great at what he does, but it has almost nothing to do with what Linus does. The people who surround Gary and the people who surround Linus are mutually exclusive groups with different cultural norms.

                      1. 19

                        You can’t use “it’s our culture” as a panacea; calling someone an idiot, moron etc. is a deliberate attempt to hurt them. I guess if what you’re saying is, “it’s our culture to intentionally hurt the feelings of people who have bad ideas,” well, then we might be at an impasse.

                        1. 20

                          The kind of toxic exclusivity and “old school hacker culture” elitism that you’re spouting in this thread is not what I expect to see on Lobsters. It makes me genuinely sad to see somebody saying these things and it also makes me apprehensive of ever being involved in the same project or community as you. Software development today is not what it was 20 –or even 5– years ago. Today it is far more about people than it is about software or technology. You may not like this, but it is the reality.

                          1. 7

                            Lobste.rs always had a few vocal people like this in threads. But note that they’re in the minority and generally are not upvoted as much as the people who aren’t elitist, racist, or just generally being a jerk.

                            1. 5

                              “old school hacker culture” elitism

                              Near 40, I can agree to be called old. But not elitist.
                              And I cannot accept to be associated with racist.

                              Not all software developers are hackers. Not all hackers are software developers.

                              Is stating this “elitism”? Is it “racism”? Is it being “jerk”?
                              Or is just using terms properly?

                  2. 5

                    The information that’s lost is the conveyance that this is more important to Linus than most subjects.

                    So add “I want to stress that this issue is really important to me” at the end of the revised email.

                    I think that making an issue out of this particular information being lost is missing the point - that it would be possible to say the same thing as Linus did without being abusive.

                    Contrary to what hipsters write blog posts complaining about

                    You’re falling into the same trap that the post discusses. This derision isn’t necessary to make your point, and doesn’t make it any stronger - it just adds an unnecessary insult.

                    1. 9

                      Contrary to what hipsters write blog posts complaining about, 99% of Linus’s emails are cordial.

                      That may well be true, but do we need that last 1% in a professional setting?

                      1. 9

                        (I am not defending Linus’ behaviour here, please don’t put those words in my mouth.)

                        I strongly take issue with American ideas of “professionalism”, and an even more so with the idea that we get to decide whether this project is “a professional setting” or not. What exactly makes this a “professional setting”? What is a “professional setting”? Why do we hold some interactions to higher standards than others?

                        I suspect “money changing hands” is the thing that makes this “a professional setting”, and that grinds my gears even further. Why are we supposed to hold ourselves to different standards just because some people are getting paid for doing it?

                        1. 3

                          Right, “professionalism” implies that you only need to be nice to somebody when you want them to something for you or want their money. This should actually be about “respect”, whether or not you want a Linux contributor to do something for you or want their money.

                        2. 12

                          The Linux kernel is not a professional setting. Besides, I argue that the 1% is useful, even in a professional setting - sometimes strong words are called for. I’ll be That Guy and say that people should grow a thicker skin, especially people who weren’t even the subject of the email and have never been involved in kernel development.

                          1. 13

                            If I look at who the contributors to the Linux kernel are, it would certainly appear to be a professional endeavor.

                            A large chunk of contributions to the kernel are made by people who are getting paid by the companies they work for to contribute. Sounds like a professional setting to me.

                            1. 4

                              Linux development is only “a professional endeavour” (which is a phrase I have strong issues with, see above) because some people decided to build their businesses in Linus’ craft room. We can like or dislike Linus’ behaviour, but we don’t get to ascribe “professionalism” or lack thereof (if there even is such a thing) to Linus’ work or behaviour, or that of any of the contributors.

                              Even if “professionalism” is an actual thing (it’s not; it’s just a tool used by people in power to keep others down) it’s between the people doing the paying, and the people getting the pay, and has nothing to do with any of us.

                              This idea that people should behave differently when there’s money involved is completely offensive to me.

                              1. 7

                                But it’s not. It’s a collaboration between everyone, including professionals and hobbyists. The largest group of kernel contributors are volunteers. On top of that, Linus doesn’t have to answer to anyone.

                                1. 8

                                  So, having a hobbyist involved means that you can be dickhead? Is that the conclusion that should be drawn from your statements?

                                  1. 3

                                    No. I’m saying that Linus is not a dickhead, Linux is not a professional endeavour, and neither should be held to contrived professional standards.

                                    1. 2

                                      “I’m saying that Linus is not a dickhead”

                                      His comments are proving otherwise given the main article shows the same information could’ve been conveyed without all the profanity, personal insults, and so on. He must be adding that fluff because he enjoys it or has self-control issues. He’s intentionally or accidentally a dick. I say that as a satirist whose a dick to people that give me headaches in real life. Although it doesn’t take one to know one, being someone whose always countering dicks and assholes with some dickish habits of his own makes what Linus is doing more evident. If no mental illness, there’s little excuse past him not giving a shit.

                                      1. 5

                                        “doesn’t behave according to my cultural norms” == “mental illness”


                                        I would really appreciate it if you could stop expecting that your cultural norms have to apply to everyone on the planet.

                                        1. 1

                                          Im identifying the cultural norm of being an asshole, saying it applies to him at times, and saying the project would benefit if he knocked if off. Im not forcing my norms on anyone.

                                          Your comment is more amusing giving someone with Linus’s norns might just reply with profanity and personsl insults. Then, you might be complaining about that. ;)

                                          1. 1

                                            Then, you might be complaining about that. ;)

                                            No, I’d just accept that people from different cultures behave differently.

                                            Let’s face it, most people hate getting told they are wrong, regardless of the tone. That’s just how we are as humans.

                                            Taking offense about the tone just seems very US-specific, as they are accustomed to receiving some special superpowers in a discussion by uttering “I’m offended”.

                                            Some of the best feedback I received in my life wouldn’t be considered acceptable by US standards and I simply don’t care – I just appreciate the fact that someone took his time to spell out the technical problems.

                                            Here is a recent example: https://github.com/rust-lang/cargo/pull/5183#issuecomment-381449546


                                              Here is a recent example: https://github.com/rust-lang/cargo/pull/5183#issuecomment-381449546

                                              I’m not familiar with Rust, so maybe I’m missing crucial context, but I read this feedback as firm but unproblematic overall. Compared to Linus’ email:

                                              • Comment admits that there are multiple points of view, gives case for their take on it.
                                              • Focuses on the problems at hand rather than speculating on characteristics of any individuals involved, beyond acknowledging other viewpoints.
                                              • Doesn’t include any personal insults.
                                              • Doesn’t include any profanity that I noticed, certainly not gratuituous profanity.

                                              It could be nicer, sure. But it seemed respectful, in the “you can do what you’re doing but consider these things:” kind of way…? The author event went out of their way to acknowledge being unconstructive.

                                              To my reading it seemed closer to Gary’s email than Linus’.

                                              To put it another way: if Linus wrote emails like this (only shorter, probably) then I don’t think Gary would have written a blog post about it.

                                              (For the record: I’m not American, but I do fall on the gee-it’d-be-great-if-Linus-stopped-abusing-his-colleagues side of this debate.)


                                                I didn’t intend to imply that this was comparable to Linus’ mail, but that people who would be offended by Linus’ writing would also be offended by that comment.

                                                It’s a slippery slide where every honest-to-go comment that expresses real feelings starts getting replaced by “this is an interesting idea, but did you consider …” corporate lingo, even if the code is horribly wrong.

                                              2. 1

                                                Then you and I arent that different in how we look at stuff. Ive just layered on top of it a push for project owners to do what’s most effective on social side.

                                          2. 2

                                            I believe it’s intentional. He does not want to be bothered by nurturing the newbs, so he deters them from going to him directly and forces them to do their learning elsewhere.

                                          3. 2

                                            These numbers suggest it is a professional endeavor:


                                            1. 2

                                              Those numbers just break down the professionals involved, and don’t consider the volunteers. If you sum the percentages in that article you get around 40%. Even accomodating for smaller companies that didn’t make the top N companies, that’s a pretty big discrepancy.

                                    2. 6

                                      Linus himself is working in a professional capacity. He’s employed by the Linux Foundation to work on Linux. The fact he is employed to work on an open source project that he founded doesn’t make that situation non-professional.

                                1. 2

                                  Serious question: Why does the Dyson Sphere concept apparently require emitting ‘waste heat’? Why not beam it back on the star you’re enveloping?

                                  1. 1

                                    That’s what’s happening in this paper. The “waste” is being magically converted into thrust somehow.

                                    1. 1

                                      Yes, correct.

                                      Sorry, I was talking off-topic, about traditional stationary Dyson spheres.

                                      I think the answer to my question is some principle of thermodynamics. Something like “whenever an object is being heated faster than it is radiating heat away, its temperature will increase until the rate of radiating heat away equals the rate at which it is being heated”.

                                      That makes sense to me if the sphere was a dumb ball of metal. But if it is full of machinery, well… why not like, uh, shoot some big lasers at the star, instead of emitting infrared into space?

                                      Maybe I know the answer… Something along the lines of “there is a difference between the energy in your gas tank and the energy in a hot hunk of metal”… But, why? Steam engines convert heat to work just fine. …I guess you gotta condense the steam back into liquid, and one obvious way to do that is …wait for it… to radiate infrared into space!

                                      Has anybody ever heard of a Dyson sphere that doesn’t radiate anything, ie, it is cold on the outside?

                                  1. 2
                                    1. 3

                                      Yeah. I don’t think this was an intentional piece of design, just an oversight.

                                      @ap, no, there isn’t a way to retrieve all of your, or anyone else’s comments. If it’s a priority I could dump them from the database for you, but otherwise it’ll happen when someone picks up #394.

                                      1. 3

                                        No worries, I am not in a hurry and don’t require special treatment. So long as I can expect to be able to get my comments out someday, I’m fine just waiting for it to happen. Since it’s not purposefully the way it is, and in fact the stated intent is to provide what I want, then if it bugs me that much, I always have the option of putting in the effort myself. That’s good enough for me. Thank you.

                                        1. 2

                                          Thanks for your understanding and patience.

                                    1. 3

                                      Lobsters doesn’t have a rule about editorialized titles like HN. Editorialize away.

                                      1. 5

                                        This is not quite true; see the story submission guidelines from the ‘Submit Story’ page:

                                        Do not editorialize story titles, but when the original story’s title has no context or is unclear, please change it. Please remove extraneous components from titles such as the name of the site, blog, section, and author.

                                      1. 29

                                        Honestly I’d cut them some slack. It’s easy to assume that a company their size just has all the money to pay for testing and qa and expertise.

                                        But the truth is it’s probably just a handful of engineers who are passionate about playing well in the Linux ecosystem who will probably fix this and not make the mistake again.

                                        1. 6

                                          100% this.

                                          The OP should assume its a mistake and not malice.

                                          1. 10

                                            It’s not as if the debian packaging rules are simple and easy to understand.

                                            1. 5

                                              I think if you didn’t know that forcibly removing whatever was at /bin/sh was bad, then no packaging rules can save you.

                                        1. 4


                                          We couldn’t find any code matching ‘smoot’ in yt-project/unyt


                                          1. 3

                                            Open an issue? ;)

                                            1. 3

                                              This unit was new to me so I googled it


                                              It tickles me that Smoot later worked for ANSI and ISO.

                                            1. 6

                                              It’s not really APL, but array-oriented programming is very much alive and well in scientific computing. Fortran, Matlab, Julia, and Python via NumPy all support array programming and benefit from the increased expressiveness it allows.

                                              1. 9

                                                This is becoming an increasingly severe problem in HPC. To the point where software needs to be written in an explicit fault-tolerant fashion, since errors like these or even hardware failures will happen on nearly every exaflop run. Even petaflop machines that are typical today need to have special handling for hardware failures to avoid crashing constantly.

                                                1. 2

                                                  Would you mind elaborating on the techniques used when attempting to be fault taulerant of bit flips?

                                                  1. 4

                                                    One place to start is actually Tandem Computers which were built for fault tolerance, basically by running two computers.

                                                    NASA’s guidance system, among other things, has 3 or 4 computers which all compute the same thing then check with each other if they agree.

                                                    For systems that require not running the same thing a whole bunch, one can let a checksum of the data flow end-to-end, checking it at various places.

                                                    I’m sure other solutions exist, but as a non-expert, those are the ones I’ve come across.

                                                    1. 1

                                                      What happens when you get an error? i.e. say computer 4 gets hit by a cosmic ray which flips a bit; what’s the procedure for bringing all computer back into agreement?

                                                      1. 1

                                                        If you have multiple computers you can do a quorum. Otherwise, information is lost and it’s up to the situation what you do. You can either fail an tell the user or if there is a backup policy, execute that.

                                                    2. 3

                                                      I’m not terribly familiar with this field, but this report should get you started: http://www.netlib.org/lapack/lawnspdf/lawn289.pdf

                                                      1. 2

                                                        Oh nice! I didn’t have that. Thanks.

                                                      2. 3

                                                        I second apy’s recommendation of Tandem Computers. I’ll go further with two specific works. The first is by Jim Gray showing how Tandem looked at things systematically to figure out how to eliminate as many error classes as possible. They ended up achieving a five 9’s system. The second is from a competitor, Stratus, covering both hardware and programming techniques for robust systems, including Tandem NonStop.

                                                        Why Do Computers Stop and What Can Be Done About It?

                                                        Paranoid Programming: Techniques for Constructing Robust Software

                                                        Note: First is an old PDF. Second one is a PostScript file from Archive.org since the PDF link is dead with no archive copy.

                                                        1. 2

                                                          Thanks for the links! Looks like a there is a bunch of goodies in there…

                                                    1. 2

                                                      Very useful thing, especially when you can spawn more than one concurrent “straces” (handy for multiple variants of the same binary).

                                                      As strace is also very helpful for sysadmins too (we have a prover here that you can debug almost anything with strace + tcpdump), I just thrown it on my company’s internal mailing list. Hope they’ll appreciate it.

                                                      But the distribution model for such “sysadmin toolbelt” tools in Python is kinda problematic for old-timers who use CentOS 7 on their desktop, still have Perl as default lang and only started diggging Py2 recently. There should be a way to contain whole dependency trail + interpreter of such package into single static binary to put in /usr/local/bin like they do.

                                                      Also for portability on remote servers, which is a more reasonable argument for most of you.

                                                      1. 2

                                                        It’s available as a Docker image, if that helps (tho I doubt it if the env is locked down):

                                                        docker pull imiell/autotrace

                                                        I could look at unrolling to single python file somehow… would that help?

                                                        1. 1

                                                          That’s no problem for me, I can use pip install --user … and have $HOME/bin on my $PATH.

                                                          Docker container is of course very handy, but I don’t think it would appeal for such people I described above because it’s “too hip”.

                                                          Don’t get me wrong, I’m not strictly looking at this particular software at this time, but wondering a bit wider about software distribution for non-C stuff which is not yet packaged by BigCo Enterprise Linuxes.

                                                          1. 1

                                                            Unfortunately the “static binary” story on Python is pretty meh right now. Perhaps one day there will be support in the interpreter for creating things like that.

                                                        2. 2

                                                          BTW, one thing I learned while doing this was that you can’t run strace and ltrace on the same pid. Or at least it looked that way to me. So I wonder whether you can run two straces?

                                                          1. 1

                                                            There should be a way to contain whole dependency trail + interpreter of such package into single static binary to put in /usr/local/bin like they do.

                                                            try https://lobste.rs/s/os2xxj/exodus_painless_relocation_linux

                                                            1. 1

                                                              That doesn’t create a single static binary as far as I can tell.

                                                          1. 15

                                                            Tangential comment: I assume Google funded this in some way (either by paying a person to do it or offering money to the open source project). But, AFAIK, Git is not a Google project so I don’t really like that this introduction is coming from their blog as if it’s theirs. Maybe there is the official release somewhere else? Maybe I’m missing something and all this is kosher.

                                                            1. 14

                                                              Most of the Git core team is employed by Google to work on Git. The maintainer Junio Hamano is a Google employee whose job is to work on Git.

                                                              That is why this announcement is happening on the Google blog.

                                                              1. 8

                                                                Git 2.18 is not yet released, so this is more of call for testing. Google-specific part here is that you can test against googlesource.com, because Google deployed v2 enabled server.

                                                                1. 11

                                                                  It reads like an official announcement on behalf of the git project though, while not being on a git-related domain, which is what is somewhat surprising. Well, the first sentence does. The rest of the post wouldn’t have raised my eyebrow, but this part also confused me on first read regarding on whose behalf “we” is speaking here (Google? git? both?):

                                                                  Today we announce Git protocol version 2, a major update of Git’s wire protocol…

                                                                  1. 3

                                                                    Google employs many git and mercurial developers. Very few organizations do source control on the scale of Google so it makes sense for them to fund developers of the tools they use.

                                                                    1. 10

                                                                      Myself, and I don’t think @mjn, are disagreeing that Google does a lot with source control and probably spends a lot of money on supporting git. My concern/issue is that git is not a Google project so it doesn’t quite feel right that, what feels like an official announcements should be on their website.

                                                                      1. 3

                                                                        A google employee wanted to share some open source work they’d been doing so they used a company blog. That doesn’t seem weird to me.

                                                                        edit: I guess it’s worth adding that it wasn’t really announced in this blog post. You could have seen the discussions about this if you followed the git mailing lists.

                                                                        1. 6

                                                                          Google could have done a better job in this post explaining the relationship between Google, the author and the git project. One phrase would have made a ton of difference. For example, “I am John Foo, a Google employee and a member of the git core team” (with a link to some sort of proof on the git website)

                                                                          1. 2

                                                                            Well, there is such phrase, but at the end:

                                                                            By Brandon Williams, Git-core Team

                                                                2. 1

                                                                  Did you mean Git is not a google project?

                                                                  1. 1

                                                                    Fixed, thanks.

                                                                1. 2

                                                                  lobste.rs is a computing focused community, please post stories that are related to computing.

                                                                  1. 1

                                                                    My bad. Thanks for the advice.

                                                                    1. 6

                                                                      I was thinking about how we also could transpose this to FOSS projects. Maybe instead of using bug solving as an excuse to go though a new code-base we could use code-review.

                                                                      I’ll give it a try.

                                                                      1. 3

                                                                        It’s a great way to start contributing to a codebase. Highly recommended.

                                                                      1. 26

                                                                        I’m glad to see this trend of standing up against poltiical exclusion in Open Source. I assume that the Code of Conduct for llvm was written in good faith, but the continued demonization of political groups (and to some extent, white men) is troubling. Remember when no one on the internet cared what you looked like, believed, or who you loved? I want to go back to that :/

                                                                        1. 43

                                                                          Who is being excluded? How is Outreachy preventing someone from contributing to llvm?

                                                                          I remember those days too. “No one” cared because “everyone” assumed you were white, male, and college educated. “There are no women on the Internet” dates back, at least, to the early ’90s.

                                                                          As a black male dropout, that was fine for me— I could get involved. No one questioned my capabilities. And as long as I kept up a good impression of being fluent in upper-middle to upper-class white culture, I could build my skills and social capital.

                                                                          I also got beat up on the street in front of my grandmother for “showing off” how I could “talk white” at school.

                                                                          I also remember, when Pentiums were out, using a pawn shop purchased Apple IIc with a gifted modem. I also remember hacking into dial-up pools to get telnet— haha, as if my machine could talk SLIP or PPP. I remember begging friends from MOOs and IRC for a shell account. I remember having no concept of the disparity between myself and the people with whom I played games, chatted, wrote code, and made friends. They simply had things, and I didn’t.

                                                                          I don’t see a problem with choosing to give their time and their money to mentor people who otherwise might not be able to participate. There certainly hasn’t been a problem with people choosing to give their time and their money to people who look like them, sound like them, grew up with them, attend the same church as them, went to the same school as them, are friends with them, enjoy the same movies as them, play the same sports as them, and just happen to be a well-off straight white male. Just. Like. Them.

                                                                          1. 5

                                                                            I also remember hacking into dial-up pools to get telnet

                                                                            Holy crap, you and I are kindred spirits. The terminal-concentrator at the local university dropped you into a command line…you were supposed to then immediately telnet to the VAX on campus, but they didn’t enforce that. I was 13 years old and certainly not a student at said university but boy did I get around using that little trick.

                                                                            (This would’ve been like 1993. I’m old.)

                                                                            1. 4

                                                                              🙏🏾 s/the local university/Sprint/ and that was me too!

                                                                              1. 4

                                                                                It was an eight year old Amiga 1000 that my dad got at an estate sale for like $20 because it would only boot up about half the time and shut down and random intervals, hooked up to a black and white TV, with an old external 1200 baud modem and a terminal program I got off a disk on the cover of a magazine. I felt like the lord of all creation.

                                                                                Man I’m nostalgic now.

                                                                                1. 4

                                                                                  Who ever thought we’d make it this far?

                                                                            2. 3

                                                                              I remember when internet arrived at my hometown. It was 1996. I am not sure such delay was related to skin color.

                                                                            3. 46

                                                                              There is no whitemend.

                                                                              Outreachy isn’t out to make a monster out of you. It’s trying to correct for GSoC. You don’t like Outreachy’s policies, a much smaller, less well-funded org than Google, then go through GSoC and Google. You have lots of other options other than Outreachy.

                                                                              The code of conduct doesn’t say anything about how white men are bad. Reading the CoC, if you object that strongly to it that you must leave, then please do! That’s the CoC working as intended. You are deciding to exclude yourself by deciding that what the CoC forbids (i.e. being an asshole) is something that you must be and defend.

                                                                              Also, one more thing.

                                                                              I wish I could explain to people who are privileged one way or another, that it doesn’t mean your entire life is handed to you in a silver platter. Being a white male doesn’t mean you can’t be poor or can’t be gay (thus discriminated) or that you can’t have a slew of other problems.

                                                                              It just means you don’t have those problems in addition to also being discriminated for being a woman, for being black, for being anything else.

                                                                              1. 5

                                                                                Reading the CoC, if you object that strongly to it that you must leave, then please do! That’s the CoC working as intended. You are deciding to exclude yourself by deciding that what the CoC forbids (i.e. being an asshole) is something that you must be and defend.

                                                                                I would disagree with that notion. I think it’s certainly possible to disagree with the CoC or parts of it without being an “asshole as the CoC forbids”. Personally and for example, I would say the “Be welcoming” clause is too exhaustive and could be shortened to “Be welcoming to everyone regardless of who they are and choose to be” which would IMO cover the same topics as it does now. The fifth clause is also way too broad and vague. A simple note that discussion not furthering the the project or it’s software, being NSFW or otherwise non-productive would have achieved the same goal and would give moderators more leeway to deal with troublemakers.

                                                                                I specifically wonder why number 6 was necessary. It’s a community of coders, if they can’t understand disagreement I seriously question what is going on behind the scenes that warrants such a rule. Does discussion derail so often into low level sand-flinging?

                                                                                Not too long ago I was member of a forum focused around LEGO robots. There were no rules of any kind but plenty of electricians and programmers around, men, women, kids and teens, etc. Everyone was happy to participate and be happy to exchange ideas and code. When there was drama the moderators enacted unspoken rules of the clearly obvious kind. If you insulted someone for no reason you got banned. Same for insulting someone based on their gender. We didn’t need rules for that. It was obvious as day that such behaviour was not something you’d do to have a productive conversation with someone about the intricacies of rubber bands vs gearing.

                                                                                1. 8

                                                                                  I specifically wonder why number 6 was necessary. It’s a community of coders, if they can’t understand disagreement I seriously question what is going on behind the scenes that warrants such a rule. Does discussion derail so often into low level sand-flinging?

                                                                                  Speaking as someone who has over the course of many years, moderated things on the internet. Things like this exist because otherwise someone will come along and say “but you didn’t say”. It’s an unwinabble battle, there will always be a “but you didn’t say” response to something. You try to cover the big things in a broad way so that people have a general idea.

                                                                                  I’ve answered many emails as a member of the Pony core team where well meaning people write in to ask “if I do X, would that be against the CoC”. I can’t say that is how every CoC operates, but its how I like them to operate:

                                                                                  Here are some ground rules. If you aren’t sure if what you are going to do violates those ground rules, maybe don’t it or ask whoever enforces the CoC.

                                                                                  CoC’s are far from perfect. A large amount of that lack of perfection is that they are administered by people. Establishing some ground rules for a community is better than having none. Most communities have a CoC whether they call it that and whether its explicit. Take HackerNews, its called “Guidelines” there. It’s still a statement of some behavior that isn’t acceptable.

                                                                                  1. 2

                                                                                    I think if someone goes down the route of “but you didn’t say” that would be grounds for getting a mute from the poor moderator they annoyed. At least back in the forum that was how it was handled. Nitpickers aren’t people who tend to keep around once the people in charge hammer them on the fingers.

                                                                                    I don’t think Hackernews’ Guidelines are comparable to a Code of Conduct. HN’s book of laws is much more vague and subjective, the word “guideline” already implies a certain amount of softness. Moderators won’t stick to that word-by-word and rather apply common sense on top of the rules. A “Code of X” for me implies a certain rigidness and thoroughness that isn’t present in most of them.

                                                                                2. 14

                                                                                  The code of conduct doesn’t say anything about how white men are bad.

                                                                                  And yet that is how it has been applied. The organisation is funding a scholarship which is very explicitly open to people of some race/gender combinations and not others. I don’t think finding that unconscionable makes someone an “asshole”; quite the opposite.

                                                                                  I wish I could explain to people who are privileged one way or another, that it doesn’t mean your entire life is handed to you in a silver platter. Being a white male doesn’t mean you can’t be poor or can’t be gay (thus discriminated) or that you can’t have a slew of other problems.

                                                                                  It just means you don’t have those problems in addition to also being discriminated for being a woman, for being black, for being anything else.

                                                                                  Put it this way: I would lay money that, in practice, the average Outreachy scholarship ends up going to someone who has had an easier life than the average open-application scholarship (GSoC or similar). The rhetoric of inclusion is all about underprivileged groups, but somehow the beneficiaries always end up being middle-class college-educated liberals.

                                                                                  1. 15

                                                                                    The organisation is funding a scholarship which is very explicitly open to people of some race/gender combinations and not others. I don’t think finding that unconscionable makes someone an “asshole”; quite the opposite.

                                                                                    Races and genders which are significantly unrepresented in the field they are trying to get them into.

                                                                                    There are campaigns and organisations here to try and get more male primary school teachers, because males are significantly unrepresented in primary education. Are the people running those organisations and campaigns “assholes” for discriminating against women, who represent over 84% of primary school teachers?

                                                                                    1. 4

                                                                                      He said although he made hiring decisions based on who was the best teacher, irrespective of gender, it would be great to see more men giving teaching a go.

                                                                                      That’s what the non-asshole version of this kind of thing looks like. Marketing the career to a particular demographic is fine. Giving that demographic an unfair advantage is not fine.

                                                                                      1. 2

                                                                                        It’s an unfair advantage that’s not even managing to negate the pre-existing unfair disadvantages that certain groups face.

                                                                                        1. 4

                                                                                          It’s Simpson’s paradox in reverse: picking an advantaged member of a disadvantage group over a disadvantaged member of an advantaged group is a negative step for equality that sounds like a pro-equality move.

                                                                                    2. 6

                                                                                      The outreachies I’ve seen have gone to Indian and Eastern bloc girls. You don’t see a lot of those in GSoC.

                                                                                      1. 4

                                                                                        Sure. That doesn’t contradict what I said: that the beneficiaries of these efforts end up being disproportionately people from the international college-educated liberal middle class (a group that’s far more homogenous in the ways that matter than most races or genders, though that’s a separate discussion), people who have had an easier life with fewer problems than the people they are displacing, even when those people are white and male.

                                                                                        1. 4

                                                                                          Let’s assume you’re right.

                                                                                          How does Outreachy working with international college-educated liberal middle class Indian and Eastern bloc girls displace anyone?

                                                                                          1. 2

                                                                                            If LLVM is choosing to fund a scholarship with Outreachy in place of funding one with GSoC, the recipient of that scholarship is displacing the person who would’ve received the GSoC one.

                                                                                            1. 9

                                                                                              Please correct me if I’m wrong, but as I understand it:

                                                                                              • LLVM participates in both Outreachy and GSoC.
                                                                                              • LLVM doesn’t fund either programme.
                                                                                                • Outreachy and GSoC both provide funds for their own programmes.

                                                                                              So, neither LLVM nor Outreachy are “displacing” anyone from GSoC.

                                                                                              Moreover, no one even signed up for LLVM’s Outreachy! So this is hypothetical “displacement.”

                                                                                              1. 1

                                                                                                Outreachy doesn’t fund internships, you need to bring your own funding to them. I’m not sure how LLVM is funding their outreachy internships.

                                                                                                1. 8

                                                                                                  [citation needed]

                                                                                                  Because, from their front page:

                                                                                                  Outreachy provides three-month internships for people from groups traditionally underrepresented in tech. Interns are paid a stipend of $5,500 and have a $500 travel stipend available to them.

                                                                                                  And their sponsor page:

                                                                                                  Outreachy internship stipends, travel fund, and program costs are supported by our generous donors.

                                                                                                  Same page, “Commonly Asked Questions”:

                                                                                                  Q: Who pays the interns? A: The Outreachy parent organization, the Software Freedom Conservancy, handles payments to interns.

                                                                                                  Not to make too fine a point:

                                                                                                  Q: We have a company internship program. How does that work with Outreachy internships? A: Outreachy internships are completely separate from any other internship program. Outreachy organizers find FOSS communities that are willing to provide mentorship and use corporate sponsorship to fund the internships.

                                                                                                  1. 1

                                                                                                    I guess I don’t see how you’re disagreeing with what I wrote. You need to have funding arranged before you can set up an outreachy internship.

                                                                                                    1. 4

                                                                                                      FOSS community provides mentorship. Corporate sponsor provides funding. Internship = mentorship + funding. Outreachy provides internships.

                                                                                                      The money from corporate sponsors goes into a pool that is used for all internships. Outreachy is a funds aggregator.

                                                                                                      When you say “you need to bring your own funding to them,” who is the “you?” It’s not the FOSS community. It’s not the internship applicant. Who is it?

                                                                                                      1. 1

                                                                                                        Perhaps the policy changed. When I looked this up in November it was the responsibility of whoever wanted to start an outreachy program for a project to identify a source of funding.

                                                                                                        1. 2

                                                                                                          According to the Internet Archive, in September of 2017, their policy was exactly the same. It’s the same at least back through the last GNOME Outreachy, over a year ago.

                                                                                                          Update: I deleted my follow-on questions. This is the kind of back and forth @pushcx warned about.

                                                                                                          1. 2

                                                                                                            Did you see my other comment? Each org needs to find a coordinator who needs to find funding for their org (see under coordinator, here: https://www.outreachy.org/mentor/). That might be in terms of corporate sponsorhip, but outreachy won’t do that for you.

                                                                                                            1. 2

                                                                                                              No I didn’t, I missed your self-reply. Sorry about that!

                                                                                                              And, yeah:

                                                                                                              Coordinator Duties Before Application Period Opens

                                                                                                              • Finding funding for at least 1 intern ($6,500)

                                                                                                              That’s clear and conflicts with their other pages. “Perhaps the policy changed” indeed. I put more weight on that page, though, than their more advertise-y ones.

                                                                                                              mea culpa!

                                                                                                2. 1

                                                                                                  I understood LLVM was funding the scholarship but could easily have misunderstood. In any case it’s beside the point: my point goes through exactly the same if we’re talking about the person a hypothetical open-application scholarship would have selected or a person who was displaced as such.

                                                                                                  Moreover, no one even signed up for LLVM’s Outreachy! So this is hypothetical “displacement.”

                                                                                                  Isn’t it just the opposite? If choosing to offer an Outreachy scholarship rather than some other scholarship meant that instead of getting a likely-less-privileged individual they got, not a more-privileged individual but no-one, that’s an even bigger loss.

                                                                                                  1. 1

                                                                                                    If choosing to offer an Outreachy scholarship rather than some other scholarship […]

                                                                                                    They also offer a GSoC scholarship, and there’s nothing to imply Outreachy replaced an alternative rather than being an addition.

                                                                                                    1. 0

                                                                                                      Scholarships don’t grow on trees; surely the fairest comparison to make is offering a scholarship versus offering a slightly different scholarship. (Would you apply the same reasoning if someone wanted to offer a scholarship that was only for white people, say?)

                                                                                                      1. 3

                                                                                                        I can play this game too, where “displaced” is entirely hypothetical:

                                                                                                        • LLVM has displaced compiler developers from gcc!
                                                                                                        • My drinking tea tonight displaced a purchase of beer from the bar down the road!
                                                                                                        • My mother and father each displaced every other person on the planet born before 1980!

                                                                                                        THE INJUSTICE

                                                                                                        1. 1

                                                                                                          Um, yes, it’s 100% fair to compare gcc to llvm, tea to beer, or your mother and father to other people?

                                                                                      2. 8

                                                                                        It just means you don’t have those problems in addition to also being discriminated for being a woman, for being black, for being anything else.

                                                                                        That’s incorrect in any environment where whites or men are the minority. Human nature dictates that all groups favor those like them and penalize those unlike them. Examining the politics of non-white nations in World History or current affairs confirm those groups are just as racist in the social systems they create. Examining the actions of black administrators or elected officials show they mostly bring in people like them regardless of what the mix is in their area. The kind of political beliefs behind these Codes of Conduct and privilege assume this doesn’t happen on a large scale by non-whites to whites. The wealth of evidence disagrees with that so strongly that believing in it anyway and suppressing alternative views is comparable to a religious faith. One that damages specific groups while propping up others.

                                                                                        Another point folks in favor of those beliefs and CoC’s never bring up is how many minority members disagree with them. The surveys they usually take are almost never worded to assess how many people believe it’s something all groups do to each other. That’s because they’re biased enough to try to just reinforce their own beliefs. In my surveys, I always present both sides asking which they think it is. I rarely meet black or Latino people, majority of minority members in my area, that think structural oppression is only a white thing. It’s so rare out here. Most think all groups do it but that whites are doing it the most. That’s reasonable. Yet, under CoC’s and associated beliefs, their views would be censored as well since they’d be construed as racist (in their definition) or contributing to reinforcement of it. Likewise, any “language” or “terms” that are racist, sexist… scratch that, which their political beliefs without supporting evidence label as inherently racist, sexist, etc. That too.

                                                                                        So, I object to these CoC’s that act like a good chunk of minority members’ opinions don’t matter, that ignore the fact that minorities do structural racism/sexism all the time (by default like people in general?), ignore the fact that whites/men they’re addressing might have been the oppressed minority in previous environment (or current), and then build social structures and enforcement mechanisms on top of those damaging, faith-based beliefs. I also say this as a white guy who spent years in black-run schools living a long time in many areas of black-run city working in black-run departments and companies. If I write about my experiences or tell it like a 3rd party, the black people always think the person in the story is black saying the feelings and obstacles are what they endure. When I say they’re white, then type of people I’m countering say, poof!, none of it counts as evidence of racism. That shows it’s politically-motivated maneuvering, not consistent logic.

                                                                                        These should be fought in favor of CoC’s that don’t require everyone in America or the World to believe and speak as if one, smaller, vocal group is unconditionally right in all political claims about these matters.

                                                                                        1. 14

                                                                                          That’s incorrect in any environment where whites or men are the minority. Human nature dictates that all groups favor those like them and penalize those unlike them. Examining the politics of non-white nations in World History or current affairs confirm those groups are just as racist in the social systems they create.

                                                                                          I’m sorry, what are you talking about? I’m from Peru where ‘whites’ are a minority. They are most certainly not discriminated against, quite the contrary. Whiteness is equated to privilege to the extent we have a saying here: ‘El dinero blanquea’, which roughly translates to ‘Money bleaches’.

                                                                                          The discrimination comes from factual power, not a head count. Power which was built upon centuries of enslavement and exploitation. Exploitation most members of the white elite minimize and/or are oblivious to.

                                                                                          It is the same in other places of South America. Certainly in Brazil, where the author is from.

                                                                                          1. 6

                                                                                            I’m from Peru where ‘whites’ are a minority. They are most certainly not discriminated against, quite the contrary. Whiteness is equated to privilege to the extent we have a saying here: ‘El dinero blanquea’, which roughly translates to ‘Money bleaches’.

                                                                                            I appreciate you sharing your example where one of the minorities has power. That supports my view that it’s highly conditional. Power is one thing that ties into discrimination. Group identity is another. You don’t need centuries of enslavement or exploitation to get one group working for themselves more or against another. It can be a factor, though. Often is. I also noticed you’re mentioning countries where white armies invaded them and their upper classes, not whites in general, did coercive negotiations for trade that benefits them. In this case, it’s real but tied to who did what. You can bet a group invaded by non-whites will also develop some reaction to that group.

                                                                                            Whereas around Memphis TN, being white in specific areas won’t get them respect or power due to the slavery that happened in the South. They’ll just get a warning to leave, beat down, robbed, and/or killed. No power. Like with those that invaded Latin America, the power was with a subset of them in high places or any that could get them to act on their behalf. As a civil rights proponent in America, I assure those powerful, white people would try to squash or minimize white people like me when our interests conflict. They hate outsiders even more but I would be treated more like them than your scenario would lead you to expect. I’m still in the outgroup. Just not as far out as Latin America. Same with local blacks or latinos that control specific areas, organizations, businesses, and so on. Being white conveys me large benefits in some contexts, about none in others, kind of negative in others, and violence/death in others.

                                                                                            It varies by context is my overall point. It’s not “If white, always this. If non-white, always that.” It’s really complicated. I’m sure I have plenty more to learn about the dynamics of the many groups. Thing is, countering it my way is much simpler than trying to trace it all: being civil, going out of your way to bring in others, accepting each other despite differences, and randomizing/blinding where possible selections/promotions. Increased fairness without further discrimination or hate. It’s simple, but not easy.

                                                                                            Edit to all: Other replies will be delayed since I have to work a late shift tonight. Heading out now. Hope yall have a good day and appreciate all the civil replies so far. :)

                                                                                            1. 4

                                                                                              Thank you for the thoughtful response. I get a better sense of what you were getting at. I don’t think I’m qualified to say much more on the matter, I don’t think I have a proper grasp of the dynamics of structural exploitation. But I’d like to add a couple of not fully developed ideas.

                                                                                              – Whiteness is sometimes used as a proxy for privilege.

                                                                                              – Whiteness is context dependent. My cousin from the US grew up on Pensilvania. Here he is a ‘gringo’, where he grew up he was considered far from white, being called racial slurs when growing up.

                                                                                              – It may be a better idea to talk more in other terms w/o proxies. Class politics are more relevant today than race IMHO.

                                                                                              – Even in Perú there are some contexts where you can be subject to specific instances of discrimination, but they pale in comparison to the structural discrimination that happens in the day to day basis. Which is why (in the context of Latin America at least) I view focusing on ‘reverse racism’ as a mechanism to distract from the larger and more important problem of structural discrimination.

                                                                                              also noticed you’re mentioning countries where white armies invaded them and their upper classes, not whites in general, did coercive negotiations for trade that benefits them.

                                                                                              I understand and empathize and partially agree with what you are getting at. Certainly you can’t be held personally accountable for everything action your government does. But at the same time they have to some extent the support of the general public. At best, you are turning a blind eye to the pain and suffering that supports your economy. But then again, it is our (Latin American) governments which are complicit and also responsible for said exploitation.

                                                                                              I’m the words of a mining worker, when talking to a college student:

                                                                                              – You speak of the gringos you’ve seen in Morococha and Cerro (Mines in Perú). But they are millions. Don’t generalize…

                                                                                              – So why do they send those how look down on us, cholos, not like people but like dogs.

                                                                                              Another thing, the exploitation of Latin America is not limited to ‘economic deals’ and is not something of the past (But there is more than a fair share to blame on our obsequent governments). In the 90’s US Companies hired henchmen to kill union leaders. The US Goverment (through US-‘AID’) provided logistic support for the mass forced sterilization of millions of women in Perú. Or even this decade, the US government, through the DEA, determines the policy and funds the forceful eradication of coca leaves further contributing to the impoverishment of Peruvian farmers. The Coca plant is legal here and is consumed by many in their day to day.

                                                                                              1. 1

                                                                                                I thank you for your detailed response. That was a mix of interesting and pretty sad. I’m going to back up a bit first on one issue since I was using a simplification that you and @stephenr are showing I probably shouldn’t use maybe here or in general. I’ll have to think on it. The actual belief I have about the ingroup vs outgroup dynamic is that they’re just treated differently in a way where it’s often positive to first and negative to second. It doesn’t have to be. I was just going with common pattern since it fits both my experiences and minorities in the U.S. which is mostly the topic around this thread. You’ve both given examples where a white outgroup can be benefit from their status in other countries. Likewise, there’s examples where the ingroup is a rough position with expectations for man or women coming to my mind easiest. One of the worst examples I’ve seen is the tribe that covers people in bullet ants to prove they’re men. I’d rather be the outgroup they look down on forever. ;)

                                                                                                On to your comments on exploitation. Far as unions, sterilization, and so on, that’s a side effect of the elites controlling America. They use the media to keep folks under control fighting enemies that aren’t the main enemy. You won’t see the stuff you described on American media much. Instead, it’s stuff that shocks or lets people point fingers temporarily for quick reactions. Next wave of shock happens making them forget what came before that. Americans can’t keep track of history. They can only focus collectively a moment at a time with what’s carefully put in front of them. The parts of the government doing things like you describe are mostly autonomous working for rich and powerful. Those that get voted in do a mix of things they said they’d do and things that appear to benefit their voters with lots of publicity for both. The choices are few with the non-participation and apathy so high that government doesn’t worry about rebellion. It’s kind of a constant rehash of the same games and corruption with businesses getting laws passed benefiting them more and more every year mostly under Americans’ noses since media barely reports on it.

                                                                                                So, that’s how that works if you were wondering. When I was young, I never thought handfuls of companies and some government organizations could really control most of several hundred million people with the presence of the Internet, activists getting word out, and so on. Yet, they actually can. They’re also intelligent, focused, well-staffed, and relentless in their pursuits vs masses that are hit and miss on these things with more scattered beliefs, goals, and participation. Just like in this, those fighting over the CoC’s and such aren’t investing effort in joining together against the elites like folks did in MLK days which truly scared them enough to plot murders. If they beat the corruption, they could work law by law, reg by reg, case by case to get a lot done starting with something as simple as due process for workers (I’m union). It takes unity and focus on where the foundational problems are, though, to achieve something like that. Not to knock efforts to improve things elsewhere but we really should be almost all in on dealing with people paying bribes for damaging laws to be passed that give corrupt jurisdictions and companies impunity in their evils. It seems like so much starts right there.

                                                                                                Anyway, there’s a lot of people pulling for the folks you describe. They just feel powerless to do anything about it. Also, those that care are so few that giving up products that come from there will change nothing. So, everyone from the consumers to the traders ignore their fleeting thoughts since they need some cheap copper.

                                                                                          2. 13

                                                                                            I’m not sure how anything you’ve written is relevant to LLVM’s code of conduct. It says; be welcoming of everyone, be considerate, be respectful, don’t make violent threats. All very basic, common sense stuff that the vast majority of people don’t need to a checklist to accomplish. I’m not sure how you went from what is actually written there, to this:

                                                                                            The kind of political beliefs behind these Codes of Conduct and privilege assume this doesn’t happen on a large scale by non-whites to whites.

                                                                                            Which part of LLVM’s CoC do you think is saying this? Do you think the part about being welcoming of everyone regardless of race is non-white people discriminating against white people?

                                                                                            1. 8

                                                                                              “Violent threats or language directed against another person. Discriminatory jokes and language. especially those using racist or sexist terms Advocating for, or encouraging, any of the above behavior.” (my emphasis added)

                                                                                              It’s those words that are used to block people based on political beliefs. The kinds of people that push CoC’s often have specific views about what is considered racist, sexist, etc that there’s not a wide consensus on. Any words or behavior will be interpreted in the light of their views. This is double true when they get into the moderation positions, which they often aim for. I don’t have to speculate as I’ve been banned from forums for quoting under my own name minority member’s opinions on minority issues. They were racist, sexist, etc. by their definitions. These policies interpreted however they want are the leverage they use to reinforce their own groups or eject other groups. Advocating for is the last term where anyone even debating whether something was racist or sexist might be construed as supporting the racist or sexist person. That’s happened plenty, too.

                                                                                              So, it’s the intent behind the terms along with whose enforcing them, what their beliefs are, and if they’re willing to exclude people with different beliefs on contentious topics. They usually are. So, I oppose those in favor of CoC’s without enforcement of political ideology that focus on people just staying civil, friendly, etc. Those parts of the CoC’s I have no problem with.

                                                                                              EDIT to add what I’m fine with since I’d rather not be overly critical of something that’s mostly good:

                                                                                              “be friendly and patient, be welcoming, be considerate, be respectful, be careful in the words that you choose and be kind to others, and when we disagree, try to understand why.”

                                                                                              Most of the weaseling is built into that “be careful in the words you chose” part. Minus the weaseling, even quite a few points in that section are good. Also note that we don’t have to speculate given Lobsters already has enforcement that’s similar to what I’m advocating for. Our moderators may agree or disagree with people’s political views but haven’t ejected anyone for stating their views with data in a civil way. Our community is still a thriving, functioning community despite any political scuffles.

                                                                                            2. 11

                                                                                              That’s incorrect in any environment where whites or men are the minority.

                                                                                              I guess you’ve never been to Thailand. Whites are a ridiculous minority, but they’re held in such high regard by a large percentage of the population.

                                                                                              Edit: and to clarify, this isn’t the same situation as @PuercoPop’s:

                                                                                              Thailand was never colonised, has never been under ‘white’ or ‘western’ rule and was not a ‘source’ for slavery by whites, Heck, whites (without getting Thai citizenship, which, holy shit is that a long process) can’t own land, can’t own more than 49% of a company, etc.

                                                                                              Try to find some Thai soap operas on YouTube - notice how all the actors are very pale skinned: they’re all half-Thai, half-white. If they want to show a ‘poor brown girl’ (believe me, their stereotype, not mine) they literally take a Thai/White actress, and use makeup/body paint/whatever to show their version of what anyone else would think of as a ‘natural’ brown skin.

                                                                                              I’ve been stopped at police licence checkpoints, and the cop has been so excited just to say hello to a white guy he doesn’t even care if I have a licence.

                                                                                              1. 4

                                                                                                Of course structural oppression isn’t a white only thing. Anyone can discriminate against anyone. And sure, in localized areas some groups can oppress others in different ways than the average. That doesn’t mean CoCs shouldn’t try to prevent racist / sexist conduct.

                                                                                                What things do you see in CoCs that minority members disagree with, that unfairly construes their beliefs as racist? Or disregards their opinions? Or ignores that whites/men may have been the oppressed minority in their environment?

                                                                                                1. 4

                                                                                                  That doesn’t mean CoCs shouldn’t try to prevent racist / sexist conduct.

                                                                                                  I didn’t say that. I said it’s usually interpreted in a way where racist and sexist conduct has definitions that usually mean whites/males can’t experience the negatives, are often responsible for them (supported point in general case), and inherently have the positives. Evidence strongly counters two of those showing it has to be judged case by case, place by place, etc. For instance, the forums dominated by the types of people with that ideology make them the majority with the structural power to include, exclude, oppress, and so on. By their own definitions this is true. Yet, any person in a different group dissenting in such a place will be told they’re the “majority” with “privilege” who wouldn’t understand the… blah blah blah. Actually, at least in that context, they’re a minority getting treated worse than its majority at risk of damaging affects of discriminatory treatment. This plays out in other contexts like school, work, etc. where non-whites or non-males in the majority positions reinforce themselves at others expense. A general pattern.

                                                                                                  Far as minority members disagree with, who are the minority members? That’s exactly what I mean. It depends on who you’re talking about in what context. Someone who is a minority member in one environment might be part of the privileged majority in another. The very definitions of who constitutes a minority (absolute vs conditional), what defines racism, who has privilege… these are in dispute across the nation. Many non-white and non-males dispute some of same points, too. So, starting from a specific set of views on it being true with enforcement working from there is already discriminating against all who disagree. They’ve not proven these views with evidence either.

                                                                                                  Note: You can try to cheat with legal terms that one side or a group of them got in but treating the law as truth or moral is dangerous. Slavery and women not having rights were legal. So, my definitions are about reasonable categories people are in with their numbers or influence compared to groups of other categories.

                                                                                                  The evidence collected on a global scale indicates that all groups in power reward their own and oppress others. So, if by evidence, this stuff will be conditional with every group monitoring themselves for bias boosting their outgroups when they don’t get a fair shake: not just whites or males being monitored with everyone boosting non-whites or non-males in all scenarios. In this country or in tech scene, the results would mostly be boosting non-whites or non-males to correct existing imbalances just on the numbers alone. No argument there. Yet, other things wouldn’t be taboo or inconsistent with the rules: a mostly black or women organization in mixed area with people in other categories having skills would be said to give more privilege to blacks/women, possibly structurally racist/sexist in hiring if ratios of workers vs supply were really skewed, encouraged to diversify, and activist action taken if they didn’t. Just like such people would do with white or male majority structurally reinforcing their own groups.

                                                                                                  We don’t see this. Most of the types that push and want to enforce CoC’s frame it as one thing by definition with whites or males on high-privileged/victim-creating side in all situations. That’s dishonest. I’ll take “this happens more often than that” but not “this never happens or we should act like it doesn’t exist.” With that, they can’t eject people for disagreeing with them on what counts as discriminatory language or behavior if it’s something there’s no consensus on by people who otherwise are against a lot of clearly-discriminating behavior. Further, they might be more likely to go with diverse inclusion plus blind evaluation/selection to correct imbalances instead of ignore whites/males much as possible to only focus on everyone else. One is inherently more fair achieving a similar goal.

                                                                                                  1. 2

                                                                                                    But don’t you think that being the privileged majority in the society you live in will have more to do with shaping your experience and fortune in the world than being the privileged majority in an online message board or OSS project?

                                                                                                    1. 3

                                                                                                      In the spaces I live with, my lack of privilege as a white minority in many contexts has cost me likely mental health, plenty humiliation, confusion, physical beatings, missed dates, missed jobs, missed promotions, and so on. Coworkers locally were just telling me recently about black-run classes singling them out for opposing beliefs. Things they say get an entire room screaming at them to intimidate them into silence on top of whatever penalties teacher might give. More extreme versions of this ideology are going campus to campus all over the place taking on life of their own where students are doing things like holding up signs protesting inferred problems in words or ideas of instructors that are there to help them during class.

                                                                                                      Again, I”m white male who doesn’t or can’t have such problems in a structural way according to specific groups in the United States despite the evidence of such things happening with non-white or non-male majorities. The forum example was just easier for people to see where you can tell the white male is not in control, is subject to the whims of others, and can be damaged for that. People causing outgroups problems is totally predictable in my model. That’s not the interesting thing. The interesting thing about the forum example is that the people in control who are the majority continue to describe their limited, powerless target in the same terms like powerful and majority. It doesn’t usually change as the circumstances change. It’s usually politics or religion when people’s beliefs or dictated rules don’t change when data flips by 100%.

                                                                                                      So, it’s not what they say it is or consistent. That’s enough reason to resist it. That following it would damage more innocent whites or males making them suffer as so many of us did is even more reason. You could say what motivates me to write these posts isn’t much different as what motivates those on the other side with personal experiences in racism or sexism to write their posts. It’s not “reverse (ism)” so much as all the same evil to me. Once we see and experience the evils, we have to stop them from continuing in any form they’ll take. Another thing I noticed is we seem to do it for others’ sake more than ourselves as we can’t undo what we experienced. We’ll always be a bit fucked up by it. We can maybe stop someone else from having to experience that, though. I want someone else to be everyone instead of “everyone but whites and males.”

                                                                                                      As usual, that’s on top of all the non-whites and non-males I care about and try to help. They just get a lot more attention and support than this other cause. Hence it being a focus area you’ll see me on. Plus, having been affected so strongly, that’s a motivational bias of mine on top of it.

                                                                                                      1. 4

                                                                                                        @nickpsecurity, that sucks. You’ve been a victim of structural discrimination. Worse, because it’s not a politically sexy or easily visible form, people continually reject your experience. That. Sucks.

                                                                                                        In the past, if I’d heard your narrative, I’d have dismissed you by thinking something like “this white dude forgets he always has the option to leave, unlike …” But that’s unfair.

                                                                                                        You’ve been a member of these communities, for years. You’ve been a decent person. You have family, friends, colleagues, social capital, and memories in these communities. To tell you “get up, leave, move on” is to ignore the simple reality that we’re social animals and structural discrimination harms everyone.

                                                                                                        Thank you for your repeated posts on this point. At the very least, you got through my thick head. Hopefully, in the future, I can be a better person for it.

                                                                                                        1. 2

                                                                                                          Damn. That means a lot to me you saying that. I sent a private message not long ago about your comments being interesting as usual on these discussions. More than usual with one comment about you getting beat up for talking white to presumably get ahead whereas I was learning early to talk or act black to attempt inclusion in my environment. It’s because some of what you wrote seems like you might have started in similar circumstances as me going in an opposite direction to find yourself with opposite views. Maybe a stretch to say two sides of same coin but that metaphor popped into my head at least. Then, we end up here in this moment on this forum. A trip, eh?

                                                                                                          It’s why I fight for flexibility on these topics in these discussions in wherever places I can. It’s painful and costly but the moments I learn from or reach people are worth it to me. I think those moments are critical. Probably gotta get to sleep now as I intended to. I just had to respond to that comment. :)

                                                                                                          Edit: Oh yeah, sleepy enough I forgot to say Good Night.

                                                                                            3. 16

                                                                                              demonization of political groups (and to some extent, white men)

                                                                                              I’m a white man in tech and I can count the number of times I’ve been demonized on zero fingers.

                                                                                              demonization of political groups

                                                                                              The dominant political party in this country has in black and white in its party platform a desire to make same-sex marriage illegal (while simultaneously claiming “government overreach” is a bad thing). If hearing that we shouldn’t punish gay people just for being gay makes you uncomfortable, well…it’s supposed to.

                                                                                              (That same party has in its platform a denial of anthropogenic climate change, an existential threat to our civilization; the denial of which has zero scientific backing….but no, we can’t tell them that they’re wrong.)

                                                                                              More importantly, the stuff I’m talking about above is also banned. You can’t go to a conference and talk about how “Republicans are stupid”. You’d be asked to leave or at least tone it down.

                                                                                              The problem is that a lot of people hear “don’t be an asshole” and they think “man when I tell transgender folks they’re stupid and make jokes about gay people I get called an asshole (totally unjustifiably!) and I might get in trouble. Ugh, SJW’s!”

                                                                                              Remember when no one on the internet cared what you looked like, believed, or who you loved? I want to go back to that :/

                                                                                              I’ve been on the Internet since around 1992. That’s only three years after the very first consumer ISP served its first customer.

                                                                                              Was there a large contingent of people who really did believe that? Absolutely, I mean, I was one of them. Were there plenty of racists, sexists, homophobes, and bigots of all stripes? Absolutely. Go look at old Usenet archives from the 80’s and 90’s. Racism, sexism, homophobia abound. There was a long diatribe against same-sex marriage on a Perl newsgroup for some damn reason around 1996; there were plenty of people who chimed in and agreed. Various big names in the early hacker community were famously bigoted (often hiding behind “libertarianism” while simultaneously claiming women and black folks are just inherently inferior and it’s “just science”).

                                                                                              The “good old days” are very often viewed through rose-colored glasses. People were people back then too, for all the good and the bad.

                                                                                              1. 16

                                                                                                Remember when no one on the internet cared what you looked like, believed, or who you loved? I want to go back to that :/

                                                                                                This was never true. People on the internet have always cared about who you are in ways that factor these things in. The fact that the (largely white) nerd culture contingent who had a lot of influence on the early internet has decided to tell this utopian story does not make it any more true than stories your grandpa tells about respectful children and walking both ways uphill in the snow.

                                                                                                1. 23

                                                                                                  It’s less that “No one cared what you looked like” and more “Everyone assumed you were a white dude with roughly conformal beliefs, behaviors, and similar.”

                                                                                                  1. 3

                                                                                                    There’s no contradiction. Both those things were true.

                                                                                                2. 12

                                                                                                  Remember when no one on the internet cared what you looked like, believed, or who you loved?

                                                                                                  And look where it got us. Toxic subcultures, huge gender inequality in the workplace, software products that simply don’t work for many groups people… The field was biased towards white male hackers from the very beginning, and “not caring” only increased this bias. No, I don’t want to go back to that, I want to fix it.


                                                                                                  Also, “no one one the Internet cared what you looked like” simply because they technically couldn’t: nicknames and plain text don’t divulge much. As soon as we got real names and YouTube it became obvious that the majority of people care very much about how you look like. So a young girl making a guitar cover or an Ubuntu installation walk-through mostly gets “you’re hot” and “nice boobs” comments.

                                                                                                  1. 16

                                                                                                    People with privilege have been getting more and more outraged that the world is discriminating against them. They see it as unfair. Yes, it’s discrimination and that sucks. But it’s infuriating when they paint it as unfair, because that implies they’re somehow being disproportionately discriminated against, that the discrimination is unfairly balanced against them. And of course that’s nonsense. These privileged people, intentionally or not, feel they’re entitled to live free from any and all discrimination at the expense of those less privileged.

                                                                                                    Remove yourself from the politics and think about a simple model instead of race, sex, gender, or orientation. Just group A and group B.

                                                                                                    • members of group A receive 120 points a day
                                                                                                    • members of group B receive 80 points a day

                                                                                                    Members of group A develop a belief system that they are entitled to their 120 points. When some members of group B try to increase their points to 85, and that lowers the group A points to 119, the members of group A become angry. They say the members of group B are being unfair.

                                                                                                    Group A believes that group B should not take any action that decreases their daily points. Group A compares their loss of 1 point to group B’s initial 40 point deficit, drawing a false equivalency. Some subset of A, group A’ deliberately take points from group B members around them to restore their original 120 points. Group A’ claims this is fair.

                                                                                                    Group A’ bands together to institutionalize the 40 point difference. Some extreme members of group A’ even try to widen the 40 point difference. Group A’ comes to believe at an institutional level that the 40 point deficit either doesn’t exist, or is somehow natural and fair. Group A’ believes they hold the moral superiority by defending their 120 points.

                                                                                                    Members of group B continue to try to elevate themselves, but A’ demands that all work done by group B must benefit group A’ equally. A’ considers this fair. Groups A and B focus on elevating group B rather than bickering with group A’ about whether 1 equals 40. Some members of both groups A and B institutionalize polite exclusion of group A’ just to simplify the whole thing, because they’re tired of bickering.

                                                                                                    A vocal minority demonizes group A’ for their actions. Some members of group A find this demonization troubling. A larger and less vocal group of A and B think group A’ is a bunch of fucking douchebags, and start to actively exclude A’ rather than deal with their asinine bullshit. A surprising amount of group A wonders if this exclusion is fair or reasonable. Group B, and an increasing amount of group A, respond “are you fucking joking my ass what the actual fuck?”

                                                                                                    If you’re a member of group A, please try to empathize with group B. Next time you feel discriminated against for your group A membership, take a step back and reflect on how you’re feeling in that moment. Try to imagine what it’s like to feel that way every single day of your life, at work, on the street, or in your own home through the media.

                                                                                                    1. 2

                                                                                                      But it’s infuriating when they paint it as unfair, because that implies they’re somehow being disproportionately discriminated against

                                                                                                      I think there is more to this implication than you’re letting on, because it makes assumptions about what “fairness” actually means from the person wielding the term. You’ve assumed one definition, but perhaps someone else has another in mind. As a nominal example, consider this implication in different ethical frameworks (say deontological or Kantian ethics versus utilitarian). Is it true in all of them? Alternatively, do you dismiss ethical frameworks in which it isn’t true as nonsense or intractable? Either way, those are important assumptions to state, because your entire comment appears to rest on them.

                                                                                                      (I do wholeheartedly agree with your final paragraph, but try my best to perhaps apply it as much as possible, with a healthy dose of perspective taking on all sides. I don’t always succeed!)

                                                                                                    2. 4

                                                                                                      I’m glad to see this trend of standing up against poltiical [sic] exclusion in Open Source.

                                                                                                      Me too, I just wish more people would up and leave, instead of stick around and yell about “reverse discrimination” and such. I’m definitely coming at it from a selfish angle (and concern for my friends,) I’m just really tired of people who “disagree” with us existing, at best, and actively harass us at worst. The only way I can participate in open source is anonymously, which means it’s mostly uncredited work. It’s just not worth the toll it takes on my mental health. Of course, whenever possible, I contribute to projects/communities who show that they are aware of these issues, and are actively doing something about it.

                                                                                                      Looking forward to the Incorrect, Off-topic, and Troll downvotes.

                                                                                                      1. 4

                                                                                                        I think it’s a loss when someone who can write code leaves a OSS project. I also think that discrimination, which you refer to as “reverse discrimination” in certain contexts, is bad, end of story. I don’t want anyone to be discriminated against. “Contribute good code” is all I ask off people looking to work with me. Politics are boringly unproductive towards that goal.

                                                                                                        1. 4

                                                                                                          I think it’s a loss when someone who can write code leaves a OSS project.

                                                                                                          I don’t, if they keep other people away who can also write code. I honestly can’t understand what’s wrong with participating in this, unless you believe (actual) discrimination isn’t real.

                                                                                                          1. 2

                                                                                                            I do believe actual discrimination is real but I think discriminatory internships aren’t the solution as they only lead to problems down the road. It’s great that outreachy is doing it and I believe they honestly think it’s the correct solution but I simply can’t agree on that.

                                                                                                    1. 22

                                                                                                      What a rollercoaster. First, I was concerned. Then interested. Then, I was struggling to figure out the problem. Then laughter. Then sadness.

                                                                                                      Am I wrong here:

                                                                                                      1. Outreachy would potentially fund people to work on llvm / internships
                                                                                                      2. It doesn’t cost LLVM any money or resources to be a part of Outreachy
                                                                                                      3. No one is even participating in llvm outreachy https://www.outreachy.org/communities/cfp/llvm/

                                                                                                      Seems rather overblown and dramatic. Maybe the drama was the point? I’m seeing a lot of ‘one-size-pie’ people. We can grow the pie! There is an infinite pie here!

                                                                                                      1. 11

                                                                                                        It doesn’t cost LLVM any money or resources to be a part of Outreachy

                                                                                                        Besides the mentor’s time. Other than that I think you’ve accurately summarized this teapot tempest.

                                                                                                        1. 7

                                                                                                          In summary, LLVM got nothing, but also lost a contributor who contributed a lot to LLVM for more than 10 years. What a disaster.

                                                                                                          1. -2

                                                                                                            Perhaps LLVM gained in the sense that they lost someone who promoted toxic working culture. My only data is this letter though - I wonder if there are any other primary sources.

                                                                                                            1. 6

                                                                                                              Chris Lattner himself posted a primary source, which is now merged to this thread. I recommend reading it.

                                                                                                              You have no evidence of Rafael promoting toxic working culture. This is bordering on libel. I have been on llvm-dev since 2007 and my experience indicates otherwise.

                                                                                                        1. 5

                                                                                                          I’ve seen a number of tricks to speed start time over the years, and am not surprised to see suggestions for the same in that thread. My most personally memorable one was a time I was loading some dozens of GB of data in to a process before analyzing it. My startup time was tens of minutes to load and link this data, and I had a lot of show stopping bugs that were crashing my data analysis after that data was loaded. Waiting for that data to reload got old before noon.

                                                                                                          I arranged to load my data once and fork + import my data analysis code so I only had to pay startup costs once. I easily had a dozen iterations before my analysis was stable enough. I saved myself a lot of time skipping over reloading that data. The quality of the code I wrote for this fork+import was really only good enough to be scaffolding: I threw it all away once that pipeline had stabilized. But I got my result that day.

                                                                                                          1. 2

                                                                                                            “I arranged to load my data once and fork + import my data analysis code so I only had to pay startup costs once. I easily had a dozen iterations before my analysis was stable enough. I saved myself a lot of time skipping over reloading that data.”

                                                                                                            Cool trick. As I read it, I remember that the ability to easily do this is a prime selling point of using LISP environments. Your code and data goes into the running image. You can branch off with new stuff that just reads and works on it. Kill that off. Try something else. Since you can change running code, you don’t need to reload anything for new experiments if your code already separates the data container and the new stuff. Memory safety should reduce crashes to exceptions.

                                                                                                            All languages, even C, need the ability to do this either as default of how they work or in a runtime environment. It’s just too useful. It might have saved you some effort.

                                                                                                            1. 2

                                                                                                              My own experience there was moving from C to Python and being blown away at the quality of the debugger and the exception handling environment. I’ve never quite got the hang of living in a “notebook” (interactive Python [or otherwise] prompt), but I have trouble doing without the ability to drop in to a debugger / repl when I want to poke around. I’ve gone so far as to write up the C equivalent of Python’s pdb.set_trace.

                                                                                                              1. 2

                                                                                                                The notebook/repl concept was weird for me too when I tried LISP. I didn’t get used to it. The cool thing was that the editor had an alternative where I typed code in a source file which could be compiled individually. The one thing that was unique of that experience vs interactive or full compiles was the ability to compile individual functions in a text file. They called it incremental compilation. I type a function stub, compile (fraction of a second), fill it in a bit, compile, test it in REPL, fix or move on. So, I was still using an editor with the normal feel of that (well, emac’s take on it…) with the advantages of a REPL plus a bit faster execution than interpreted.

                                                                                                                So, let me modify my previous statement to say the languages like C need livecoding in images that are hard to totally trash plus incremental compilation. :)

                                                                                                            2. 2

                                                                                                              Is any of that code available online? I have been dealing with similar problems recently. My solution has been to use Jupyter notebook to keep the raw data live and swap out the code as necessary. Definitely helps speed things up. (Especially if you have some modifications that you need to make on the data beforehand.)

                                                                                                              1. 7

                                                                                                                Alas that trick never even made it in to the proprietary repository I was working on. It was straightforward enough:

                                                                                                                import os
                                                                                                                data = be_back_in_an_hour()
                                                                                                                f = True
                                                                                                                while f:
                                                                                                                    pid = os.fork()
                                                                                                                    if 0 == pid:
                                                                                                                        import one_more_time
                                                                                                                        os.waitpid(pid, 0)
                                                                                                                        f = iowait_ask_try_again()

                                                                                                                Here be_back_in_an_hour runs, and data contains effectively all of the memory our application is going to be using. After os.fork a copy [on write] of data is available both in our child and parent process. In the child process, we import and invoke one_more_time.for_the_world on it. That’s the code I was actively debugging and wasn’t willing to wait for be_back_in_an_hour each time. If I found a bug I’d modify one_more_time.py and run another loop.

                                                                                                                There is a lot to be desired in the above code. I had to be careful not to send SIGINT to my parent process while debugging and if I happened to find bugs in data I had to both patch it at runtime in one_more_time.for_the_world and correct the bug in be_back_in_an_hour. It got me through an otherwise unacceptably long debug cycle, though.

                                                                                                                Most of the problems of this sort the better option is to serialize data in to a pickle or some other format that could be quickly read from disk. Either all at once or by dividing it in to pieces. It was only this one time that, for whatever reason, the return value from be_back_in_an_hour was only available hot.

                                                                                                                1. 2

                                                                                                                  Man, that’s a great trick! It’s a great example of how knowing your environment allows you to do complex work simply. Thanks for sharing.

                                                                                                                  1. 2

                                                                                                                    I usually do this by checkpointing intermediate results to disk as a cache. But your solution definitely works if caching data to disk won’t work for some reason.

                                                                                                                    1. 1

                                                                                                                      I like this because sometimes you want to deal with data that takes 30 seconds to load and only 5 seconds to process. (Or some other lopsided ratio.) It’s nice to have to worry only about the 5 seconds of execution time.

                                                                                                                      1. 1

                                                                                                                        If you can, saving your work to an intermediate file is vastly superior to the throw-away thing I did above, agreed.

                                                                                                                1. 4

                                                                                                                  Thanks for posting this.

                                                                                                                  A general problem I have with mercurial (I started using it for pet projects I work on at home, never at work), that a lot of material you can google is fairly old and lots of it outdated. Whenever someone refers to a hg extension, one needs to further investigate if this extension is still alive, and still the prefered way of doing things.

                                                                                                                  1. 1

                                                                                                                    The feature that this article describes is in core.

                                                                                                                    1. 9

                                                                                                                      Just to elaborate, because this is the third or fourth Mercurial discussion coming up in as many days, and I’m getting tired of the same discussion happening ad nauseam:

                                                                                                                      1. Out-of-the-box, with no configuration done, Mercurial doesn’t allow editing history–but ships with all the functionality required to do that. You just have to turn it on. Turning it on takes up to three lines in a config file and requires no third-party tools whatsoever.
                                                                                                                      2. Out-of-the-box, Mercurial does come with phases (discussed here) and the associated phase command that allows explicitly altering them. You don’t actually use the phase command that much; phases are actually more for consumption by history editing commands.
                                                                                                                      3. If you enable any of the history editing extensions–again, which ship with Mercurial–including rebase, which is probably all you need, and histedit, if you do really need the equivalent of git rebase -i, you will find they are phase-aware. In particular, they will allow you to alter changesets that are secret or draft, but not public. Because changesets will become public on push by default, this is by itself awesome, as it can trivially help you avoid accidentally rebasing something someone else might’ve pulled. Having this would’ve eliminated quite a few Git horror stories.

                                                                                                                      All of the above ships in core. You need to add at most three lines to your .hgrc or equivalent to get all of it. Which is fine, because you also need at least two lines just to set your email and name, much like you’d have to at least do git config --global user.email and git config --global user.name. A couple extra lines isn’t a big deal.

                                                                                                                      The only thing interesting in this space that doesn’t yet ship in Mercurial, and which I’m really excited about, is something called changeset evolution, which will allow cleanly and easily collaborating on in-progress, frequently-rebased/collapsed/edited branches. But that’s not baked yet, and Git doesn’t have anything equivalent to it yet anyway.

                                                                                                                      1. 5

                                                                                                                        The problem is making it clear to new users or users coming from git how to enable those extensions. There’s also the problem that the new tweakdefaults option is trying to solve: that hg’s backward compatibility guarantees mean that new features (e.g. new since hg 1.0) don’t get surfaced in the hg UI unless you’ve customized your setup (or had it customized for you as in a corporate setup).

                                                                                                                        git’s out-of-the box experience enables a lot of power user features. This certainly isn’t great for safety but it is great for discovery - thus these perennial discussions on forums like lobsters and HN.

                                                                                                                        I’m hoping with evolve getting upstreamed we might see more projects using mercurial. On the other hand, for open source projects the only real place to host them is either to use hgweb and roll a custom hosting and development workflow (basically what mercurial itself does) or use bitbucket, which is run by people who don’t prioritize or think much about open source fork-based workflows. It would be amazing if there were more competition in this space. Kallithea doesn’t support pull requests. Rhodecode has a questionable past participating in the free software community. I’m not aware of much else in this space.

                                                                                                                        What would really change things is if one of the big players like github or gitlab decided to add support for other VCS tools although I’m not exactly holding my breath for that to happen.

                                                                                                                        1. 4

                                                                                                                          Unfortunately, I agree. I have noodled with basically rewriting Kiln (only not called that because I’m not at Fog Creek) based on changeset evolution and with an explicit fork-based workflow focus, but I’ve been waiting to see if evolution really does get fully into core, and then what the story is with hg absorb, since properly supporting Mercurial and evolution looks really different in an hg absorb-based world than one without it.

                                                                                                                          In particular, my idea is that anyone can push to a repository, but it’ll automatically go into a new pull request in draft phase. At that point, if hg absorb stays a thing, and a normal user can be expected to just run hg absorb repeatedly as they address issues, then I can rely on obsmarkers. Otherwise, the story empirically gets a lot more interesting; I’ve had trouble on prototypes not requiring the user to know they’ve got a custom branch, basically doing the same kluge as Gerrit, albeit with a different mechanism.

                                                                                                                          Edit: just to be clear, I’ve prototyped bits of this a few times, but nothing I want to release—doubly so since it’s all in Smalltalk anyway. But it’s been helpful to try to think through what a proper approach to this would work like.

                                                                                                                          1. 2

                                                                                                                            AFAIK the only blocker on absorb getting upstreamed is the need to rewrite the linelog interface in C.

                                                                                                                          2. 2

                                                                                                                            I’d like to add that RhodeCode is actively supporting usage of Evolve/Phase with changeset evolution. Based on feedback from our users we started to ship evolve extension enabled and within the CE and EE editions.

                                                                                                                            This works with Pull requests, can be enabled globally or per repository.

                                                                                                                            You might question the past, but we since almost 2 years provide a open-source free, no limitation version of CE edition of RhodeCode (similar to Gitlab CE/EE). You can use evolve there and it works :) I said it many times, and I’ll said it again. We did mistakes with certain past releases, but currently, our business model is based on a free GPL open-source version. This will be here to stay, we always try to promote Mercurial, and it’s great workflows using mentioned extensions.

                                                                                                                            I doubt Gitlab/Github will ever support mercurial. They openly said they won’t for many reasons.

                                                                                                                            We currently work on a simple app for Digitalocean, we hope it’ll make usage of Mercurial hosting much easier for people that don’t want to host it themselves.

                                                                                                                            1. 1

                                                                                                                              Kallithea doesn’t support pull requests.

                                                                                                                              Looks like they now do.

                                                                                                                              I’m not aware of much else in this space.

                                                                                                                              Phabricator, Redmine and Trac also support Mercurial as well.

                                                                                                                              However none of them are as convenient as the hosted and “free for open source” offerings of Bitbucket, GitHub and GitLab.

                                                                                                                            2. 2

                                                                                                                              I feel the need to fork hg2k5, which will be mercurial with only the original features. :)

                                                                                                                              1. 1

                                                                                                                                You’d have to start with forking Python 2.4 so that you could run it.

                                                                                                                        1. 3

                                                                                                                          I realize that this is an exercise in performance golf at some level, but in my experience it’s usually not worth tweaking pure Python code for speed like this. In the end you’re still limited by the speed of the Python language and you’re probably left with code that is more obfuscated than a simpler but a little slower solution. Python is great for expressiveness and readability, not speed.

                                                                                                                          There are better ways to get speedups anyway. Things like jit compilers (e.g. pypy and numba) and accelerators like Cython.

                                                                                                                          1. 6

                                                                                                                            Can someone explain a reason you’d want to see the descendants of a commit?

                                                                                                                            1. 7

                                                                                                                              Following history. Code archeology.

                                                                                                                              Many people use the VCS history as a form of documentation for the project.

                                                                                                                              1. 4

                                                                                                                                But history is the past… you can always see the past in git…

                                                                                                                                1. 16

                                                                                                                                  Suppose I’ve isolated an issue to this bug fix commit. In what version of gRPC did that commit release?

                                                                                                                                  Github tells you it’s on the v1.8.x branch, so if you head over to the, v1.8.x branch, you can see it landed after v1.8.5, so it must have released in v1.8.6. Easy enough right?

                                                                                                                                  Well that’s not the whole story. That commit was also cherry-picked over to the v1.9.x branch here, because v1.9.x was branched before the bug was fixed.

                                                                                                                                  Besides, that was silly to begin with. Why did you go to the v1.8.x branch and then manually search for it. Why couldn’t it just tell you when it got merged? That would have been nice.

                                                                                                                                  Many projects maintain many release branches. Some just backport bug fixes to older releases, some have more significant changes. Sometimes a bug fix only applies to a range of older releases. Do you want to track all that with no notion of descendants? It’s not fun.

                                                                                                                                  Even just looking at pull requests, it would be nice to see whether a pull request eventually got merged in or not, what release it got merged into, and so on. That’s all history too.

                                                                                                                                  So no, you can’t always see the past in git. You can only see the direct lineage of your current branch.

                                                                                                                                  1. 3

                                                                                                                                    I used to find this hella handy at Fog Creek, especially for quickly answering which bug fixes were in which custom branch for some particular client. We actually made a little GUI out of it, it was so helpful.

                                                                                                                                    (Interestingly, while Kiln supports that in Git too, it at least used to do so by cheating: it looked up the Mercurial SHAs in the Harmony conversion table, asked Mercurial for the descendants, and then converted those commits back to their Git equivalents. Because Harmony is now turned off, I assume either they’ve changed how this works, or no longer ship the Electric DAG, but it was cool at the time.)

                                                                                                                                    1. 2

                                                                                                                                      Why couldn’t it just tell you when it got merged?

                                                                                                                                      I don’t know why GitHub doesn’t, but Git can:

                                                                                                                                      $ git tag --contains b15024d6a1537c69fc446601559a89dc8b84cf6f

                                                                                                                                      That doesn’t address the cherry-picking case though. I’m not aware of any built-in tooling for that. Generally Git avoids relying on metadata for things that can be inferred from the data (with file renames being the poster child of the principle), so I’m not surprised that cherry-picks like this aren’t tracked directly. Theoretically they could be inferred (i.e. it’s “just” a matter of someone building the tooling), but I’m not sure that’s doable with a practical amount of computation. (There are other operations Git elects not to try to be fast at (the poster child being blame), but many of them still end up not being impractically slow to use.)

                                                                                                                                      1. 1

                                                                                                                                        Does Fossil track cherry-picks like this though? So that they’d show up as descendants? In git the cherry-picked commit technically has nothing to do with the original, but maybe Fossil does this better. (It’s always bothered me that git doesn’t track stuff like this - Mercurial has Changeset Evolution which has always looked suuuuper nice to me.)

                                                                                                                                        1. 4

                                                                                                                                          According to the fossil merge docs, cherry pick is just a flag on merge, so I imagine it does. I was just highlighting the utility of viewing commit descendants.

                                                                                                                                          1. 7

                                                                                                                                            Mercurial also tracks grafts (what git calls a cherry-pick) in the commit metadata.

                                                                                                                                            1. 5

                                                                                                                                              This is actually illustrative of the main reason I dislike mercurial. In git there are a gajillion low level commands to manipulate commits. But that’s all it is, commits. Give me a desired end state, and I can get there one way or another. But with mercurial there’s all this different stuff, and you need python plugins and config files for python plugins in order to do what you need to do. I feel like git rewards me for understanding the system and mercurial rewards me for understanding the plugin ecosystem.

                                                                                                                                              Maybe I’m off base, but “you need this plugin” has always turned me away from tools. To me it sounds like “this tool isn’t flexible enough to do what you want to do.”

                                                                                                                                              1. 7

                                                                                                                                                Huh? What did I say that needs a plugin? The graft metadata is part of the commit, in the so-called “extras” field.

                                                                                                                                                I can find all the commits that are origins for grafts in the repo with the following command:

                                                                                                                                                $ hg log -r "origin()"

                                                                                                                                                And all the commits that are destinations for grafts:

                                                                                                                                                $ hg log -r "destination()"

                                                                                                                                                This uses a core mercurial feature called “revsets” to expose this normally hidden metadata to the user.

                                                                                                                                                1. 2

                                                                                                                                                  Right but how much manipulation of grafts can you do without a plugin? I assume you can do all the basic things like create them, list them, but what if I wanted to restructure them in some way? Can you do arbitrary restructuring without plugins?

                                                                                                                                                  Like this “extras” field, how much stuff goes in that? And how much of it do I have to know about if I want to restructure my repository without breaking it? Is it enough that I need a plugin to make sure I don’t break anything?

                                                                                                                                                  In fairness, I haven’t looked at mercurial much since 2015. Back then the answer was either “we don’t rewrite history” or “you can do that with this plugin.”

                                                                                                                                                  But I want to rewrite history. I want to mix and blend stuff I have in my local repo however I want before I ultimately squash away the mess I’ve created into the commit I’ll actually push. That’s crazy useful to me. Apparently you can do it with mercurial—with an extension called queues.

                                                                                                                                                  I’m okay with limited behavior on the upstream server, that’s fine. I just want to treat my working copy as my working copy and not a perfect clone of the central authority. For example, I don’t mind using svn at all, because with git-svn I can do all the stuff I would normally do and push it up to svn when I’m done. No problem.

                                                                                                                                                  And I admit that I’m not exactly the common case. Which is why I doubt mercurial will ever support me: mercurial is a version control system, not a repository editor.

                                                                                                                                                  1. 12

                                                                                                                                                    For the past several years, as well as in the current release, you still have to enable an extension (or up to two) to edit history. To get the equivalent of Git, you would need the following two lines in ~/.hgrc or %APPDATA%\Mercurial.ini:


                                                                                                                                                    These correspond to turning on rebase and rebase -i, respectively. But that’s it; nothing to install, just two features to enable. I believe this was the same back in 2015, but I’d have to double-check; certainly these two extensions are all you’ve wanted for a long time, and have shipped with Hg for a long time.

                                                                                                                                                    That said, that’s genuinely, truly it. Grafts aren’t something different from other commits; they’re just commits with some data. Git actually does the same thing, IIRC, and also stores them in the extra fields of a commit. I’m not near a computer, but git show —raw <commit sha> should show a field called something like Cherry-Pick for a cherry-picked commit, for example, and will also explicitly expose and show you the author versus committer in its raw form. That’s the same thing going on here in Mercurial.

                                                                                                                                                    And having taught people Git since 2008, oh boy am I glad those two extra settings are required. I have as recently as two months ago had to ask everyone to please let me sit in silence while I tried to undo the result of someone new to Git doing a rebase that picked up some commits twice and others that shouldn’t have gone out, and then pushing to production. In Mercurial, the default commands do not allow you to shoot your foot off; that situation couldn’t have happened. And for experienced users, who I’ve noticed tend to already have elaborate .gitconfigs anyway, asking you to add two lines to a config file before using the danger tools really oughtn’t be that onerous. (And I know you’re up for that, because you mention using git-svn later in this thread, which is definitely not something that Just Works in two seconds with your average Subversion repository.)

                                                                                                                                                    It’s fine if you want to rewrite history. Mercurial does and has let you do that for a very long time. It does not let you do so without adding up to three lines to one configuration file one time. You and I can disagree on whether it should require you to do that, but the idea that these three lines are somehow The Reason Not to Use Mercurial has always struck me as genuinely bizarre.

                                                                                                                                                    1. 5

                                                                                                                                                      Right but how much manipulation of grafts can you do without a plugin?

                                                                                                                                                      A graft isn’t a separate type of object in Mercurial. It’s a built-in command (not a extension or plugin), which creates a regular commit annotated with some meta-data recording whence it came from. After the commit was created it can be dealt with like any other commit.

                                                                                                                                                      And how much of it do I have to know about if I want to restructure my repository without breaking it?

                                                                                                                                                      Nothing. Mercurial isn’t Git. You don’t need to know the implementation inside-out before you’re able to use it effectively. Should you need to accomplish low level tasks you can use Mercurial’s API, which like in most properly designed software hides implementation details.

                                                                                                                                                      But I want to rewrite history. (…) Apparently you can do it with mercurial—with an extension called queues.

                                                                                                                                                      The Mercurial Queues extension is for managing patches on top a repository. For history editing you should use the histedit and rebase extensions instead.

                                                                                                                                                      I just want to treat my working copy as my working copy and not a perfect clone of the central authority.

                                                                                                                                                      Mercurial is a DVCS. It lets you do exactly that. Have you run into any issues where Mercurial prevented you from doing things to your local copy?

                                                                                                                                                      For example, I don’t mind using svn at all, because with git-svn I can do all the stuff I would normally do and push it up to svn when I’m done.

                                                                                                                                                      Mercurial also has several ways to interact with Subversion repositories.

                                                                                                                                                      mercurial is a version control system, not a repository editor.

                                                                                                                                                      Indeed it is. And the former is what most users (maybe not you) actually want. Not the latter.

                                                                                                                                                      1. 2

                                                                                                                                                        Mercurial’s “Phases” and “Changeset Evolution” may be of interest to you, then.

                                                                                                                                                        1. 6

                                                                                                                                                          It’s also worth noting that mercurial’s extension system is there for advanced, built-in features like history editing. Out of the box, git exposes rebase, which is fine, but that does expose a huge potential footgun to an inexperienced user.

                                                                                                                                                          The Mercurial developers decided to make advanced features like history editing opt-in. However, these features are still part of core mercurial and are developed and tested as such. This includes commands like “hg rebase” and “hg histedit” (which is similar to git’s “rebase -i”).

                                                                                                                                                          The expectation is that you will want to customize mercurial a bit for your needs and desires. And as a tool that manages text files, it expects you to be ok with managing text files for configuration and customization. You might think that needing to customize a tool you use every day to get the most out of it to be onerous, but the reward mercurial gets with this approach is that new and inexperienced users avoid confusion and breakage from possibly dangerous operations like history editing.

                                                                                                                                                          Some experimental features (like changeset evolution, narrow clones and sparse clones) are only available as externally developed extensions. Some, like changset evolution, are pretty commonly used, however I think the mercurial devs have done a good job recently of trying to upstream as much useful stuff that’s out there in the ecosystem into core mercurial itself. Changset evolution is being integrated right now and will be a built-in feature in a few releases (hopefully).