Ayo.js について

Ayo.js とは

「Node.js の fork です。」と言ってもまだできたばかりで正直このタイミングで記事にしてもまだ語ることはそんなに多くないです。

ただし、JavaScript界隈が騒ぎになりかけていることは確かです。日本でも発言が増えてきたので自分なりにまとめて今時点での話をしようと思います。

ちなみに読み方は好きに読んでくれ、と言われてます。 「アイ・オー」でもいいし、「エイ・ヨー」でも良いとのことです。ネーミング的には昔あった io.js fork騒動を想起させるネーミングになってます。もしも io.js についてご存じない方もいるのであれば、こちらをご参照ください。

yosuke-furukawa.hatenablog.com

Ayo.js の目的

https://github.com/ayojs/ayo/blob/zkat/values/VALUES.md

ここを見るとわかりやすいです。序文を見てみましょう。

Ayo.js is about the humans that help make it happen. It's a project aimed at creating a new foundation of project governance and management that brings humans and their concerns front and center.

You can pronounce it however you want: be it “ey-yo”, “I-oh”, or “Awooooo” — the Ayo.js project strives to create an environment where you can feel at home and focus on your contributions to this nice shared space that we all benefit from.

翻訳はこんな感じでしょうか。

Ayo.js は皆の成功を助けるものです。皆と皆の最も重要な関心事に対して、プロジェクトガバナンスとマネジメントをするための新しい foundation を構築することを目的としたプロジェクトです。

Ayo.js の発音は 好きな発音でいいです。 "えいよー"でも "アイ・オー"でも "アウーーーー"でもいいです。
Ayo.js プロジェクトはアットホームに感じることができて、全員がメリットを得られる共有スペースとするため、皆さんのコントリビューションに集中できる環境を構築することに取り組んでいきます。

Ayo.js の提供する価値の全文を読むとなんで Ayo.js を fork しようとしたのかの考え方が少しずつ分かってきます。曰く、

  • 人(Humans) は会議や書類以上に重要なものがある
  • 人(Humans) はAPIベンチマーク以上の重要なものがある
  • 人(Humans) は企業よりも重要なものがある

というコード以上に “人” に注目したポリシーを持ったプロジェクトとして価値を提供したいという旨の事が書いてあります。 Node.js と技術的な所でforkしたというよりもモチベーションやそこで活躍するメンバーに注目した fork になっています。

Ayo.js を fork した理由は何か

色々読むと分かってきますが、ひとえにまだ Node のコアグループ内部が一枚岩になりきれておらず、未成熟な所がある事が挙げられます。考え方が違う人もいれば言う必要がない言葉をうっかり言ってしまうような人もいます。

こういう事でぶつかり合ってしまうことを防ぐために Code of Conduct と呼ばれる行動規範が有ります。

行動規範とは “みんなが居心地よく活動するためのルール” です。言ってしまえば “法律” のようなものです。Node.js の場合はここに行動規範が書いてあります。

github.com

行動規範に則っていないメンバーがいた場合はこの Code of Conduct の Enforcement に従った措置が適用されます。

罵倒や嫌がらせ、またその他受け入れがたい事が発生した場合は report@nodejs.org に連絡することで報告することができます。全ての報告はレビューされ、調査された上でその状況に必要であり適切であるとされるレスポンスを得ることができます。このプロジェクトチームは報告者に対して機密を保護する義務があります。さらに特定の Enforcement ポリシーの詳細は別途報告されることもあります。

プロジェクトメンテナーが行動規範を遵守しておらず、また誠意を持って実施できていない場合はプロジェクトのリーダーシップを有する他のメンバーによって一時的あるいは永続的に追及されることになる可能性があります。

モデレータが Code of Conduct をどうやって施行するかやモデレーションポリシーやモデレーション要求に関してはこれらのリンクで確認することができます。

https://github.com/nodejs/TSC/blob/master/Moderation-Policy.md#moderation-policy
https://github.com/nodejs/TSC/blob/master/Moderation-Policy.md#requesting-moderation

Code of Conduct に沿っていないとなると、モデレーションポリシーに従って issue が立ち上がり、そこでメンバーがどういう行いをしているのか、githubであれば issue が watch される事になります。結果として Github の organization から ban されることもあれば、WGから除名されることもあります。

今回のAyo.jsの fork した流れの中で、「Code of Conductを功績を上げてきたコアメンバーが違反した場合にどうするべきか」という難しい議論が行われています。

アメンバーの一人である Rod Vagg は io.js と Node.js のフォーク/マージ騒動を起こし、最終的に全員をまとめて終止符を打ったメンバーの一人です。 ですが、Rod Vagg の Github 上の発言で特定の個人を攻撃するような発言があったり特定の企業を貶めるような発言があったことが Github 上で報告されています。Github以外でも「アンチ Code of Conduct 」のような発言をしたり、 Twitter 上で煽るような行動が見られていました。

これを受けて、 Code of Conductに従って審査され、その結果として Rod Vagg への除名要求をするかどうかがコアメンバー内のミーティングで議題に上がりました

github.com

しかし上記の issue の通り、 投票の末に反対票 (Rod Vagg の除名を要請しない票) が 60% あったため、結果除名要求されないことになっています。

これを受けて Code of Conduct の moderation policy にも update される流れが起こっています。

github.com

しかし、Code of Conduct が徹底されないとなるとそれはそれで問題です。先程言ったとおり、 Code of Conduct というのは “みんなが居心地よく活動するためのルール” です。たとえ過去の功績がどうであれ特定の企業や個人に対して offensive な態度をとって他者の居心地を悪くする行為は Code of Conduct 違反であり、違反したにも関わらず除名されない事に対して受け入れがたいと思っている人たちはいます。実際この流れで数名が TSC から外れています。

このように Code of Conduct 違反があったにも関わらず徹底できていないガバナンス体制を見限った人たちが発起人となって fork したのが Ayo.js です

Ayo.js では Code of Conduct の徹底だけではなく、ガバナンスモデルもBDFL任期制にするなどの体制変更まで含めて議論が始まっています。

github.com

序文に書きましたが、コードの内容よりも “人(Humans)” にフォーカスを当てているプロジェクトを目指しているため、ガバナンスモデルや CoC といった議論が最初に始まっています。

Rod Vagg 側からの意見

Rod Vagg もこの流れに対して意見を述べています。

medium.com

長文ですが、Rod Vagg としては問題が解決されたと勘違いしていたこと、自分としては人を傷つけるようなつもりで言ったわけではなく、たまたま自分の言葉選びが悪いせいで人を傷つけてしまったこと、またそれとは別に根拠のない話が多く不正に追求されていることを訴えています。

Rod Vaggとしてはこれを認めてしまうと Node.js の今後のプロジェクトにおいて無根拠な訴えでリーダーを解任できるという不都合な前例を作ってしまうため、なんとしても辞任要請を拒否するという姿勢を見せています。

Ayo.js は Node.js に再統合されることがあるのか

現時点ではわかりません。ただ、再統合というゴールもあり得るとは思います。実際それを示唆する話もありますが、今のところは再統合は検討していません。

Node.js 側も TSC でちゃんと価値を表明したり、また TSC (政治と基金面の管理) と CTC (技術開発) に分かれていた組織体制を元に戻して意見統一しやすくしたりといった改善は図られようとしています。

github.com

github.com

github.com

ただ「1つ2つの問題が解決できたら終わり」というような単純な問題ではなく、既に Node の根幹にあるオープンガバナンスモデルの是非にまで話が入り組んでしまっています。個人的には平和的な解決を望んでいますが、意見を無理に集約しなくても OSS には fork するという権利があると思っているので、わだかまりを抱えたまま merge するよりは fork されたままでも良いと思います。

まとめ

io.js の時はES2015を書けるようにするであったり、 LTS であったりと技術的な話を争点として始まった fork でした。しかし、Ayo.jsは政治的な話を争点として始まった fork になっています。ソースコード的な部分では Node.js も Ayo.js も変わりません(現時点では変更点は実行ファイルが node だけじゃなく ayo にも symlink が貼ってあるという点だけです)。

Code of Conduct というのはルールであり、「法律」だと話しました。逆説的ですが法律は違反する人が居なければ必要ありません。法律無しでもフレンドリーで楽しくやれるのであればこういった話はおそらく起こっていません。しかし、 Node.js に限らず OSS という社会は多様性を求めて色々な人から意見を吸収しようとします。色んな文化圏の人が共通のプロジェクトに取り組む際に普通にやっているつもりでもお互いの想像力が少し不足していると、ぶつかってしまうことがあります。

OSS が多様性を要求する以上、想像力を働かせてなるべく offensive な発言を避けたり、うっかり発してしまった場合であってもすぐ訂正して全体が居心地よくするように活動を心がけていく必要があります。

OSS というのはマンパワーやコードだけが重要なのではなく、何かを解決したいというモチベーションが一番大切だと思っています。モチベーションを Node に対する不信感から維持できないと思ってしまう人たちがいるのはしょうがない上に、そういう時であっても OSS には fork するという権利があります。

Ayo.js と Node.js が今後どうなるのかに関しては iojs-jp.slack.com の #ayo でリアルタイムに今 ayo.js で何が起きてるのかを@about_hiroppy が実況してくれています。

iojs-jp slack に入りたい場合は以下の リンクからジョインしてください。

Join node/iojs-jp on Slack!

また Node 学園 27時限目でも同様の話をする予定です。直接質問や話がある場合は是非参加をお願いします。

nodejs.connpass.com