Hacker Newsnew | past | comments | ask | show | jobs | submitlogin
Russ Cox: Go, Open Source, Community (golang.org)
149 points by agonzalezro on July 9, 2015 | hide | past | favorite | 70 comments


I agree that a code of conduct is a great idea but I'm really bummed to read that the Django CoC is going to be adopted by golang.

1. The Django CoC uses very vague language on what it is forbidden and explicitly tells you that "this isn’t an exhaustive list of things that you can’t do" just to be extra vague in what constitutes unacceptable behaviour.

2. It does not define what process will be used to address CoC violations, being ejected from an OS project for violating the CoC can be a serious thing with personal and professional ramifications but an accused is not given the right to face their accuser nor the right to an impartial jury (which would be hard to do anyway since the accusation could be something like "he's making me anxious")

3. It overextends itself "violations of this code outside these spaces may affect a person's ability to participate within them" which means that not only you are under the scrutiny of the kangaroo court when you are posting on golang spaces but everywhere else: ycombinator, reddit, your personal blog, etc. Honestly I feel like just writing this criticism is painting a target on my forehead, talk about safe spaces.

I wouldn't be making this comment if CoCs hadn't already been used in bad faith to attempt to character assassinate OS contributors (for exmaple the Kubuntu debacle or this [1])

[1] https://igurublog.wordpress.com/2015/06/04/


There are good reasons why rules regulating human social behaviour (such as legislation) are written in this "vague" way, not attempting to be formal-verification-level complete but relying upon human interpretation. It follows that to work well it needs the people doing the interpretation (judges, committees, ombudsman, etc) to be competent, and be selected so that people can have faith in them.

Regarding your [1], the GNOME code of conduct referenced therein explicitly says "There is no official enforcement of these principles, and this should not be interpreted like a legal document". So maybe that CoC is being applied contrary to its design there.


> There are good reasons why rules regulating human social behaviour (such as legislation) are written in this "vague" way, not attempting to be formal-verification-level complete but relying upon human interpretation

I wasn't arguing for formal verification, but you should notice that actual legislation is a lot less vague than the Django CoC.

>It follows that to work well it needs the people doing the interpretation (judges, committees, ombudsman, etc) to be competent, and be selected so that people can have faith in them.

And that's another problem with the Django CoC that I was mentioning, there's nothing there insuring that someone that's accused receives a due process, nor that all complaints are listened to equally.


The Django process seems to address these concerns:

https://www.djangoproject.com/conduct/enforcement-manual/ documents at length how the committee handling the violation reports is appointed, how they conduct their work, how their oversight works etc.

Then, https://www.djangoproject.com/conduct/reporting/) describes an appeal process: "Appealing: Only permanent resolutions (such as bans) may be appealed. To appeal a decision of the working group, contact the DSF Board at foundation@djangoproject.com with your appeal and the DSF board will review the case"


So it's a group of three appointed people, they can act without consensus as long as it's an "emergency", the accused has no right to defend themselves, to face the accuser or to see the evidence and almost none of the decisions can be appealed.

"Justice"


I have a hard time seeing this as bad compromise between expediency and process: "If the act is ongoing (such as someone engaging in harassment in #django), or involves a threat to anyone's safety (e.g. threats of violence), any working group member may act immediately (before reaching consensus) to end the situation."

Remember that there is still after the fact accountability, and that the system relies on the people in the WG being trusted community members and reasonable people.

BTW this is not far from how it works in the real world. Bob is not going to be able to litigate his side of the story and face his accusers in most situations where he is removed from premises for harassment or threats of violence. And people generally are fine with this.


It's not exactly unusual for an IRC channel op to /kb someone actively being obnoxious, without first consulting with two other people or interviewing the person in question.


/kb carries very little long-term stigma. "Was kicked out of project X for violating their code of conduct" might do.


> "Was kicked out of project X for violating their code of conduct" might do.

Or might not. Especially if either project CoC's in general or Project X's specifically are known for being interpreted and enforced capriciously.


Similar concerns (with more examples) have been raised in CoC discussion over on Reddit:

https://www.reddit.com/r/golang/comments/3abyva/a_code_of_co...


There was a lengthy discussion on a CoC on the golang-nuts list it was concluded that (3) would should probably not be included for the time being.

https://groups.google.com/forum/#!msg/golang-nuts/sy-YcVPADj...


I've only read the first page and I already saw a problematic statement from A. Gerrand (which seems to be in charge of this CoC proposal).

User Peter Kleiweg raises this concern "Who gets to decide what is racist? And even whether or not racist is a bad thing?" and while I disagree with him on this particular issue the answer that Gerrand gives is very problematic:

"If it's speech that makes people feel unwelcome and discriminated against, then I personally believe that's a bad thing."

the problem with this is that, for example, an open display of support for gay marriage will make some catholics (for example) unwelcome and discriminated against. This isn't even theoretical, this is an argument that actually happens in the real world, just not in the bubble inhabited by Gerrand, apparently.


Discomfort is not unwelcomeness. What you should be looking for is a situation in which direct concerns of Catholics are getting shouted down - that does happen(in an existence-proof sense), but it's not nearly as common as an internal "rationale of oppression" used to escape responsibility and consequence for beliefs that are directly harmful to others. "Do not deny me my belief, critique is tyranny" is a very common theme to defend all forms of discrimination, both from the positive side of "I do not think I am doing wrong myself" and the negative of "I am justified because we already know they are evil."

You can still have schisms and nasty politics with a policy like this, since obviously the different sides of the discussion will value things unequally, but the goal is to at least maintain surface politeness and order so that small voices don't give up so quickly.


>Discomfort is not unwelcomeness unwelcomeness is when a majority of people is making you feel uncomfortable. Does that mean it's only ok to express an opinion if it's unpopular or unanimous?

>Catholics are getting shouted down - that does happen(in an existence-proof sense), but it's not nearly as common

A catholic would point you to all those countries where catholics are getting killed daily for their opinion.

»"Do not deny me my belief, critique is tyranny" is a very common theme to defend all forms of discrimination

An equally common theme is "your opinion/behaviour is offensive and scandalous", but both are exactly the point I'm making, it should be possible to make statements critical to the system without being branded with a scarlett letter by some secret court working on anonymous tips.

>You can still have schisms and nasty politics with a policy like this

IMHO no, you can't, the Django CoC is too "feelings oriented", you can't objectively judge peoples feelings (especially on mailing lists and IRC) because it's internal unobservable state, besides I have learned that some people invented several terms [1] [2] [3] to redefine "surface politeness discussion" into harassment.

Furthermore it specifically says "In general, if someone asks you to stop, then stop" which mean that even if you are making an argument that does not violate the CoC simply defending it if someone asks you to stop is a violation. It's simply impossible to enforce such rule equitably without every argument becoming a race to who can shout "mom!" first.

[1] http://rationalwiki.org/wiki/Just_asking_questions [2] http://rationalwiki.org/wiki/Sealioning [3] http://rationalwiki.org/wiki/JAQing_off


Where is Voltaire where you need him?

"I disapprove of what you say, but I will defend to the death your right to say it."

(And yes, I am aware he didn't say these exact words himself.)


I prefer Milton here:

“Though all winds of doctrine were let loose to play upon the earth, so truth be in the field, we do injuriously by licensing and prohibiting to misdoubt her strength. Let her and falsehood grapple, who ever knew truth put to the worse, in a free and open encounter.”


In my experience people only give a fuck about voltaire when they don't happen to disapprove.


I don't see what this has to do anything. Sure, if an article in a newspaper is censored by a government I fully agree.

If I am on e.g. a technical list or attend a conference, I'd expect discussions about the subject-matter and offbeat comments about gender, race, or whatever.


Maybe the spirit of Voltaire's work is captured in this proverb, but Voltaire never actually said or wrote this anywhere.

Apparently it's a phrase from a biography of Voltaire by Evelyn Beatrice Hall.


See the last line of my comment then.


the problem with this is that, for example, an open display of support for gay marriage will make some catholics (for example) unwelcome and discriminated against. This isn't even theoretical,

The thing is that we are talking about a technical community. I don't see what an open display of support for or disapproval of gay marriage has to do with Go.

People subscribe to Go lists because they want to discuss technical aspects of a programming language. For other topics, there are other venues.


People subscribe to Go lists because they want to discuss technical aspects of a programming language. For other topics, there are other venues.

Yes, and for highlighting off-topic subjects, there is the simple moderator acronym "OT". A rigid rule book and enforcement policy has nothing to do with free speech. It's all about trying to balance the inequalities in the tech sector. Unfortunately, a rule book is not going to solve that problem. The cynic in me just thinks this a conference "feel-good" announcement planned as a result of Googlers feeling bad about the fact that they are a 83% male workforce.

If the real problem is going to be solved, it's got to be about encouraging and educating people from all genders and races to code. That starts much earlier than any engagement in online communities. If the output of schools and colleges of trained coders was balanced, all the horror stories of harassment and abuse would soon become history as the workforce also becomes balanced, in my opinion.

I strongly dislike the idea of self-appointed judiciaries. Mistakes happen. The nuances of behaviour of people with mental health issues is likely to get caught up in these rule books. That's why we have courts, to help deal with difficult cases. Vigilantes may well refer to the code of conduct for justification for statements of intent like this:

http://dave.cheney.net/2015/06/13/listen-up

I'm not comfortable with that.


The problem with that is the CoC explicitly states:

"violations of this code outside these spaces may affect a person's ability to participate within them"


Did you read my post that started this thread? :)


Sorry, I must have missed that or misunderstood it.


That link was discussed on reddit[1] as well and it appeared as if the overwhelming majority preferred not to introduce a code of conduct like Django's. I'm disappointed that their usual approach of "Less is more" didn't influence this decision as well.

[1] - http://redd.it/3abyva


I don't think the example you link to has anything to do with character assassination. The article lists the comments in a bug entry on a bug tracker, and points out two comments that were deleted. I happen to agree with the deletions, some comments have no place in a bug tracking system that should be used to fix bugs, not argue politics and accuse other people of malicious intent. Such comments are not conducive to bug fixing, so they have no place on a bug tracker.

Deleted comment 1 included "But I doubt I would waste time on coding as I’m sure you’ll just make an excuse to reject it, just as you’re making excuses instead of fixing this bug."

Deleted comment 2 included snippets like "except where they deliberately break it" and "but I’m sure it’s still their agenda to make it a dependency just because they want it to be".


Huh, this completely puts me off that project.


> At the same time, Go's static typing avoids much of the repetition of traditional statically typed languages

As a happy user of Go, I usually find myself writing slightly more code than C#. Maybe it's because of the lack of generics or maybe it's because that I have 10x more experience in C#. To me, it's interesting to read this.


I think what he means is this:

x := y // say y is of type int

// rather than in C/C++ & Java

int x = y;

So you just declare the type once, and don't have to repeatedly declare it


I believe Russ is alluding to Go's type inference which Java / C++ / C# dont have.


C# and C++11 have Go-like type inference (var, auto).


Java's lambdas too.


Go has type inference but having to declare types everywhere hardly make a language more "verbose".

The problem with Java(lang) is the culture.

Instead of writing programs in a pragmatic way, Java devs feel the need to forcefully over architecture code bases, because there are afraid that a colleague looking at their code will not find it JEEish enough.

Obviously Go doesn't have the same culture since it doesn't force developers into writing classes everywhere. So it's easier to hack something quickly with a bunch of functions and variables, like in most dynamic languages.


> The problem with Java(lang) is the culture.

Maybe 8 years ago. Other than Oracle itself the language, the libraries and the culture has changed rather substantially over the last few years.

> Instead of writing programs in a pragmatic way, Java devs feel the need to forcefully over architecture code bases, because there are afraid that a colleague looking at their code will not find it JEEish enough.

Much of the over-design in older Java has to do with ancient methodologies of writing massive specs and having review committees. It has nothing to do with not being JEEish or whatever abuse of keywords you want to make.

> Obviously Go doesn't have the same culture...

Actually I'm starting to see many many Java programmers use golang because many Java programmers are system-like programmers (middleware or whatever its called these days). I guess their behaviors will magical change right?

> So it's easier to hack something quickly with a bunch of functions and variables, like in most dynamic languages.

Well that is true but writing classes in Java is not exactly hard. If it helps you can think of the classes as modules or just files you put your code in. You don't have to write OOP in Java and some would argue most of Java is not OOP.


> The problem with Java(lang) is the culture.

Except people mix Java culture with enterprise culture.

Any language has achieves Java like success at enterprise level will suffer the same pains.

I am old enough to have endured that culture in OOP Clipper, C (in-house framework), C++ (DCOM and CORBA everywhere), before Java was even a thing.

Don't be mistaken, if Go gets adopted by the typical enterprise companies, GoEE will be just around the corner.


Some Java developers not all. It's a very big ecosystem after all.

You typically don't see the same patterns used in Dropwizard, Play and Vert.x style applications.

And the rationale behind was not out of peer pressure but just reflective of an era in software development where you were taught to abstract everything to make it easier to implement changes in the future. But that time has somewhat passed and even libraries like Spring moved to annotations over XML bindings.


    > having to declare types everywhere hardly make a 
    > language more "verbose".
Of course it does?


Does the political climate in CA demand that people ignore subtle nuances about inclusiveness?

Linus said, "...I've literally had developers who were working on things that I didn't really like, but I didn't shut down early enough. They worked on it for a long time; they felt that it was ready, they submitted it to me, and I said "no this was horrible" because at that point I had to make a decision. And at least in one of those cases I had some other friends basically email me later and saying "the guy is suicidal"." http://opensource.stackexchange.com/questions/395/how-do-i-d...

I think you imply a CoC, and Russ's style needs no improving. If you must adopt a CoC why don't you assume people will behave badly and provide a workaround instead of relying on virtue.


Was pleasantly surprised to see the veritably (at times) acidic rsc championing a code of conduct. Definitely will be beneficial to the community. I haven't heard about any incident that has lead to a CoC being necessary, which is awesome.


It's interesting that you say that, from my little interaction at Gophercon with him, he was a very nice and genuine person. In the parent article, he also mentions:

   For example, I have learned that when I am pressed for 
   time I tend to write fewer words, with the end result that 
   my emails seem not just hurried but blunt, impatient, even 
   dismissive. That's not how I feel, but it's how I can come 
   across, and that impression can be enough to make people 
   think twice about using or contributing to Go. I realized 
   I was doing this when some Go contributors sent me private 
   email to let me know. Now, when I am pressed for time, I 
   pay extra attention to what I'm writing, and I often write 
   more than I naturally would, to make sure I'm sending the 
   message I intend.
which might relate to your point of view.


My feelings are happier when you get to the point quickly and don't waste my time.


Perhaps we should question the proliferation of coaxing more and more in smilies and pleasantries, when all that is really needed is a straightforward, factual answer.

Smilies and pleasantries are fine, if they come up naturally. But why do people get slighted when someone replies to them with a straightforward – not rude, not crass, not sarcastic, just straightforward – answer?

I've caught myself getting slighted at people I know who reply to texts or messages in a direct way. Now that everyone uses smilies for personal communication, the direct to-the-point style feels cold and dismissive. But then I realize that they might be perfectly kind and pleasant people in reality. They just have a different text/message style.


I've been reading Russ' emails for 15+ years since he was a Bell Labs wunderkind hacking on Plan 9. On the Plan 9 mailing list he was one of the most prolific and consistently helpful posters, so I think it's unfortunate that he comes across to you as being "acidic" when in real life he's obviously anything but. But as he said in his talk, when pressed for time he tends to make his emails brief, which may give the impression that he is curt, when really it's a weakness of the medium, not the person.


When I read this response about bitwise NOT operator it definitely felt like an impatient and dismissive RTFM response. A patient and welcoming answer could've been much shorter: "hey, we use ^ instead of ~ for that".

https://groups.google.com/forum/#!topic/golang-nuts/A9mCgLwy...


> impatient and dismissive RTFM response.

rsc wrote a lot of the Ms.

And the answer rsc gave was charmingly funny and helpful. Did you try following rsc's advice? I won't post a spoiler here; It's awesome and way better than "hey, we use ^ instead of ~ for that".

The problem so often is that people who can't keep up and don't understand how good the answers are, blame the experts for going too fast, and mistake "being too busy to handhold 1000s of people" for "being a jerk".

Would you go to Yankee Stadium and stop Derek Jeter on the way into work, just to ask him "Hey, does Major League Baseball use metal bats, or wooden bats?"


I felt that his response was a gentle nudge to say "we expect you, as a programmer, to either read the spec or just write a test program, to get your answer." When I started out with IRC and Usenet I had to be inducted into the culture of doing due diligence and asking questions correctly, and I am better for it. I do feel that a lot of people do not respect that culture because they feel that there should be as few obstacles to new participants as possible, including very mild hurt feelings.


We would have to agree to disagree here. Being passive aggressive towards newbies is not really a sign of a welcoming community. How dare they ask an obvious question... I know it's pretty standard in many online communities, but it's the opposite of what Russ says they are trying to accomplish in the Go community.

A really helpful answer in this case would include the story behind why the Go creators decided to use a different operator. Linking to the entire spec (not just the relevant section on arithmetic operators) is not friendly, patient or welcoming.

Rob Pike is pretty busy too, but he appears to be much friendlier in his responses (even to newbie questions).


"RTFM" is not the suggestion proffered there. The link to the Go spec was an aside.

I'll probe once more, since you totally ignored the question: did you run that test program through the compiler? The result is evidence of magnitudes more friendliness than anything that anyone could possibly write in a comment.


The test app will print this error: "the bitwise complement operator is ^" Calling having to build/run an app to see that simple and short answer is not "evidence of magnitudes more friendliness than anything that anyone could possibly write in a comment". It's really the opposite. If the answer is that simple why not just write it there and then add a clarification saying: "by the way, the compiler will also help you with this because we know how hard it is to get rid of the old C habits"

Imagine asking somebody if the sky is blue and then instead of getting a simple "Yes" answer you get a piece of source code you need to compile and run to see that "Yes".


Actually the answer was more patient, elaborate and educational than a short "use ^ instead of ~".

Give a man a fish and you feed him for a day; teach a man to fish and you feed him for a lifetime.


Hi. I'm sorry that seemed impatient, dismissive, and (as you say in one of the replies) passive aggressive. I certainly didn't intend it that way. As gohrt and carussell noted, the point was that if you write ~ in a Go program (perhaps because you don't realize Go is different from C here), the Go compiler goes out of its way to explain.

Compiling

    package main

    func main() {
        println(~5)
    }
produces

    main.go:4: the bitwise complement operator is ^
(http://play.golang.org/p/dFoaHVNOJw).

I am not sure why my 2010 email didn't include a direct link to the Go program on play.golang.org. I suspect that play.golang.org didn't yet support "sharing" at the time, but I don't remember.

I believe the point of the link to the spec was to make clear that the compiler implementation is not the only source for answers, that the operator is also documented.

Thanks for pointing this out. Both parts of the response were intended in the spirit of "let me show you how" and not "go figure it out yourself". I will try to make that clearer next time.


No need to be sorry :) Personally I'm fine with those types of responses because I'm more interested in the information and not its presentation. However, with that specific question a great answer would also include "why" (why Go uses a different operator there).

The intent ("let me show you how") is definitely good, but it was lost in delivery. It turned out to be like a joke without a setup. Without the missing context it just looks like a non-answer to a simple question.


There are piles of examples of Russ being curt, I'm quite surprised by the response my comment is receiving.

I guess I shouldn't have presumed about Russ' reputation - but he definitely has a very negative reputation with me.


This blows my mind. As a random Go user and internet reader, rsc is amazing, & I've never seen instances of him being what I would consider unfriendly.

(What is 'friendliness' and 'unfriendliness' varies lots though, culturally.)


Like I wrote to coldtea below, I try to be as friendly and helpful as possible to everyone who posts to the mailing lists about Go. Obviously that didn't come across in the examples you're referring to, and I apologize for that. If you're willing to point out specific examples, I'd like to understand what I'm doing so I can make adjustments. Mail to rsc@golang.org is probably best, since this is getting a bit off-topic, but a reply here is fine too. Thanks.


Reading golang-nuts, he always came off as curt and "wise-ass" (of course, given his knowledge and experience, perhaps often justyfingly so, but still).

And not in the over-the-top, theatrical way Linus does it which is mostly style, you feel there's real sneer.


Like throwaway999666, I don't believe that knowledge or experience is justification for being unkind. I try to be as kind and friendly and helpful as possible to everyone who asks for help with Go. Obviously that didn't come across in the emails you're referring to, and I apologize for that. If you're willing to point to specific examples, I'm interested to look at them so I can adjust what I write in the future. Mail to rsc@golang.org is probably best, since this is getting a bit off-topic, but a reply here is fine too.

The comparison with Linus is interesting to me, since I've always interpreted Linus's rants as real venom, not just theatrical style. But I don't know Linus, so maybe I'm misreading the rants.


> of course, given his knowledge and experience, perhaps often justyfingly so, but still.

Always with the half-excuses for people with technical ability/track record. "Well he comes off as kind of rude, buut he kind of knows what he's doing so the arrogance is maybe warranted". Just goes to show that technical ability and dealing with people even in a technical setting are two very different things. I guess that is the reward for a technical track record? Being half-excused for lording it over other people?

Disclaimer: I know nothing about Cox' online personality. I'm just addressing how people react to rude (or whatever the intent is) technical people.


>Always with the half-excuses for people with technical ability/track record. "Well he comes off as kind of rude, buut he kind of knows what he's doing so the arrogance is maybe warranted". Just goes to show that technical ability and dealing with people even in a technical setting are two very different things. I guess that is the reward for a technical track record? Being half-excused for lording it over other people?

Well, I guess that's life.

If you can do somebody else cannot do, and they need you to do it, you get to dictate the terms and be rude.

Ideally we'd all like rainbows and kindness, but you know...


No you moved the goalpost from half-justifying, to "tough shit, sometimes you just gotta deal with it". Which I agree with insofar that some things are just "the way they are", but it's a completely different argument.


Wait, what goalpost?

I wasn't making an argument initially, I was making an observation: "He's curt, maybe justifyingly so, but still...".

Then I further expanded upon that, based on the comment I got, that "that's how it is, if you're good at something you often get to dictate how you treat people who want it".

Wasn't meaning it to be an argument (to be met with counter arguments, to move goalposts, etc), just plain observation of how it is, as I see it, in both cases.


I am surprised to see Russ Cox called "veritably (at times) acidic".

Although I suppose it is possible it has changed, his behavior over the 1990s and 2000s on the mailing list for Plan 9 was consistently polite and kindly. He was much more ready than most to help with a bug fix or with information.

The reason I continued to read that mailing list for all those years is how much I was learning from his posts (and to a lesser extent those of a few other participants).

The same readiness to help and politeness was on display when as a complete stranger I wrote to him a few years ago.


Maybe Rob Pike can say something about this CoC thing. Don't really like the way Russ does things.


I'm sorry for that, but can you elaborate? If something I'm doing bothers people, I'd really like to know what it is so that I can try to address it. Thanks.


You did a great job improving the language.

For me, CoC is where programming meets politics. Whom gained benefit from their current position is likely to impose those rules to protect their now interest.

Pretty much there is a soul behind each language, Ricky Hicky for Clojure, Guido van Rossum for Python, Matz for Ruby, and Rob Pike for Go. Those people are not insecure, and I never felt them to be so aggressive.


FWIW, I'm sorry you see the code of conduct as an attempt to impose rules to protect "my" or "our" current position. It is very much an attempt to bring as many new people as possible into the Go community, not to exclude people.


Thanks for taking time to respond to my doubt. Would like to talk to you more.


Please feel free to mail me at rsc@swtch.com and we can continue the conversation in whatever medium works for you.


Rob Pike is a great example of how you don't have to be a jerk even when you are busy.




Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: