OSS について何か不満を言うと,かなりの確率で返ってくる言葉がある.
OSS なんだから,自分で直せば良い.
方針が気に入らないなら,参加して変えれば良い.
文句を言う前に Pull Request を出せ.
筋の通った言葉に見える.実際,筋が通っている場面も多い.ソースは公開されているし,issue も Pull Request も受け付けている.不満を変更へ変換する道が,本当に用意されていることもある.
ただ,この言葉は少し便利すぎる.
扉が開いていることを知らせる招待状にもなるし,扉の外へ人を追い出すための札にもなる.同じ文面で,歓迎と黙れを兼用できてしまう.
私は,その兼用があまり好きではない.
参加できるなら,した方が良い
最初に立場を明らかにしておくと,私は OSS をやっている.コードを書き,issue を読み,レビューをし,ときには自分で問題を作り,自分でその問題に追われている.
だから,参加することで見えるものが増えることは知っている.外からは単純に見えた問題が,互換性,性能,保守性,既存利用者への影響と絡み合っていることもある.一行を直せば済むと思っていたら,その一行だけが絶妙な均衡の上に立っていた,ということもある.
できるなら,やった方が良い.
Pull Request を出せるなら出した方が良いし,再現コードを書けるなら書いた方が良い.設計に異論があるなら,代案まで持っていけると議論はかなり進む.これは本当にそう思う.
しかし,やった方が良いこと と,やらなければ話してはいけないこと は違う.
勧めることと,資格にすることは違う.
OSS への参加は,批判をより具体的にする方法ではある.だが,批判するための入場料ではない.
政治が気に入らないなら,出馬すれば良いのか
「気に入らないなら自分で参加して変えろ」という論理を少しだけ外へ持ち出すと,形の奇妙さが見えやすい.
政治が気に入らないなら,自ら出馬すれば良い.映画がつまらないなら,自分で撮れば良い.料理がまずいなら,厨房に入れば良い.電車が遅いなら,鉄道会社に就職すれば良い.
もちろん,政治と OSS の重さが同じだと言いたいわけではない.比較しているのは対象ではなく,論理の形である.
あるものから影響を受けることと,それを作る側へ回れることは同じではない.批判するために職業を変え,余暇を差し出し,専門知識を身につけ,内部の作法を学ばなければならないなら,ほとんどの批判は生まれる前に死ぬ.
OSS への参加は,選挙への出馬ほど大げさではないかもしれない.一文字の修正で参加できることもある.しかし,その一文字へ辿り着くまでに,build の方法,test の書き方,議論の履歴,英語,暗黙の設計方針,コミュニティの人間関係まで読まなければならないこともある.
リポジトリの文法だけでなく,部族の文法まで読む必要がある.
参加可能であることと,参加の費用が安いことは違う.
これは,かなりポジショントークでもある
「OSS なのだから参加すれば良い」という主張には,すでに OSS をやっている人のポジショントークが大いに含まれている.
これは,その人たちが嘘をついているという意味ではない.ポジショントークとは,悪意の別名ではない.自分の座っている椅子の形が,見える世界の形にも影響する,というだけの話である.
OSS に参加できた人は,参加によって問題が解けた経験を持っている.コードを書ける.開発環境を作れる.議論へ入る言葉を持っている.コミュニティの中に知り合いがいることもある.その人にとって「参加すれば良い」は,実感を伴った正しい助言である.
ただし,成功した参加者から見える世界には,参加しなかった人が映りにくい.環境構築で諦めた人,議論の強さに疲れた人,時間を作れなかった人,コードにはできない違和感だけを持って帰った人は,Git の履歴に残らない.
commit には hash が付く.諦めには付かない.
そのため,私たちは記録に残る貢献を過大評価し,記録に残らない離脱や不満を過小評価しやすい.これは人格の問題というより,観測装置の偏りである.
そして,作り手の世界では,手を動かしたことが通貨になる.それ自体は自然である.何かを決めるとき,継続して責任を引き受けている人の言葉が重くなるのも当然だと思う.
しかし,その通貨を人間の価値にまで両替し始めると危ない.
作った人が偉く,直した人が次に偉く,使うだけの人は下で,文句を言うだけの人は無価値である.そんな身分表を,私たちはときどき無意識に作っている.
さらに悪いとき,参加実績は議論の材料ではなく,見下すための身分証になる.
俺はちゃんとやっている.お前はそうじゃない.
実際にこのまま言う人は少ない.しかし,「文句があるなら参加すれば良い」という言葉の底に,この薄い侮蔑が沈んでいることはある.自分は時間を使い,コードを書き,責任を引き受けた側である.それに対して,お前は外から口だけを出している側である.その差を,役割の違いではなく,人間の誠実さの差として数え始める.
すると,参加は問題を解くための提案ではなく,自分を一段高く置くための踏み台になる.「参加すれば良い」と言いながら,本当に招いているわけではない.すでに参加している自分の正しさを確認し,参加していない相手へ小さく減点を付けているだけである.
もちろん,手を動かした事実には重みがある.しかし,その重みは批判の内容を検討するときに使うものであって,批判する人の人格を量る分銅ではない.貢献の履歴は功績である.発言権の免許証ではない.
共通の敵は,安い接着剤である
この見下しは,一人の中だけで完結しない.
やっている人は,やっている人同士で見つかる.互いの苦労を知り,成果を認め,愚痴に頷く.それ自体は良いことである.OSS は一人では続かないし,同じ責任を引き受けている人にしか分からない疲れもある.連帯が人を救うことは,確かにある.
しかし,その連帯が共通の目的ではなく,共通の敵によって作られることがある.
私たちは,ちゃんと手を動かしている.
あいつらは,何もせずに文句だけを言っている.
この二行が揃うと,布陣ができる.作者,メンテナ,コントリビュータが「やっている側」として並び,批判する利用者を「口だけの側」として向こうに置く.個々の批判が正しいかどうかを見る前に,誰がこちら側で,誰があちら側かを確認するようになる.
共通の敵は,安い接着剤である.すぐに乾き,かなり強く付く.複雑な目的をすり合わせなくても,同じ相手を嫌えば一体感を得られる.自分たちの苦労も正義も,敵との対比によって鮮明に見える.
実際,メンテナを消耗させる無理な要求や,執拗な催促,誹謗中傷は存在する.そういう攻撃から互いを守るために布陣することは必要である.連帯せず,一人ずつ耐えろとは思わない.
問題は,敵の範囲が少しずつ広がることである.無理な要求をする人と,厳しい批判をする人が同じ箱に入る.厳しい批判をする人と,単に使いづらいと言った人が同じ箱に入る.最後には,参加せずに意見を言う人そのものが敵になる.
そうなると,批判の内容より陣形の維持が優先される.内側から異論を言う人は味方を乱す者に見え,外側の言葉を理解しようとする人は敵に譲歩する者に見える.団結を保つために,敵には敵のままでいてもらう必要が出てくる.
これは健全ではない.少なくとも,長く続けたい共同体の形ではない.
作るものを中心に集まる共同体は,目的について議論できる.敵を中心に集まる共同体は,敵について話し続けるしかない.前者は成果物が育つことで結束できるが,後者は敵意を育てなければ結束を保てない.
守るための連帯は要る.しかし,見下すための布陣はいらない.誰かを向こう側に置かなくても続く関係の方が,たぶん強い.敵が消えると困る団結を,健全なコミュニティとは呼びたくない.
もちろん,実際に活動している人にはリスペクトを持った方が良い.時間を使い,責任を負い,誰かが使うものを作り続けていることは,正当に評価されるべきである.
ただし,その敬意は,活動していない人を卑下することで証明するものではない.作り手を持ち上げるために,利用者や観客の床を下げる必要はない.敬意はゼロサムではない.
ある人の活動を称えることと,別の人から発言する資格を奪うことは,まったく別の行為である.前者の顔をして後者を始めた瞬間,リスペクトは序列化の道具へ変わる.
観客は,未完成の選手ではない
スポーツに選手が必要なのは当然である.しかし,観客を「まだグラウンドへ降りていない怠惰な選手」とは呼ばない.
観客は観客である.
OSS にも,作者がいて,メンテナがいて,コントリビュータがいる.同時に,利用者がいて,眺める人がいて,評価する人がいて,採用しないと決める人がいる.その全員が同じ役割を担う必要はない.
利用者は,コードを書かないかもしれない.それでも,利用し,広め,依存し,期待し,失望し,離れていく.その動きが,OSS の評判を作り,ecosystem を作り,ときには企業の採用やスポンサーを呼び,あるいは静かに衰退を知らせる.
誰にも使われない OSS に価値がない,とまでは言わない.作者一人のための道具にも,作る喜びにも,十分な価値がある.ただ,コミュニティや ecosystem や社会的影響について語るなら,利用者を背景の点景として扱うことはできない.
舞台は演者だけでも存在できる.しかし,文化は演者だけでは回らない.
観客がいるから,舞台は世界になる.
ネガティブフィードバックへのアレルギー
とくに,ネガティブフィードバックは過剰に叩かれやすい.
「便利だった」「素晴らしい」「いつも使っています」という声に対して,誰も「そう言うならコードを書け」とは返さない.その人が内部構造を理解しているか,継続的に貢献しているか,発言する資格があるかを確認することもない.
しかし,「使いづらい」「この変更は良くない」「この方針には納得できない」と言った途端,発言者の資格審査が始まる.
無料で使っているのに文句を言うな.
そんなに不満なら自分で作れ.
何も貢献していない人が偉そうに言うな.
これらは,たいてい本来の文句の筋に答えていない.本当に使いづらいのか.変更によって誰が困るのか.方針にどのような欠陥があるのか.そういう対象の話をせず,「文句を言った」という行為そのものを批判している.
批判への反論ではなく,批判するなという命令である.
もちろん,言い方が悪いことはある.事実を誤認していることもあるし,礼を欠いた言葉まで受け入れる必要はない.しかし,発言の態度に問題があることと,発言の内容に一理あることは両立する.封筒が汚れているからといって,中の手紙が白紙になるわけではない.
ネガティブフィードバックが強く拒絶されるのは,作ったものへの批判が,作った自分への否定に聞こえやすいからでもある.時間を使い,責任を持ち,仲間と育ててきたものほど,成果物と自分の境界は薄くなる.そこへ外から石が飛んでくると,内容を読む前に盾を構えたくなる.
その気持ちは分かる.だが,参加者同士で盾を並べ,外から来る否定的な声をすべて敵の攻撃として処理すれば,できあがるのは安全な共同体ではなく,エコーチェンバーである.
内側の人は,事情をよく知っている.設計上の制約も,過去の議論も,維持する苦労も知っている.一方で,自分たちの選択を正当化したい理由も,仲間を守りたい感情も持っている.事情を知っていることは強みだが,それだけで冷静かつバランスの取れた評価者になれるわけではない.
むしろ,互いの苦労を知る人だけで頷き合うほど,評価は同じ方向へ偏る.反対意見が聞こえなくなった状態を,反対意見がなくなった状態と取り違える.内輪の静けさを,世界の納得だと思い始める.
だから,外野からのヤジは大事である.
ヤジは仕様書ではない.再現コードでも,Pull Request でもない.雑で,短く,役に立たないこともある.ただ,作り手の論理へ適応していない人が,どこで引っかかり,どこで嫌になり,何を変だと感じたかを知らせる.内部の言葉に翻訳される前の違和感だからこそ,持っている情報がある.
もちろん,本当に意味のないヤジもある.すべてを真に受ける必要はないし,すべてに返事をする必要もない.声が大きいことは正しさの証明ではない.
しかし,意味のない声が混じっていることを理由に,否定的な声全体へアレルギー反応を起こすのは不健全である.免疫は必要だが,外から来たものをすべて病原体として攻撃する免疫は,身体そのものを傷つける.
一理あるなら,真摯に受け止めた方が良い.
受け止めることは,従うことではない.採用することでも,必ず返答することでもない.何を言われているのかを一度は内容として読み,正しければ認め,採用できなければ理由を考え,間違っているなら間違っていると判断する.その手続きを,発言者の所属や貢献量を理由に省略しないということである.
健全な共同体とは,ネガティブフィードバックが存在しない共同体ではない.否定的な声を,敵を増やさずに消化できる共同体である.
文句だけを言う人もいて良い
文句だけを言う人は,本当に悪なのだろうか.
私は,いて良いと思う.
具体的な解決策を持っていなくても,「これは使いづらい」と言って良い.内部構造を知らなくても,「この変更で困った」と言って良い.自分で直す能力や時間がなくても,「この方針は好きではない」と言って良い.
利用者にしか見えないものがある.むしろ,内部を知りすぎると見えなくなる不便さもある.作り手が百回説明して慣れた複雑さを,初めて触った人が一秒で嫌う.その一秒の嫌悪は,設計文書より雑で,Pull Request より扱いにくいが,利用者の経験としては本物である.
もちろん,文句は間違う.雑でもある.前提を誤解していることもあるし,別の利用者の事情を無視していることもある.文句は文句であるというだけで,聖なるユーザーフィードバックへ昇格するわけではない.
それでも,存在して良い.
未完成な批判は,完成した修正の下位互換ではない.役割が違う.批判は問題の輪郭を置き,修正はその輪郭の一つに手を入れる.前者を言った人が,必ず後者まで引き受ける必要はない.
発言権と,作業の請求権は違う
ここは分けなければならない.
批判して良いことは,メンテナに無償で直させて良いことを意味しない.issue を書く自由があっても,優先して対応してもらう権利が自動的に生えるわけではない.返事がないこともある.却下されることもある.閉じられることもある.
メンテナには,直さない自由がある.説明し続けない自由も,プロジェクトの方針を守る自由も,失礼な相手を遠ざける自由もある.
誹謗中傷,命令,無限の催促,無料のサポートを当然とする態度まで「批判」として守る必要はない.それらは意見ではなく,他人の時間に勝手な請求書を送っているだけである.
一方で,メンテナがその請求を断れることと,利用者の感想が存在してはいけないことも別である.
言う自由はある.引き受けない自由もある.
この二つは対立しない.どちらか一方だけを認めようとするから,話がおかしくなる.
作り手だけが偉いわけではない
作った人は,作ったことについて評価されるべきである.時間を使い,責任を負い,壊れた夜に直し,誰かの雑な issue を読み,互換性のために退屈な作業を続けた.その労力を軽く扱うべきではない.
しかし,作ったという事実は,あらゆる論点で正しいことの証明にはならない.
手を動かした人の言葉が重くなる局面はある.最終的な方針を決める権限が,継続的に責任を負う人へ寄ることにも合理性がある.だが,手を動かした事実だけで,外から来た批判の内容まで無効にはできない.
汗は功績にはなるが,反論にはならない.
作り手を尊重することと,作り手を階級の上に置くことは違う.利用者を尊重することと,利用者の要求をすべて呑むことも違う.
どちらかを王にしなくて良い.
結論
私は OSS をやっている.だからこそ,できるなら参加した方が良いと思っている.問題を見つけたら,再現し,直し,議論し,可能なら継続して関わった方が良い.参加によってしか得られない理解は,確かにある.
ただ,その助言を沈黙の条件にしてはいけない.
「参加すれば良い」は,手を差し出す言葉であるべきで,口を塞ぐ言葉であってはならない.
OSS の世界は,commit する人だけで成立しているのではない.使う人がいる.選ぶ人がいる.選ばない人がいる.褒める人がいる.文句だけを言う人もいる.そして,何も言わずに去る人がいる.
作り手だけが世界を作るのではない.観客や利用者がいて,初めて作られたものが世界の中に置かれる.
参加は橋である.料金所ではない.
渡れる人は渡れば良い.渡った人は,できれば橋の向こうで見えたものを持ち帰れば良い.しかし,渡らなかった人の声まで,川のこちら側へ捨ててはいけない.
開かれているとは,誰でも作り手になれるということだけではない.作り手にならない人も,外からその姿を見て,好きだ,嫌いだ,ここが変だと言えることまで含めて,開かれているのだと思う.