
サトシの SourceForge SVN 履歴は、何が実装されたかの記録としてはよく調べられている。4人のコミッター、252件のリビジョン、2010年初頭の 75日間の沈黙。だが 164件のコミットメッセージの語数を数えた者や、コミット間隔の統計を取った者、その沈黙が明けた後で彼の書き方がどう変わったかを確かめた者は、探した限り見当たらなかった。実際にやってみた。サトシは戻ってきたとき、以前より言葉を減らしていた。この同じ 164 件という数字は、サトシ同定の非対称性分析の材料一覧にも一行だけ登場する。本エントリは、その一行の背後にある集計の全体である。
1. 母数を正しく確定する
このアーカイブの既存記録は、サトシの SVN コミットを「160」とこのアーカイブのコード分析に記していたか、「164 という値もミラー側の集計から出回っている」と SVN リポジトリのコミッター記録に注記するに留まっていた。SVN 履歴の Git ミラーresearch-note/bitcoin-legacyから始めたところ、s_nakamoto名義のコミットは 159件で、164 より 5件少なかった。
ミラー自体に欠落がある。r15〜r202 の全範囲で、作者を問わず 7件の SVN リビジョンがmasterブランチに単純に存在しなかった。この 7件を SourceForge 自身のコミットログと直接照合した。5件はサトシのもので、r29・r30・r31(2009年11月4日の小さな Linux/xpm 修正 3件)、r50(「Version 0.2.0 released」)、r98(「version 0.3 release」)である。残り 2件(r26・r27)はマルッティ・マルミのものだった。159+5=164 で、このアーカイブ自身のsvn-committers.jsonと正確に一致する。古い方のコード分析エントリーにある 160 という数字は、この照合以前の集計値にすぎない。
2. メッセージが語ること
164件のメッセージ全文(1 行目だけでなく全体を通して数えた。一部のコミットが、無関係な複数の修正をカンマで区切って 1 つのメッセージに詰め込んでいると気づいて初めて重要になる区別だ)を通して、平均 11.74 語、中央値 8 語。最短は 1 語で、5件が該当する。「misc」が 4件、「correction」(2010年12月)が 1件。最長は 64 語で、ThreadSocketHandlerのソケット処理修正を一節ずつ列挙している。
語彙はほぼ完全に機械的だ。「version」(41回)、「fix」(25回)、「build」(20回)、「linux」(18回)、「added」(17回)が内容語の頻出トップ 5。「rpc」と「unix」は 14回で同率 6 位。3件のメッセージが協力者の名前を挙げて謝辞を述べている。teknohog へ、jgarzik へ、そして Crypto++の高速化について「BlackEye がアラインメントの問題を突き止めてくれた」への謝辞だ。さらに 5件が翻訳者の名前をクレジットしている。一人称は 164件中ちょうど 2件にしか現れない。感嘆符は 0件。
比較として、ギャビン・アンドレセンの SVN コミット 81件は平均 13.61 語・中央値 8 語で、サトシと同じ中央値だ。マルッティ・マルミの 21件(sirius-m名義)は平均 7.69 語・中央値 5 語。サトシのそっけなさを生んだものが何であれ、彼固有のものではなかった。このプロジェクトのコミット文化そのものが共有していた習慣のように読める。
3. 間隙を測る
2010年3月5日から 5月19日までの 75日間の沈黙は、このアーカイブのコード分析ですでに記録されている。まだ測られていなかったのは、その間隙が連続するコミット間の 163件の間隔の中でどこに位置するかだ。答えは、大差をつけての 1 位だった。中央値 22.9時間・平均 62.0時間に対し、この間隙は 1797.5時間に達する。標準的な IQR 検定(上側基準 168.6時間)では 163件中 8件が外れ値と判定され、75日間の間隙はその 8件の中でも最大だった。この同じタイムスタンプ群は、別の信号を読むためにも使われている。国籍の分析は、UTC06:00 から 12:00 の間にコミットがほぼ皆無であることを、EST 圏または CST 圏と整合する証拠として読んでいる。
コミットの間隔は、中央値の半分と 2倍を境にすると、163件の間隔がほぼ三等分に分かれる。短期集中の間隔が 54件、定常ペースが 55件、長い待機の間隔が 54件だ。メッセージ自体の形も間隙を境に変わった。3月5日までの 54件は平均 15.74 語(中央値 10 語)、5月19日以降の 110件は平均 9.78 語(中央値 8 語)。この 75日間にサトシが何をしていたにせよ、戻ってきた彼はより短いメモを書くようになっていた。
4. 幻のコミット
164件中 158件(残り 6件は.cpp/.hを一切触っていないか、Git ミラーに存在しない)を変更行数の合計で並べ替えると、最大のものは 2010年8月29日のリビジョンで、他を大きく引き離していた。65 ファイル、31,004 行の追加、31,004 行の削除である。コミットメッセージは「propset svn:eol-style native」。
これは改行コードの正規化だ。実際の内容の文字を一つも変えずに、すべての行の終端記号を書き換える SVN のプロパティ変更である。Git の行単位の diff は「この行の内容が変わった」と「この行の終端記号が変わった」を区別できないため、ファイル全体が置き換わったと報告する。これを含めたままだと、平均変更規模は 396 行から 784 行まで膨らみ、サトシの実際の作業とは無関係な形で分布が二峰性に見えてしまう。除外すると、実際の最大コミットは 8,591 行で、2010年2月の「strip out unfinished product, review and market stuff」である。規模こそ異例だが、正真正銘の内容変更コミットだ。
164件全件を実際の内容(機能追加・バグ修正・リファクタリング・クリーンアップ・文書、または内容を伴わないバージョンリリースのタグ付け)で分類すると、機能追加 74・バグ修正 44・クリーンアップ 14・文書/翻訳 13・リリースタグ 12・リファクタリング 7。追加されたコード行に占めるコメント行の比率は、75日間の間隙をまたいでもほぼ横ばいだった。前 8.12%、後 9.09%である。メッセージが短くなった一方で、これは変わらなかった一つの指標だ。21件が、同一ファイルへの直後の再変更と訂正を示す語(「fix」「revert」「correction」)の組み合わせを示している。最も簡潔な例はリビジョンfb7e197の 4 語、「revert revision 56, going in different direction with boost::asio and JSON-RPC」である。
5. 限界
164件のうち 5件(Git ミラーに存在しない分)は、メッセージ本文のみで数えている。diff は取得していないため、§4 の diff 規模に関する数値(変更行数の合計、最大コミットの順位)は 158件を対象としており、164件全件ではない。同じ節でもメッセージ本文だけで判定する内容分類は 164件全件を対象にしている。この 5件のうち 2件(r50・r98)は正確な時刻の記録がなく、§3 でこの 2件に隣接する間隔だけ精度が粗い。いずれも中央値や外れ値の順位を動かすものではない。差はすでに十分な余裕を持つ範囲の縁に収まっている。
この作業に取りかかったとき、退屈な結論を予想していた。誰もこの語数を数えなかったのは、数える価値のあるものが何もなかったからだろう、と。おおむね、その通りだった。語彙はほぼ部品表であって日記ではない。作業の途中で、本当に意外な発見が一つあった。行数だけ見れば履歴全体で最大に見えたコミットは、実は内容を一切伴わない改行コードのプロパティ変更であり、実際に diff を開いて確かめない限り気づけない類のものだった。だが、実際に私の中に残ったのは、もっと小さな数字だ。あの 75日間を経てサトシが戻ってきたとき、どこにいたかを説明するために言葉を増やしはしなかった。むしろ減らした。1 コミットあたり平均 9.78 語、間隙前の 15.74 語に対してである。彼を遠ざけていた何かは、戻ってきた彼を饒舌にはしなかった。むしろ、より寡黙にした。それが、この記録に沈黙が残した唯一の痕跡であり、それすら一文ではない。平均値でしかない。




