ayojs/ayo

Request for disclosure of details behind decision to fork

lekoder opened this issue Β· 34 comments

I understand that your decision to fork node was caused by claim of numerous violations of Code of Conduct of node.js by @rvagg, and TSC's vote on the issue - this is public knowledge at this point.

While breach of CoC is a legitimate concern, there seems to be no details available to the public about exact nature of these violations. Secrecy of this process makes it impossible for me, and probably many other contributors and users of node.js, to judge decision about validity of your action, and therefore making informed choice of supporting either ayo.js, node.js or both.

In spirit of maintaining transparency of this issue I would like to request, assuming that Rod, as immediately interested party will grant permission to do so, disclosure exact nature of claims of violations of CoC, which led to this crisis.

Agreed. I spent a couple of hours reading about this situation recently and I still have no idea what actually happened, why a fork was deemed necessary, or if I can expect this to be reabsorbed into node.js like io.js was.

I'm reluctant to begin supporting ayo.js and my sincere hope is that node.js stops diverging into multiple projects over internal politics that we don't even have any understanding of or visibility into.

Qard commented

The fork is not due to the report of CoC violations from Rod Vagg specifically, it happened due to a continuing pattern of non-inclusive and non-collaborative behaviour from many people in Node.js leadership. The fork happened because there are many people that care deeply about the success of Node.js as a product but feel unwelcome contributing to the Node.js community directly.

Much of the problems with Node.js are due to structural bias that favours the status quo rather than striving for actual diversity and inclusivity. With ayo, we intend to put a much greater focus on that. You can think of the difference here as encouraging inclusivity over simply tolerating it. We seek to bring new people with new ideas to the community.

@Qard this may be due to cultural or linguistic barriers on my part, but I have not experienced nor seen non-inclusive/non-collaborative behavior in upstream node project. In fact "inclusive" hardly maps to "software project" in my mindset - but as I mentioned, this may be cultural/linguistic bias on my part; the only thing I can think of is "collaboration being rejected based on prejudice" - and these I did not see.

Could you elaborate? Perhaps point out example incidents you would like to avoid with ayo?

In fact "inclusive" hardly maps to "software project" in my mindset

I think that in general the project has done a very good job in keeping its contributors outside of that and provided a safe environment for them. I do think there were several cases of non-inclusive behavior and while I'm not familiar with any that force a fork - I think forks are a good thing (tm) and more diversity in the ecosystem is good.

That said - I definitely think the following holds:

  • Node.js is a big project that needs a lot of collaborators to evolve effectively.
  • A lot of the Node.js collaborators are not from a "traditional" contributors background.
  • A lot of those "non traditional" collaborators are doing amazing technical work.
  • The project is benefiting from diversity in a directly technical way.

I think the people who forked Ayo are trying to put a emphasis on the "human" side of being an open source collaborator. Often times people open issues that take a long time and a lot of debate to land and I think that the belief is that focusing on a supportive environment is a driving factor for Ayo too.

Quoting the VALUES document:

Technical discussions are difficult, especially in large communities with members with all sorts of perspectives. Contributors are bound to find themselves in situations with no clear consensus, with new concerns being brought up on a regular basis, and things that might seem insignificant in other contexts suddenly exploding.

I can share from personal experience that this has been the case many times over the years.

The Ayo.js project’s perspective is that when such things happen, it often takes a toll on the well-being of the members participating, at times preventing repeated contributions or precluding new contributors outright. It also recognizes that the difference between individual choices is less important than the ability to come to an appropriate technical decision.

I can also share from personal experience that this is very frustrating and several "high profile" people in web development have also shared this experience with me.


Ayo doesn't seem to be picking on or excluding any existing contributors. This is not about one person. I'm not picking sides and I'm not even sure if there is a 'better' side - we'll just have to see how this model works compared to Node.js's - definitely a positive thing for the web.

In spirit of maintaining transparency of this issue I would like to request, assuming that Rod, as immediately interested party will grant permission to do so, disclosure exact nature of claims of violations of CoC, which led to this crisis.

Rod is not involved in Ayo. If you're looking for what is happening with Rod and Node Core, I suggest you ask over in the Node repository. If you want to know what Ayo stands for, check out our values document.

As a core member of the team: I believe that Node is lacking in what it does to support its community, its governance model is currently a mess and I don't feel that it is easy for the majority of people to contribute. This did not start and does not end with whatever has been occurring in Node over these past two weeks. These have been my feelings for over two years now. I have experienced this first hand as a former part of note, as I sat within the now defunct Inclusivity Working Group. It's time to try something new.

<3

it happened due to a continuing pattern of non-inclusive and non-collaborative behaviour from many people in Node.js leadership.

My feelings as exactly as of @lekoder, it'll be good to see some hard evidence, as otherwise this fork just doesn't look honest.

All we see is statements as above, but no leads that prove that mentioned behavior actually happened. I personally never approached or experienced such patterns myself when working with Node.js in recent months.

Much of the problems with Node.js are due to structural bias that favours the status quo rather than striving for actual diversity and inclusivity. With ayo, we intend to put a much greater focus on that. You can think of the difference here as encouraging inclusivity over simply tolerating it. We seek to bring new people with new ideas to the community.

To me it sounds as if main drive behind this fork was not really a disrespectful events (which are put in front as main reasoning), but rather a different idea about the direction in which Node.js should go. Idea which seemed to be rejected by majority of Node.js leadership (action which was seen as disrespectful by some)

zkat commented

Hi. I pushed the button on the fork and I wrote one of the drafts of VALUES.md.

This fork is not about Rod. This fork is not about excluding or kicking anyone out or punishing people for CoC violations.

This fork is about an ongoing frustration with Node Core (and, tbh, Foundation) leadership where it has been very difficult for collaborators to represent their interests -- with most of the project's actual power concentrated on a few individuals with priorities that are different from many of their contributors. This is about establishing a governance system that spreads out power more, and that is better able to represent the interests of the people who are actually there, contributing, and working with the project.

This fork happened because the Documentation WG fell apart after trying really hard to charter.

This fork happened because the Inclusivity WG fell apart after trying really hard to charter.

This fork happened because Node leadership was essentially unwilling to so much as ask one of its members to step down after repeatedly antagonizing and sometimes harassing members of their own community.

This fork happened because URMs/women/etc have been leaving Node or significantly reducing their involvement due to the organization's refusal to take their needs seriously.

This fork happened because the TSC still exists/existed even though it was essentially vestigial and largely ineffective -- a relic of a time when the Node Foundation was still picturing itself as the toplevel of an umbrella. But now they're under the Linux Foundation so that was no longer necessary or appropriate.

This fork happened because there are a couple of individuals who have disproportionate amount of representation in Node leadership: participating in the CTC, the TSC, and the Board, all at the same time.

This fork happened because every time the word Promise is so much as mentioned in the Node issue tracker, there's something resembling a small civil war, and Node's technical leadership has been unable to direct those discussions in such a way that they can happen positively and peacefully. Instead, any time a contentious technical issue comes up, it gets dragged on until people literally end up leaving the project because they can't even anymore.

This fork happened because Michael Jackson Script is still a thing, except it's not, because it's still not there.

This fork happened because the only way Node's leadership ever seems to get off their asses and actually do something is when you set a fire so big they can't just ignore it -- because their default attitude is to ignore anything the few folks at the top vaguely dislike and hope that it goes away.

This fork happened because Node Core has a very narrow perspective on what's important to the project, and an even narrower perspective on what "technical" means, and has repeatedly shown to be utterly incapable of serving the needs of anything but commits to .js and .cpp files.

This fork happened because a nonzero number of Node Core folks believe "diversity" means "just add more languages" -- so they believe it is not worth putting the time into serving the needs of folks in countries where they are marginalized. Instead, the only "diversity" efforts that they ever seem to actually act upon are just timezone and language accessibility serving people from prestigious/dominant social groups in other countries. These are worthwhile efforts, but Inclusion must begin at home.

This fork happened because node-eps is an insult to the Node community and an example of the level of internal politicking that the rest of the community is not privy to, or allowed to be privy to. Because a repository intentionally designed to be a dumping ground for "ideas we don't want to deal with by annoying people we don't wanna talk to" speaks volumes about the project's structure.

This fork happened because for all their talk about separation of money and technical concerns -- the whole reason for the Core/Foundation split -- Core ends up consistently favoring concerns related to sponsors and Enterprise interests above those of its contributor community.

So no, I don't actually give a flying fuck about Rod Vagg himself. Behold my field upon I which I grow my fucks, and you shall see that it is, indeed, barren. The reason that was the straw that broke the camel's back was because several people spent months building a case and negotiating and trying to find away to remove a figure from a single governance committee (let's be clear: no one ever proposed or even considered trying to remove Rod from the project), and that all of that work was ultimately ineffective -- and the governance reasons why it was ineffective, demonstrated the futility of trying to influence Node Core as a collaborator, and the ass-backwards priorities the project has when it comes to the health of its own community.

This fork happened because every time the word Promise is so much as mentioned in the Node issue tracker, there's something resembling a small civil war, and Node's technical leadership has been unable to direct those discussions in such a way that they can happen positively and peacefully. Instead, any time a contentious technical issue comes up, it gets dragged on until people literally end up leaving the project because they can't even anymore.

❀️

zkat commented

Just to drive the point home: I am not interested in building a case against Rod Vagg. If you're looking for a blow-by-blow of violations, you won't find them here, or from me, at least. I'm here to try and model a healthy governance structure that I would hope the Node.js project can learn from and incorporate for themselves. I say this as someone who put in the work for quite a while to change things from the inside. I say this as someone who, while no longer directly involved with the project, has still had conversations in person with various members of the community, and tried to provide actual advise and expertise towards its betterment. I also say this as someone who is still an active contributor to a chunk of the Node.js codebase that I happen to be a maintainer for.

@medikoo I know this isn't your intent, but please consider that your response could be read as very dismissive: "I personally haven't experienced problematic behavior, so I don't think it exists." Please trust people, especially underrepresented folks with experience navigating cishet white male-dominated spaces, when they speak up about this in the community. It's not fair to foist the burden of documenting every interaction on them, particularly when there's already a pattern of engaging in or tolerating bad behavior.

bmeck commented

This fork happened because Michael Jackson Script is still a thing, except it's not, because it's still not there.

@zkat can you clarify this. I'm not entirely sure what is meant.

Please trust people

@kitcambridge In case of quite serious accusations, which in turn are destructive to the project (and some people, affecting their future career and life), it's way better if they come with some backing.

I don't think following blind trust, is a good approach, and fair to all sides of the conflict.

@medikoo The question was asked and authoritatively answered; the answer does not hinge on the specifics that you're asking about. Ayo.js isn't a personal complaint about Rod Vagg, or any individual. It's a response to structural governance problems that have gone unaddressed for too long. If you want to get details about CoC complaints, take that up with the Node.js project, but I'm guessing they'd be unlikely to make anything like that public, for obvious reasons.

Qard commented

We are not suggesting blind trust. We are suggesting that it's generally best to trust the source of the first complaint over whomever gets defensive about it. Nobody complains without a reason.

Certainly you should think critically and asses the situation for yourself though. Immediately dismissing a complaint as invalid helps no one and only serves to perpetuate the status quo.

Thanks @isaacs. Questions centered around personal complaints, because many sources provided it as main reasons for this fork (or at least left such impression)

Still it’s more clear now that this was at most a final igniter, and not whole and only reason for this initiative.

@zkat can you clarify this. I'm not entirely sure what is meant.

.mjs for modules.

zkat commented

I answered @bmeck's question in Discord when it got asked there. For the sake of answering it again over here for y'all's records:

What I am referring to when it comes to .mjs is the long, drawn-out, painful process that it has been to reach even the conclusion we have so far. The various controversies around it and, frankly, the responses by some folks that have centered around wanting to completely shut down the conversation around ESM, instead of working enthusiastically towards a solution that works for everyone.

And, to be clear, I blame this on governance and the structure of technical decision-making, not on particular individuals. I, for one, am incredibly appreciative of the effort @bmeck has put in during this loooooong process to find solutions any time someone threw a grenade at it.

We are suggesting that it's generally best to trust the source of the first complaint over whomever gets defensive about it.

I respectfully disagree. There are many cases of false accusations to drive agenda, both in OSS world and outside. Please note that I am not claiming this particular case to be such.


@zkat, accept my thanks for comprehensive response. Unfortunately, it did not address all of my concerns - you are making a very serious case here and I am not able to verify most of your claims. And having verifiable accusations is really important for someone who still remembers times when false accusation could get one killed. A cultural artifact of central-eastern Europe. Please do not mistake my inquiries for hostility.

fwiw, the conclusion we have so far (a file extension, which happens to be "mjs") is actually the best technical solution to meet the existing constraints for a vast number of reasons; I'm very confused to see that in the list of reasons for the fork. It's definitely off topic for this thread, but to clarify: @zkat, are you objecting to the decision itself, or to the process by which the decision was arrived at?

zkat commented

@lekoder if you want details on the specific complaints that were brought against Rod when the vote was made, those are publicly available. I'm sure you can google your way to them. They are not relevant to this repository. Additionally, as I said: no, I'm not going to give you a list of complaints about Rod because that's not what this fork is about. Please stop trying to bring that to the forefront when it's not the issue at hand.

Just about everything I said is verifiable using public information: please use your google powers or perhaps someone else can give you more detailed information. Here's a couple of hints for some of these, though, so you can do your own homework:

  • node-eps nodejs/NG being a honeypot has only been explicitly called that to me in private, but that's pretty obvious from the outside if you note that not a single proposal from someone who isn't already a CTC member has been accepted. Seriously, just look at the PRs.
  • For the Promise stuff, nodejs/node#5020 is a good start but we're talking about a long, painful process, all done through various public issues and PRs. I don't have a link that summarizes it for you.
  • TSC, CTC, and Board membership is all public. Please compare and contrast.
  • I don't have a link handy that summarizes the collapse of the Documentation or Inclusivity WG. The latter, I was a participant in, and I can only point you to https://github.com/nodejs/inclusivity. I don't think an executive summary exists, but it sure would be nice if someone wrote them up for the same of the community. I'm not willing to do that work, since I already lived through it.
  • For the issue of Not Fucking Moving, I submit that nodejs/TSC#327 is a blatant example of Core not taking action on anything until it's set on fire. There had already been conversations about including social media but uh... it was explicitly taken out before.

Anyway, that's some of that. I don't know what else you want documented. I think it's interesting to see how hard this stuff is to document concretely, since it's been happening in various channels and boiling over at different points over the course of years.

[Edit by @zkat: it was pointed out to me that node-eps isn't the honeypot. It's NG]

zkat commented

@ljharb #36 (comment) I believe I answered that question here.

To answer it more clearly: No, I don't object to the particular decision to the point of thinking it's "unacceptable". I, personally, as an individual, feel sadface about the need for .mjs but I trust that those who have been in the trenches dealing with this (such as @bmeck) have made a valid choice that takes into account more constraints than I can keep track of, as someone who's been following from afar. So just let it be. We'll make it work.

I submit that nodejs/TSC#327 is a blatant example of Core not taking action on anything until it's set on fire.

For better or for worse, thank you Ayo.js for the much needed (and deserved) pressure on Node.js.

zkat commented

@lekoder sorry, I think I framed that wrong: the specific complaints about Rod are not relevant to this project, and if you have issues with perceived secrecy, you should bring those up with the Node.js project itself, since that's their specific problem.

As far as how Ayo.js would deal with such CoC concerns, if I had my way as far as enforcement processes go, it would never have gotten to that point. I don't believe in punitive CoCs: they need to be guidelines, and they need to be empowering documents that encourage the community to work together. Beyond that, I believe holding a vote at the level where it happened is a terrible, horrible way of addressing CoC issues: there should be, at least, a dedicated committee of folks with experience enforcing these documents in healthy and successful ways. Not a bunch of folks for whom this is not a primary or sometimes even relevant concern. This again goes back to the concentration of power on the TSC, which expects a small number of people to be authoritative experts in a bunch of project concerns, not just what happens to the javascript files.

I can go on for a while about CoC enforcement, and perhaps the right place to have a longer conversation around this is when Ayo.js starts to discuss its own CoC and enforcement policy changes -- something that I very much hope we will do. If you think the changes proposed are not transparent enough, then that would be the right place for you to bring them up.

As far as your original question goes, though, I don't know what else there is to answer. Feel free to close this if you believe that's the case, and I apologize if I missed the point of your original question in answering. I don't mind trying again while we figure out what it is you need here.

Nothing much to add other than thank you - a lot of these issues have been frustrating to watch (especially the trainwreck that is mjs) and this articulates them extremely well.

The Rod stuff is just a perfect microcosm of it (and an excellent example of how these sort of things can promote a toxic community if you look at the response to this fork).

Bravo.

@zkat, you made a couple of detailed responses. Let me return the favor.

I'm sure you can google your way to them.

Well, we did. We have couple of mission-critical systems running on node, so well-being of the project is on our watchlist. We spent few hours looking up what exactly was going on. Did you try that? Because googling this situation reveals that:

  • Rod has apologized for someone not disclosed, failed to edit his (also not disclosed) post when asked, and re-twitted some article you didn't like.
  • There was a movement to remove him from TSC, and TSC voted against.
  • 4 people were upset to the point to quit TSC and make a fork.

That is extend of what google reveals on the situation. And it does not look favorable to ayo. Honestly, majority of my team assumes this is some kind of publicity stunt to try to strong-arm node project. I was willing to give you the benefit of a doubt and investigate on what exactly happened. And since I did contribute something to node, I was natural person on our team to make inquiries.

You are saying, basically, that that whole vote thing was a last straw. At least it is what I got from your replies. But public perception is way different - current headline is "Node.js has been forked over Terms of Conduct violations", and that is what most people I talk to people assume.

You are deferring me to node with this inquiry - but was not ayo founded by members of TSC that felt that mentioned actions were actually violations? Since rest of TSC either abstained or voted against, it's safe to assume that they either did not feel that these events were in fact violations of CoC, or were not serious enough to warrant actions. I assumed you would have most relevant viewpoint on this.

That is the reason why I asked ayo to disclose this info. To get your side on the story, and facts that support it. Surely, all of these github discussions are in public already, and you probably know which they are - however specific cases are not easy to find among the noise. At least I could not with reasonable effort, and I have stumbled upon many people with same problem - prevalent opinion is on spectrum from "no clue what actually happened" to "couple of folk got mad over a private tweet and rage-quit". And please note that I am putting effort to rephrase these in more civilized way.

Either way that does not look good for ayo. And since you are explicitly stating that your goal is to be as open and inclusive as possible, I fail to see how this secrecy stance benefits your project. People assume that you do not have reason, but merely an excuse - and honestly, having access to information I have I can't blame them.

I will understand if you will choose to keep this information to yourself, and I will definitely look up links you have provided for additional context (which will take a while), but you should be aware how this looks for someone not involved in internal node politics. Hence my original request for this particular disclosure.

PS. You should probably re-phrase some of wording in VALUES.md; right now it comes across as "we don't care if our runtime is broken as long as our developers are happy", which I am sure is not something you had in mind.

@zkat

"So no, I don't actually give a flying fuck about Rod Vagg himself. Behold my field upon I which I grow my fucks, and you shall see that it is, indeed, barren."

From the Code of Conduct associated with this project (which itself still links to the Node.js Code of Conduct):

Examples of behavior that contributes to creating a positive environment include:

  • Using welcoming and inclusive language

(...)

Examples of unacceptable behavior by participants include:

  • Other conduct which could reasonably be considered inappropriate in a professional setting

Dropping f-bombs is considered inappropriate in a professional setting. Your feelings are valid, but use of vulgar language is clearly not part of the values outlined in this project.

I go on vacation in a few hours until 9/13, so I will be unavailable for follow-up. If there is a moderation team associated with this project I would suggest that they get involved.

zkat commented

@indexzero have a nice vacation πŸ™‹

zkat commented

@lekoder I think this is the third time I said this and, frankly, I have no idea how to make this clearer for you: The fork is not about Rod Vagg, therefore I will not enter a discussion that involves litigating the issue of Rod Vagg. Please stop this, because the answer to your question is that you're not getting an answer to it from this project.

It is my stance that the Internet At Largeβ„’ has decided to Become Angryβ„’ at a hot-button issue because it was what they thought, and what various folks decided to make it about. But, alas, I have relatively little control over the propaganda spread across many channels. Any time that I've been asked by the media what the fork was about, I've given a consistent answer: long-running conflicts surrounding governance, not the specific issue of one person and one vote. I've done my best to spell out, for you, where that vote fits into that governance conflict, and again, I don't know how to make this clearer.

Yes, our goal is to be open and inclusive. That does include, well, not going through effort to trash someone. I believe it is in this project's best interest to take any feelings that its members have about specific individuals and direct them instead at answering the question, "How can we do better?"

This is our side of the story. I've done my best to outline it for you. I don't know what else I can tell you here, but that I think you're seeking the wrong answers in the wrong place from the wrong people. I hope you find a way to answer your remaining questions in some other way.

P.S.: I would ask you to consider that values are statements about priorities, not general goals. What this means is that "... more important than ..." here refers to what the project is committed to choose when it realizes it must fail to provide one or the other answer. So, if you invert your example here, "Would you say that we don't care about our members and contributors being healthy and happy, as long as the runtime is working well", my answer would be: No, that is an unacceptable value statement, and yes, if it truly comes down to it, I'd rather have a broken project than broken people. There are previous project versions which already work, and I believe they are acceptable fallback. I also don't believe the project will be faced with such a dire choice as whether to have a completely broken and unworking project. Most likely, this value statement will manifest in opting for "good enough" choices in technical discussions, or deciding to pass on particularly disruptive and contentious optimizations that involve a lot of hardship for users and maintainers in exchange for relatively small speed boosts. People matter much more than software. And I also believe that happy people with many different perspectives make better software, as a rule of thumb.

The fork is not about Rod Vagg

@zkat, let's make it clear from my side. Google research you were so kind to point me to yields:

Node.js forks again – this time it's a war of words over anti-sex-pest codes of conduct
Ayo emerges from split as board demands action

Node.js forks again, this time over a political dispute
A dispute involving a technical committee member leads to the Ayo,js fork, whose directions and goals remain vague

Node.js has forked into Ayo
Ayo (pronounced β€œeye-oh” or IO) is a fork of the popular Node.js JavaScript runtime. It was created because of a Code of Conduct issue in the Node.js project.

Are you saying that these are articles contain lies? Because they seem to directly contradict "not about Rod" statement. If so, I would gladly accept this as an answer.

@lekoder Let me rephrase what I said in Discord, and what I think @zkat has been saying a few times now: While Rod’s actions might have been the cause that sparked the events and conversations that led to this fork happening, the reasons and motivations are more numerous than that and not directly tied to Rod or what he did.

While Rod’s actions might have been the cause that sparked the events and conversations that led to this fork happening, the reasons and motivations are more numerous than that and not directly tied to Rod or what he did.

@addaleax Articles I have linked seem to imply something else, but I'm glad you clarified that. At this point I consider issue closed.

zkat commented

@lekoder all of those articles were done without official statements from project members. They are purely speculating about reasons for the fork, and trying to put 2+2 together from the immediately-apparent cause.

http://www.zdnet.com/article/after-governance-breakdown-node-js-leaders-fight-for-its-survival/ is, to date, the only article I know of where people involved directly with Ayo were consulted about the reasons behind the fork.

Dropping f-bombs is considered inappropriate in a professional setting.

You work in a very conservative professional setting. Work for less uptight and dull companies.

@abritinthebay thats not exactly helpful generally, and even more so here.

Gonna lock this as I believe all the good that can come of it has been distributed to the world.