ビットコイン・インスティテュート

サトシの​Windowsの​作業台 — MinGWと​Visual C++ 6.0の​27か月と、​自分で​仕上げた​Linux版

暗い画面の中央に、ハンガリー記法のコードが並ぶ1990年代ふうのWindows統合開発環境ウィンドウが浮かび、背後にはうっすらとしたペンギンのシルエット。下段には2009年のリリース日から長い空白期間を経て、後年の引き継ぎ日へと続くタイムライン

最初のリリースから8か月たった2009年8月、サトシはマルッティ・マルミに、二つあるWindowsのコンパイラーのうち実際に頼っていたのはどちらかを書いている。v0.1のreadmeは、MinGW GCC 3.4.5とMicrosoft Visual C++ 6.0 SP6の両方を挙げていた。MinGWについて、サトシはこう書いた。「そちらがより良いコンパイラーで、VCはデバッグにしか使っていなかった」。この期間にも、その前の1年半のコーディングの期間にも、サトシの記録にLinuxは一度も出てこない。

その5日後、サトシはLinuxを後回しにする理由を書き、11月の最初の週には、マルミがブランチで始めたLinux版の作業を引き取った。コンパイルを通し、メインのトランクにマージし、コミットの記録に「works reliably on Linux now」と書いている。27か月のWindowsを示す同じ記録が、サトシが自分の都合で、書き残した理由に沿ってWindowsの外へ出たことも示している。そして1年後になっても、サトシは自分をLinuxの得意でないほうの開発者と呼んでいた。この記録を時期ごとに並べる。

1. 概要 — 3期間

期間範囲期間長記録の中のLinux
Phase 1 — コーディング・リリース・初期2007半ば → 2009-08-23約27か月サトシの記録には出てこない。画面はほかのOSでも動くwxWidgetsで作り、システムのコードはWindowsのAPIを直接呼ぶ
Phase 2 — Linux版2009-08-24 → 2009-12-16約4か月理由を書いて後回しにする(8月29日)。マルミが移植を始める(10月31日)。サトシが仕上げてマージする(11月4〜6日)。v0.2がLinux版を出す(12月16日)
Phase 3 — 三つのプラットフォーム2009-12-17 → 2011-04-26約16か月MSVC 8.0(2005)でもビルドできるようにし、0.2.0のあとVC6への対応をやめる(2010年)。ラズロ・ハニエツのMac版がv0.3で出る(2010年7月)。サトシはMinGW、VC、Ubuntuでテストコンパイルする。「私よりずっとLinuxに長けている」(2010年12月)。WindowsのPGP署名末尾(2011年2月)
Phase 1 - Windows、記録に Linux なし (27 ヶ月)2007コーディング開始(2007年半ば、本人の18 か月の発言から)2008ホワイトペーパー公開、コードの後に執筆(10月31日)2009v0.1 リリース -Windows 専用 .rar(1月8日)Phase 2 - Linux 版 (4ヶ月)2009サトシが Linuxを後回しに - 3% と300% (8月29日)マルミがブランチで移植を始める(10月31日)サトシが unix ビルドをトランクにマージ(11月5日)v0.2 が Linux 版を出す(12月16日)Phase 3 - 三つのプラットフォーム (16 ヶ月)2010Boost 1.35 を必須にしMSVC 8.0 (2005) でもビルド (2月12日)v0.3 に ラズロの Mac版 (7月6日)'私より Linuxに長けている'(12月3日)2011PGP の末尾 - MingW32と WinPT (2月22日)サトシのプラットフォーム - 3 期間

期間の境は公開記録の出来事に置いた。アーカイブで初めてLinuxを話題にした日付のあるメール(2009-08-24、Phase 2の始まり)、初めてLinux版を出したv0.2(2009-12-16、Phase 2の終わり)、知られている最後のサトシのメール(2011-04-26、Phase 3の終わり)である。

2. Phase 1 — コーディング・リリース・初期 (約27か月): 記録にLinuxなし

サトシ自身が2008年11月のcryptographyメーリングリストへの返信で「この一年半、コードを書きながら、そうした細かい点は、すべて詰め切れていると思う」と述べ、後にマルッティ・マルミに宛てた2009年7月のメールで「18ヶ月の開発の後で一息つく必要がある」と書いている。v0.1リリース前に自己申告 ~18か月のコーディング期間が終わるなら、コーディング開始は遅くとも2007年半ばに置かれる。サトシ自身は作業順序も記録しており、「すべての問題を解けると確信するためにまず全コードを書く必要があり、その後で論文を書いた」とハル・フィニー宛、2008年11月9日のメールに書いている。論文はコードが実質的に完了した後に書かれたのであり、先に書かれたのではない。

後年の「2007年から」「リリース前に2年間の開発」という言い方 (ハニエツ、2010-06-18、 ハーン、2011-01-10) は、同じリリース前作業をより広い範囲で語ったものだ。約2年という振り返りは、サトシがエディターを開く前に問題を考えていた数か月を足した数字であり、コーディングに先行する独立した設計段階を想定するものではない。ここでのPhase 1の境界はコーディング期間と公開リリースを追跡している。自己発言の全タイムラインはサイファーパンクへの独立到達分析に集約されている。

v0.1は2009年1月8日にSourceForgeでWindows専用 .rarアーカイブとして配布される。その後さらに7か月、2009年8月末まで、ビットコインのソースコードはサトシの手元にのみ存在し、連続する .rarリリースで配布される。この27か月の窓全体で、アーカイブには次のいずれも存在しない:

  • サトシのメールにLinux言及なし。アーカイブで初めてLinuxを話題にしたのは、2009-08-24のマルミのメールで、次に取り組むことの一つにLinuxへの移植を挙げている。これより前のサトシの記録に、Linuxを話題にしたものはない。
  • Linuxビルド・移植・ユーザーからのコメントなし。アーカイブ最初の「Linux build」スレッドは2009年10月末のマルミ宛シリーズ。
  • 非Windows環境でビットコインを動かした言及なし。例外は外から来た一件だけで、2009年4月にマイク・ハーンがMacのWineでクライアントを試している。

2.0持ち運べる画面と、Windowsの芯 — 3つの観察

  1. v0.1はWindows専用。v0.1 (2009年1月8日) からv0.1.xマイナーシリーズを経てv0.2がLinux対応を追加する2009年12月16日までの約11か月、サトシ自身はWindows専用 .rarを出し続けた。
  2. ホワイトペーパーとv0.1の告知は、プラットフォームについて何も言わない。OSへの言及、ポータビリティ目標、マルチプラットフォーム実装の意図表明、「Windowsを最初に選んだ理由」のような戦略的明示、いずれも存在しない。
  3. 画面は最初から持ち運べたが、システムの層はそうではなかった。v0.1のreadmeは依存のライブラリにクロスプラットフォームのGUIフレームワークであるwxWidgetsを挙げ、クライアントの画面はすべてこれで描かれている。その下では、v0.1.0のheaders.hがwindows.hとwinsock2.hを条件なしに読み込んでいて、出荷されたコードはWindows以外ではコンパイルできなかった。サトシがこの選択を量った跡は一か所だけ、util.hの注記にある。「移植のしやすさのためにwxCriticalSectionを使うこともできるが、TryEnterCriticalSectionに当たるものがない」。持ち運べる道があるのを知ったうえで、それに欠けていた一つの関数のためにWindowsの呼び出しを選んでいる。

観察1と3は、互いに排他的ではない次の2通りの読みと整合する:

  • (a) サトシのマルチプラットフォーム視点が初期に薄かった
  • (b) Windows一般ユーザーを意図的に初期採用者として狙った

(b) は .rarパッケージング (Windows消費者向けの慣れた形式)、インストーラなし (展開して実行)、Windows専用初版という選択が首尾一貫した「ダウンロード → ダブルクリック → 動く」戦略として整合し、配布形式の分析は、Warezシーンとの重なりがこの形にとどまることを記録と突き合わせている。Phase 2は(b)をじかに支える。2009年8月にサトシが初めてプラットフォームを論じたとき、Windowsにとどまる理由として挙げたのは、そこにいる個人の利用者だった(§3)。

観察2が当てはまるのはPhase 1だけである。ホワイトペーパー、v0.1の告知、初期のやり取りのどれでも、この選択は話題にならない。サトシがこれを理由づけた最初の記録は、リリースから8か月後の私的なメールである。

この期間に観察されるWindows寄りの物的証拠4件は互いに独立している:

2.1 MinGW GCC 3.4.5 + Visual C++ 6.0 SP6 — ビルドツールチェーン

ビットコインv0.1ソースアーカイブのreadme.txtは、サトシ自身の言葉で対応コンパイラーを記録している:

Compilers Supported
-------------------
MinGW GCC (v3.4.5)
Microsoft Visual C++ 6.0 SP6

二つは同格ではなかった。2009年8月、マルミがMinGWとMSYSでビルドを通したあと、サトシはデバッグシンボルを外して実行ファイルを小さくしたと書き、こう続けた。「これはmingwでのことだ。そちらがより良いコンパイラーで、VCはデバッグにしか使っていなかった」。リリースのビルドはGCCで作り、Visual C++ 6.0はデバッガーとして使っていた。

Visual C++ 6.0はマイクロソフトが1998年にリリース、SP6(最終サービスパック)は2004年リリース。MinGW GCC 3.4.5(GCCのWindows移植、3.4.x系列の最終リリース)は2006年初頭リリース。2008–2009年時点で3者すべては後継 (Visual C++ 2003 / 2005 / 2008、GCC 4.x) より数年遅れていた。Visual C++ 6.0 IDEは広く時代遅れと見なされていた。SVNリポジトリ履歴エントリーも、移植の側から同じWindowsのコードベースを記録している。11年前のIDE + 2006年版MinGWに固定されたワークフローは、ビットコインのために新調された可能性は低い。

サトシは、それが古いことを知っていた。2009年11月、新しいLinux版とWindows版のハッシュの速さを比べて、こう書いている。「LinuxビルドのGCC 4.3.3は、Windowsの古いGCC 3.4.5よりもSHA-256コードをうまく最適化したのだと思う」。そして「MinGWを4.3.xにアップグレードして同じ土俵に立てるか見てみるべきだな」と添えた。2009年の道具は慣性で遅れていて、持ち主自身がそう書いている。入れ替えは翌年に始まる(§4)。

readme.txt自体にも傍証が残る: 「VC6でビルドするにはBoost 1.35が必要かもしれない。Boost 1.37はVC6でコンパイルできなかった」という記述だ。サトシは新しいBoostを試してVC6の壁に当たり、コンパイラーを更新する代わりに依存ライブラリを古い版にダウングレードして既存環境に合わせている。1年後には逆を選び、Boostを上げてVC6のほうを外していく(§4)。

2008年には、マイクロソフトの無料のコンパイラーVisual C++ Expressは、Passportにサインインして登録しなければ使い続けられなかった。仮名の開発者がVisual C++ 6.0にとどまった理由がそこにあるのかは、ソフトの登録の時代とサトシの分析が記録と突き合わせている。

2.2ハンガリアン記法 — 1990年代末のWindows C++ スタイル

v0.1全体で変数名はマイクロソフトのハンガリアン記法 (型接頭辞、例: nValue、strError、vtx) に従っていた。2014年8月、ヴラディーミル・ヴァン・デア・ラーンは新規コードからこの慣習を削除するPR #4641を提出し、「最初からずっと気に障っていた」と評した。ハンガリアン記法は、1990年代末から2000年代初頭のWin32 / MFC系譜のスタイル指標であり、Visual C++ 6.0と同時代である。 (v0.1.0 → v0.3.19にわたるサトシのコーディングスタイル指紋の完全な統計分析はサトシコード分析を参照。)

2.3 .rarパッケージングとWindows専用初版

ビットコインv0.1とv0.1.xマイナーシリーズは、2009年1月からv0.2がLinux対応を追加する2009年12月までの期間、SourceForgeでWindows専用 .rarアーカイブとして配布された。形式の詳細はWarezシーン共通点エントリーで扱われている。本エントリーで重要なのは、Windows専用の初版スコープがPhase 1のタイミングに整合する点である。

2.4チーム開発ツール一切なしの7か月

Phase 1のうち、リリース後の7か月 (2009年1〜8月) は途切れないソロ開発パターンと重なる: バージョン管理なし、テストスイートなし、課題追跡なし、第二レビュアー過程なし。各リリースは現状ソースツリーの新規 .rar。公開コミット履歴はマルミがPhase 1とPhase 2の境目でSVNリポジトリを開いたときに初めて始まる。SVN履歴エントリーはツールチェーン遷移を記録する: 2009年8月にチーム開発基盤が現れたのはマルミが構築したから。

ジェフ・ガージックは2010年からサトシと共に開発した初期のコア開発者で、後にコードの外側からこの不在を指摘している。サトシは既知の暗号技術をそのまま流用し、新しい方法で組み合わせたが、モジュール化やユニットテストといった正規のコンピューターサイエンス教育で学ぶ基本が欠けていた (ガージックの回顧録参照)。

MinGWとVisual C++ 6.0のWindowsのツールチェーン、コード全体のハンガリアン記法、 .rar Windows専用パッケージング、チーム開発ツール一切なしという4件の独立観察は、すべて27か月の全期間にわたってWindows環境で単独作業する開発者像で収束する。

2.5 OSSライブラリ依存 — 利用者としての積極性

同じreadme.txtはBitcoin v0.1.3の外部ライブラリ依存も列挙している:

ライブラリ役割ライセンス
wxWidgetsクロスプラットフォームGUIフレームワークLGPL 2.1
OpenSSL暗号 (ECDSA、SHA、BIGNUM)Old BSD
Berkeley DB組み込みkey-valueストア (wallet.dat等)New BSD
Boost汎用C++ ライブラリ (thread、asio、filesystem)MIT-like

ビットコイン本体も、同じreadme.txtの冒頭に明記された寛容なOSSライセンスであるMIT/X11で公開されている。

この事実はサトシを明確にOSSの利用者層に位置づける。「OSSの存在を知らなかった」という読みは成り立たない: v0.1は主要なOSSライブラリ4件を組み合わせ、自身もOSSライセンスで公開されている。 §3 (後述) が記録するのは別の観察だ。ライブラリ層ではOSSを積極利用する一方、OSSコミュニティ慣習層 (autoconf、ライセンススレッド参加等) では消極的だった。ライブラリの利用者としては積極、コミュニティの貢献者としては受動。この構図は、OSSを「参加する文化」ではなく「使う道具一式」として扱う単独開発者にはよく見られるものである。

3. Phase 2 — Linux版 (約4か月)

Linuxは2009年8月24日に記録に入る。持ち出したのはマルミだった。MinGWでビルドを通したマルミは、次の作業として、トレイへの最小化とWindowsとの自動起動を挙げ、「その後、Linuxへの移植か、ウェブアプリフレームワークに必要なコマンドラインインターフェースに取り組めるか検討します」と書いた。5日後のサトシの返事は、サトシの記録の中で、プラットフォームを互いに比べて量ったただ一つの発言である。

サトシ・ナカモト(マルッティ・マルミ宛のメール、2009年8月29日17:31 UTC)

Linuxへの移植には心が動くが、一度やれば、それから先はリリースのたびにその分の手間がかかる。もうしばらく後回しにしたい。自動起動ならノードが300%増えるかもしれないが、Linuxなら3%かもしれない。Linuxはサーバーファームの助けにはなるが、実のところ、個人の利用者を優先したい。WinEで問題なく動くという報告もあった。

Windowsを選んだのは、やはり意図してのことだった。理由はノードの数と利用者で、サトシが何を知っていたかではない。それでも2か月後、サトシは手を付けた。10月29日と30日に、最初の移植のための変更をコミットしている。クリティカルセクションをWindowsの呼び出しからwxWidgetsへ移し、QueryPerformanceCounter、書式の文字列の%I64d、Sleep、CheckDiskSpaceを移植できる形にした(マルミ宛てに「見つけた移植性のないコードをいくつか修正した」)。マルミは10月31日にWindowsのヘッダーのLinux向けの代わりをコミットし、11月3日には、ブランチで「Util、script、dbとヘッダーは完全にコンパイルできるようになり、net.cppは部分的にコンパイルできる」と知らせた。

そこからは、サトシがビルドを引き取った。その日の返事は「それはいい。Linuxビルドに取り組むのを楽しみにしていた」。翌日には「いくつか修正してコンパイルは通るようになった」と書き、build-unix.txtを書き、wxWidgetsは「Windows版と同じバージョンだから」2.8.9のままにした。同じ日のうちに、「作業の重複を避けるために」まだ取り組んでいるとマルミに知らせている。11月5日にLinuxの変更をメインのトランクにマージし、11月6日には「Linux上で安定して動作するようになった」、11月8日にはlinux-0.1.6-test1をマルミに送って「Linuxビルドのネットワーク上でのテスト準備が完了した」と書いた。

Bitcoin CoreのGitHubのリポジトリに残るSVNの履歴は、同じ数週間を、コミットした人のハンドル(サトシはs_nakamoto、マルミはsirius-m)で記録している。

日付 (UTC)コミットした人コミットのメッセージ(抜粋)
2009-10-29s_nakamotoCCriticalSection using wxWidgets instead of Windows OS calls
2009-10-30s_nakamotomake CheckDiskSpace portable
2009-10-31sirius-mLinux alternatives for the Windows headers and PerformanceCounter. Some typedefs and #defines for the Linux build. Fixed GetDataDir.
2009-11-05s_nakamotounix build merged in, bitmap resources from xpm instead of rc, …
2009-11-06s_nakamoto… Linux fixes, socket send MSG_NOSIGNAL, bind INADDR_ANY, works reliably on Linux now except if wxMessageBox is used in a thread other than the GUI thread
2009-11-08s_nakamotoGet local host IP on Linux, Shutdown() a little cleaner — linux-0.1.6-test1 waypoint
2009-12-11s_nakamotoretry IRC if name in use, resize to fit ubuntu’s giant default font, …
2009-12-13s_nakamotorestrict file permissions on linux to the user only

11月5日のマージは、マルミのブランチの作業をサトシの名前でトランクに入れているので、コミットの記録だけでは、どの行を誰が書いたかを分けられない。分けられるのはメールのほうである。最初のファイルのコンパイルを通したのはマルミで、そこから動くプログラムまで持っていったのはサトシだった。

試験も同じ形で進んだ。NewLibertyStandardが64ビットのUbuntuで試験版を動かし、サトシはその報告からゾンビのソケットの問題を診断し、test5でMSG_DONTWAITを使って直し、自分の32ビットのLinuxのマシンで負荷試験を回した(「LibertyはUbuntu 64ビットで、私は32ビットなので、それが違いだと推測している」、11月15日)。二つのビルドのハッシュの速さを比べたときに、Windowsのコンパイラーを「古いGCC 3.4.5」と呼んだのも、この試験の中である(§2.1)。

ビットコインv0.2は2009年12月16日に出た。新機能の一覧には「Linux版(Ubuntuでテスト済み)」があり、サトシはこの行をマルッティ・マルミの名前の下に置いた。告知が記録しているのは、サトシが誰に功績を付けたかで、コミットとメールが記録しているのは、誰がビルドを仕上げたかである。どちらも事実である。

サトシは、自分の腕を実際より大きく言わなかった。その1週間前、The Madhatterが「私は主にLinux/BSDの人間」と申し出たとき、サトシはこう答えている。「それは素晴らしい。私はその分野の専門知識が少ないからだ」。同じスレッドで、Mac版も歓迎した。「Macサポートは良いな。wxWidgetsはクロスプラットフォームで本当に効果を発揮している」。

OSS慣習との接触もPhase 2で初出。Phase 1にはサトシによるApache、GNU、autoconf、ライセンス選択基準などへの言及が一切ない。Phase 2でコミュニティからの質問・要請を受けて初めて記録に入る:

  • 2009年11月23日: bitcoin.orgのDrupalのmod_rewrite修正のため、Apache設定アクセスをマルミに依頼。サーバー管理文脈でApache設定の知識を示す。
  • 2009年12月12日BitcoinTalk (topic 12): コミュニティの投稿者 (The Madhatter) が「autoconf使うこと考えた?」と尋ねたのに対し、サトシは 「Considered autoconf. 大規模プロジェクトには必要だが、我々はまだ小さいのでmakefile単純な方が最適」と返答。autoconf (OSSクロスプラットフォーム化の標準ツール) を「考えた (Considered)」という痕跡は残るが、事前から熟知していた上での却下か、提案を受けてざっと調べた上で「うちには不要」と判断したかは、この応答だけからは決まらない。autoconfが置き換えるはずのmakefile.unixは、その5週間前にサトシ自身が書いたものだった。
  • 2010年9月12日BitcoinTalk: 「GPLへの切り替え」スレッドでMIT / Boost / new-BSD / public domain / GPLのライセンス特性を比較しつつ「ビットコインのような小プロジェクトでは閉鎖化への恐れは過剰」とコメント。ライセンス比較を実務的に行う水準の認識は持つ。

この3件から言える弱い結論は、サトシがOSS慣習を完全に「知らなかった」とまでは断定できない、という限度にとどまる。事前知識からの却下か、提案を受けて短時間調べた上での「不要」判断かは、これらの応答だけからは決定できない。確実なのは応答の形だけである。3件すべてで取り込みを抑える方向に振れていて、どれもコミュニティの参加者が持ち出した話題に答えたものである。Linuxは違う道をたどった。沈黙し、理由を書いて後回しにし、最後はサトシ自身が仕上げている。

§2.5と合わせて読むと像はより鋭くなる: ライブラリ層ではPhase 1からOSSを能動的に利用していた (wxWidgets / OpenSSL / Berkeley DB / Boost) のに対し、コミュニティ慣習層 (autoconf、ライセンススレッド参加、GitHub文化) では受動的なまま。構図は 利用者として能動、貢献者として受動。単独開発者には実際に繰り返し見られる像であり、矛盾ではない。

サトシの記録にあるWindows以外の技術の多くは、名前のわかるほかの人が持ち込んだ。その中でLinuxだけは、サトシが自分で運んだ。主要なものをPhase 2〜3にわたって整理すると:

技術・基盤持ち込んだ人時期出典
SVNリポジトリマルッティ・マルミ (r1で作成)2009-08SVNコミッタ履歴
Linuxビルドマルッティ・マルミが提案して移植を始め、サトシが仕上げてトランクにマージ、NewLibertyStandardが試験2009-08〜12linux-buildメール群、SVNの履歴(上の表)
macOSビルドThe Madhatter (試作報告) → ラズロ・ハニエツ (v0.3で公開、r123でマージ)2009-12 / 2010-07 / 2010-08BitcoinTalk topic-12 / SVN履歴
autoconf検討The Madhatter (提案)2009-12同上 (サトシは却下)
Drupal / Apacheサーバー管理(本人主導、ただしbitcoin.org運用上の要件)2009-11〜Drupal関連メール
ライセンス比較議論 (MIT / GPL / Boost / BSD / PD)コミュニティ (Switch to GPLスレッド)2010-09BitcoinTalk topic-989
「私よりLinuxに長けている」 (自身の限界を承認)ギャビン・アンドレセン (後継者)2010-12マルミ宛メール
Java / JVMエコシステムマイク・ハーン (bitcoinj公開告知)2011-03ハーン → サトシbitcoinjリリース
Git移行 (SourceForge SVN → GitHub)ギャビン・アンドレセン (サトシ撤退後に実行)2011-09r252「Development has moved to github」

SVN、macOS、autoconf、GPLライセンス比較、Java、Gitは、どれもマルミ・ハニエツ・The Madhatter・ハーン・アンドレセンらが個別に持ち込んだ。Linuxも入口は同じで、マルミの提案から始まったが、やると決めてからの作業の大半はサトシがしている。Apache設定は本人が直接扱ったが、これはbitcoin.orgの運用の話で、ビットコインの開発の道具ではない。サトシの計算機世界の地平は、ビットコイン以前はWindows / Microsoft圏で完結していたように見える。Phase 2が示すのは、手間に見合うと決めたとき、サトシがどれほど早くその外で仕事ができたかである。

4. Phase 3 — 三つのプラットフォーム (約16か月)

Phase 3では、Windowsの道具そのものが入れ替わる。2010年2月12日、サトシはコマンドラインとJSON-RPCのためにBoost 1.35以上を必須にし、同じコミット(SVNの履歴の98500d70a8)で、ビットコインをMSVC 8.0(Visual C++ 2005)でもコンパイルできるようにした。build-msw.txtの対応コンパイラーの欄は、v0.1の二行から書き換わっている。MinGWは推奨、VC6は古いBoostにAsioを足せばまだビルドできるはず、MSVC 8.0(2005)SP1は試験済み。そのうえで、MSVC 7.0以降にはXPに標準では入っていないランタイムのDLLにリンクする癖がある、と添えた。

7月には、VC6が対応していないものをBoostの中から使うようになったので、「0.2.0の後にサポートを失った」と書いている。同じ投稿は、それまでVC6を残していたのが選んだことだったとも書く。「当時はMSVC6との互換性を維持したかったのだ」。9月には、Windowsでビルドする人に、MinGWのインストーラーで最新の4.5.0を避けて4.4.1を入れるよう勧め、「make*.exeをmake.exeにリネームするだけでよかったと思う」と、自分で入れたときの手順まで添えている。

ビットコインv0.3は2010年7月6日に出た。Mac OS X版が付き、告知には「Mac OS Xバージョン(ラズロに感謝)」とある。サトシはフォーラムに試験を頼み(「ラズロのビルドが初のMacリリースになるので、テストしてほしい!」)、3週間後、bitcoindをwxWidgetsから切り離したときには、自分で確かめられた範囲をこう書いた。「MinGW、VC、Ubuntuでテストコンパイルした。Mac OS Xのビルドを壊していないかわからないので、誰かが確認する必要がある」。2日前に、VC6への対応はもうないと書いたばかりなので、このVCは6.0より新しい版だ。Windowsのコンパイラー二つと、Linuxのディストリビューション一つ。Macはほかの人の手に残った。

マルミがbitcoin.orgのサーバーのrootパスワードをサトシともう一人に渡す案を出すと、サトシはギャビン・アンドレセンを名指して理由を挙げる。このメールは、サトシ書簡でLinux軸上での自己位置づけが最も直接的に現れる箇所を含む:

サトシ・ナカモト(マルッティ・マルミ宛のメール、2010年12月3日19:58 UTC)

ギャビンが適任だ。彼を信頼している。責任感があり、プロフェッショナルだ。Linuxに関しては、技術的に私よりずっと上だ

これはアーカイブのサトシ記録で、サトシが具体的な他者を名指してLinuxスキル軸に自分を置いた唯一の箇所であり、自分の位置を下に置いている。言い回しは冷静な比較判断だが、その内容は、自分でLinux版を仕上げてから1年たっても、サトシが自分をギャビン水準のLinux開発者と見なしていないことを示す。2009年12月にThe Madhatterに書いたことと同じである。

その2か月後のメールでも、サトシが書いていた機械はWindowsのままである。2011年2月22日、サトシはbitcoin-listメーリングリストのmailmanパスワードをギャビンとマルミに引き継ぐPGP暗号化ブロック2つを送る。両方とも次の末尾を持つ:

Version: GnuPG v1.4.7 (MingW32) - WinPT 1.2.0

MingW32はGnuPGのWindows版ビルド。WinPT (Windows Privacy Tray) はGPGのWindows専用GUIフロントエンドで、2000年代後半のWindows GPG環境で広く使われていた。末尾はクライアントが自動付与するもので、ホストOSの受動的痕跡である。ビットコインはそのころ三つのプラットフォームで動いていたが、サトシが書いていた機械はまだWindowsだった。

5. サイファーパンク時代の文脈 — 限定的な主張

2008–2009年の個人開発者にとってWindows専一スタックは異例だったのか。アーカイブはサイファーパンクコミュニティのOS嗜好の系統的調査を含まない。ただし、隣接するいくつかの人物についてアーカイブが記録している内容を集めることはできる。

  • ハル・フィニーは2011年の退職までPGPコーポレーション (後のSymantec) に勤めていた。2004年の再利用可能プルーフ・オブ・ワーク (RPOW) はサーバーをIBM 4758セキュアコプロセッサの上で動かした。サーバーのイメージはLinuxのGCCでビルドされ、クライアントにはLinuxと、Microsoft VC++を使うWindowsの構築手順が付いていた。アンディ・グリーンバーグの2014年のフォーブスの記事は、フィニーが初期のビットコインのコードをIBMのWindowsデスクトップのタワー機で動かしたと書く。サトシのプロファイルに最も直接比較できる事例の一つである。

  • ウェイ・ダイは、初期開発がWindows上のVisual C++ を中心としたC++ 暗号ライブラリCrypto++ の作者である。b-money (1998) は提案のみで参考実装は存在しないためOS直接証拠は限られるが、Crypto++ の系譜はWindowsを指す。

  • アダム・バックはHashcash (1997) を主にPerlの参考実装としてリリースし、これはクロスプラットフォーム。バックの学術・業界双方の経歴はUnixとWindowsの両方への露出を示し、一次的な手がかりは明らかではない。

この散発的な証拠が支持するもの: 2000年代後半の暗号系個人開発者がWindowsを主開発環境として使うこと自体は異例ではなかった。ハル・フィニーは直接の先例、ウェイ・ダイのライブラリ系譜も同じ方向を指す。「サイファーパンク = Linux」という遡及的イメージは、サトシの知的軌道上の実在の人物について本アーカイブが示すものとは必ずしも整合しない。

この証拠が支持しないもの: サイファーパンクコミュニティ全体についての定量的主張。標本は小さく (名前を挙げた3名)、各人物の環境証拠も部分的である。誠実な言い方は「サトシのWindows専一スタックは文書記録されたサイファーパンク時代の暗号系開発者数名の環境と整合し、矛盾しない」までであり、「サイファーパンクは主にWindowsだった」ではない。

6. クラスタが示唆するもの

3つの期間を時系列で読み通すと、観察の塊はサトシのビットコイン以前のバックグラウンドについて構造的な読みを支持する。

  • 長く確立されたWindows C++ ワークフロー。ビルドはMinGW GCC 3.4.5、デバッグはVisual C++ 6.0 (1998年)、そしてハンガリアン記法。サトシのC++ 習慣の形成期は、1990年代末から2000年代初頭のWindows生態系にある。スタックはビットコインのはるか以前に安定していて、持ち主自身が古いと呼ぶほどだった。2010年には、その道具をサトシ自身が入れ替え始める(§4)。
  • 個人開発者であり、チーム開発者ではない。27か月にわたるVCSなし、テストなし、課題追跡なし、第二レビュアーなしという状態は、2008年にチームに埋め込まれた開発者がサイドプロジェクトで脱ぎ捨てる習慣ではない。そもそもこれらの習慣を持ち合わせていなかった人物の習慣である。
  • 想定した利用者もWindowsの側で、それは決めたことだった。v0.1がWindows専用 .rarで配布された事実は、ノードを動かす人もWindowsにいると想定していたことと整合する。2009年8月、サトシはそれを自分の言葉で書いている。Linuxなら「3%かもしれない」、そして「個人の利用者を優先したい」。
  • Linuxは自分の都合で。サトシは理由を書いてLinuxを後回しにし、2か月後にマルミのブランチからビルドを引き取り、1週間たたずに安定して動かした。腕はあった。優先されていなかっただけで、優先すると決めてからは速かった。1年後になっても、Linuxについては自分をギャビンより下に置いている。

これらを束ねると、サトシはチームやエンタープライズ環境でクロスプラットフォーム開発の経験を持たない個人開発者のプロファイルに近い。そのタイプは珍しくない: 業務でクロスプラットフォームの企業プロジェクトに触れていない個人開発者の中には、計算機世界をWindows中心で動いているものとして体験している人がかなり多くいる。「自前のWindowsワークフローが当たり前」という前提が、ほとんど違和感なく共有される。そのプロファイルは、Phase 1の構造的不在 (チーム開発ツールなし + プラットフォーム沈黙 + Windows専用初版) と、Linuxがノードの数で手間に見合うと示すまでサトシが1週間を割かなかったことを、同時に説明する。

この読みはサトシの作業環境と実践パターンを性格づける。国、雇用形態、特定の人物にまで身元を絞り込むものではなく、このプロファイルに合う開発者は複数種類いる (独立コンサルタント、Windows C++ 履歴の長い趣味開発者、業務時間外に動く元企業Windowsエンジニア等)。

7. 限界

  • 「私よりLinuxに長けている」は謙遜の可能性がある。ギャビン引用は文脈上は誠実な比較判断だが、言葉の枠組みは控えめ表現の余地を残す。書いたのは、その1年前に自分でLinux版を仕上げた人である。それでも、プロジェクトのサーバーのroot権限をギャビンに託す理由の一つに、サトシが及ばないLinuxの能力があったという構造的承認は頑健で、2009年12月にThe Madhatterに書いたこととも重なる。
  • Visual C++ 6.0をいつ選んだかは、記録にない。ツールチェーンの古さが示すのは、ワークフローがいつ安定したかであって、新しいものに移れたかどうかではない。ビットコインの開発の間については、記録が答えている。2010年7月、サトシはそれまでVC6を残していたのは互換性を保ちたかったからだと書き、その年のうちにMSVC 8.0でもビルドできるようにし、MinGWの新しいインストーラーを自分で入れている(§4)。ビットコインより前にVC6をどう使っていたかは、記録に残っていない。
  • Phase 1のLinux痕跡不在はLinux無知の証明ではない。27か月の窓に公開記録上のLinux活動はないが、公開された痕跡が無いことは、個人的な接触まで無かったことを厳密には意味しない。マルミの途中のブランチから安定して動くプログラムまで、2009年11月のビルドはおよそ1週間で進んだ。その速さは、それ以前にいくらか慣れていたことを思わせるが、どこで慣れたのかを記録は語らない。
  • Linux版のどの行を誰が書いたかは、コミットからは量れない。11月5日のマージは、マルミのブランチをサトシの名前でトランクに入れており、v0.2の告知はLinux版の功績をマルミに付けている。上で書いた分担は、最初のファイルのコンパイルを通したのはマルミで、そこから試験済みのリリースまで持っていったのはサトシだったことを示すメールに拠っている。

ウェイ・ダイ同定仮説、 ハル・フィニー同定仮説、 アダム・バック同定仮説、 ピーター・トッド同定仮説は、それぞれの候補が記録された作業環境を、本エントリのWindowsのパターンと突き合わせて読み解く。 サトシ同定仮説総覧は、その照合を候補選定全体にかかる制約として位置づける。一方、 アーキテクチャ進化設計書は、Windows中心の初期コードベースをアーキテクチャ漂流の起点として読む。Phase 1から引き継がれた技術的決定を、後続の開発者たちが引き受けざるをえなかった文脈に置くものである。

作業台は、最後までWindowsだった。Linuxの扉を持ち出したのはマルミで、サトシはそれを3パーセントと見積もり、2か月後、自分で1週間でくぐり抜け、告知では功績をマルミに返した。記録が保持する最後の遺物は、今もWindowsの道具が自分で書いた署名の末尾だ。記録に残るのは、自分がどのプラットフォームの上に立っているかを正確に知り、動くことが割に合うときにだけ動いた開発者だ。

参照元の外部ソース

https://sourceforge.net/projects/bitcoin/

その他の外部ソース

他13件を表示