現代の科学はオープンソースソフトウェアである
著者の主張はこうだ。コンピュータ化された世界で科学するには、オープンソースソフトウェアが必要条件である。再現可能とは実行可能かつ改変可能であることで、科学の結果はソフトウェアに依存し、ソフトウェアが誤れば科学も誤る。
日本語
コピー
結論から言うと:現代の科学はオープンソースソフトウェアと同義だと私は主張する。本稿ではその理由、それがなぜ重要か、そして次に何をすべきかを述べる。
なぜ(オープンソースの)ソフトウェアを気にするのか?——全員
私はソフトウェアに膨大な時間を費やしている。「なぜソフトウェアが重要か」と何度訊かれたか分からない。人々は言う。ソフトウェアは科学ではない、と。時間の浪費であり、本当に重要なもの——結果(アカデミアなら論文)——を追うために足早に通り過ぎるべきものだ、と。publish or perish(発表しなければ消える)。
まあ、私はソフトウェアが重要だと思っている。実際、オープンソースソフトウェアは科学そのものだと考えている。少なくとも計算科学においては。この記事はその理由を説明する。科学者として私たちがなぜ科学的方法にこだわらねばならないのか、そしてそれがなぜオープンで再現可能なソフトウェアを作ることを意味するのか。この記事を書くのは簡単ではない。学界の現在の多くの潮流に異を唱えるものだが、それでもより良い科学へ向かう重要な一歩であり、しかも私たち全員を発狂させるものではない。
科学とは何か
ウィキペディアで「科学」を引くとこう出る。
科学とは、宇宙についての検証可能な仮説と予測という形で知識を構築・組織する系統的な学問である。——Wikipedia
では、arXiv の論文を適当に一つ掴んでみよう。そこには明らかに何らかの「知識」がある。しかしその論文は、検証可能で系統的に組織できる予測を提供しているだろうか。あなたはそれを検証できるか? 系統化できるか?
答えは決して単純な「否」ではないが、難しい。その知識に直接アクセスできることはほとんどない。
良い説明——内的モデル
有機体が外部現実と自分自身の起こりうる行為についての「小規模なモデル」を頭の中に持てば、さまざまな代替案を試すことができ……自分が直面する緊急事態に対して、より充実した、より安全で、より有能な仕方で反応できる。
優れた著書『説明の本性』で、Kenneth James Williams Craik は、私たちが現実の小さなシミュレーションを用いて外の世界を説明し予測していると論じた。
この指摘は今日では当たり前に見えるが、そもそも科学を営む目的を際立たせる。すなわち、行為主体としてのあなたが内的モデルを改善し、以前より良い予測ができるようになることだ。ここで内的モデルが決定的だ。arXiv の論文が読者の世界予測を助けないなら、それは科学ではない。だからこそ計算の再現性が重要なのであり、ソフトウェアは予測モデルを符号化して共有する手段なのだ。
再現性とは何か
ウィキペディアによれば、結果を示すだけでは不十分だったことを思い出そう。結果は(1)系統的であり、(2)検証可能でなければならない。
論文が難解すぎる、あるいは他の理由で読者に届かないということは十分あり得る。それは科学的洞察がないという意味ではない——読者は二度目、三度目の読解で系統化する方法を見つけるかもしれない。そうではなく、あなた個人がそのアイデアを自分のものとして取り込み、検証し、自分の世界モデルの改善に使えない、という意味だ。
この文脈での再現性は、結果の複製だけではない。科学的なアイデアを取り込み、自分の内的モデルに埋め込み、適応させ、その上に構築する——あるいは予測可能性を下げるから捨てる——能力である。
アイデアが再現可能でなければ、発見は拡張できない。したがって役に立たない。
「ソフトウェアモデル」を「数理モデル」に置き換える思考実験をすれば明快だ。物理学の論文が「我々の方程式は X を予測するが、数学は見せない」と言えば受け入れないのと同様に、方法を隠す(計算)科学も受け入れるべきではない。
どれだけの分野が足を引っ張られ、どれだけの人のキャリアがバグのあるプログラムのせいで狂わされたか。——Greg Wilson
ソフトウェアは現代科学のどこにでもある。新型コロナのモデルから検索アルゴリズム、実験プロトコルまで、あらゆるものが他人の作ったソフトウェアの上に成り立っている。研究者は忙しい。すべての依存を読み込んで正しさを検証し、実装の詳細を理解し、結果を無効にしうる誤りを確認するような手間はかけない。
そこから導かれるのは、科学の結果はソフトウェアに依存するということだ。ソフトウェアが誤っていれば、科学も誤っている。(ソフトウェアのバグはすでに多数の撤回を引き起こしている。例えばここ、ここ、ここ、そしてここのいくつか。)
これは悪いことではない。ある時点で私たちは必ず他人の仕事を信頼し依拠しなければならない。そのためには、ソフトウェアが信頼できる必要がある。
なぜオープンソースなのか
ソフトウェアは次の二つを満たす必要があると分かった。
- 再現可能であること。すなわち実行可能であり、かつ改変可能であること。
- 信頼できること。すなわち結果が一貫して信頼に足ること。
改変可能性が科学にとって重要なのは、方程式が科学予測にとって重要であるのと同じ理由だ。信頼性が決定的なのは、私たちが知識の系統的な改善を望んでおり、たまにしか働かない不安定で部分的な結果を望んでいないからだ。
これこそオープンソースソフトウェアが与えてくれるものだ。コードを変え、必要に合わせて改造でき(Hugging Face のモデルを思い浮かべればよい)、その上で反復して改善し続けられる。すでに数兆ドルの価値を生み出しており、伸びしろはさらにずっと大きい。
もちろん、オープンソースソフトウェアは万能薬ではない。知的財産やセキュリティの懸念があり、バグは今も起こりうるし、安定性が問題になることもある。だが少なくともその不完全さは公開の記録に載っている。科学的理解と同じように、修正し改善できる。その観点からすれば、オープンソースソフトウェアは科学的方法そのもの——ただシミュレーションの中で行われるものだと言える。
未来の科学への構想
これらの前提を受け入れるなら、こう問える。真に開かれた(計算)科学とはどんな姿か。
あらゆる結果が即座に再現可能。 新薬が症状を 30% 減らすと主張する論文を読んだとき、リンクをクリックすれば、まったく同じ分析がブラウザで走るのを見られる。データ処理、統計検定、可視化が、著者が使ったのと同じ環境で数秒で実行される——再現可能なコンテナによって完全に保存されたまま。
科学ソフトウェアがウィキペディアのように進化する。 気候モデルは単一の研究室で孤立して開発されるのではなく、世界中のコミュニティによって維持される。ケニアの研究者が大気乱流計算のバグを見つければ、修正は世界中の気候シミュレーションへ即座に伝播する。モデルは学術のサイロで停滞するのではなく、継続的に改善される。
発見の速度が加速する。 各研究者がゼロから作るのではなく、私たちは巨人の肩に立つ——その仕事は読めるだけでなく、実行でき、改変できる。科学的進歩は前例のない速度で複利成長する。
科学への信頼が強まる。 気候モデル、経済予測、医学的推奨が透明で監査可能なコードの上に築かれれば、公共の信頼が高まる。モデル自体が対話の一部になるから、科学コミュニケーションも改善する——結論だけでなく。
これはユートピア的空想ではない。部品はすべてすでに存在する——オープンソースコミュニティ、再現可能環境、協働開発プラットフォーム。あとはそれらを、デジタル時代の科学がどうあるべきかという一貫したビジョンへと形作るだけだ。
問いは、この未来が可能かどうかではない。問いは、どれだけ速くそれを築けるかだ。
では今、何を?
私は、コンピュータ化された世界で科学するためには、オープンソースソフトウェアが必要条件だと主張する。ソフトウェアは実行可能な数理モデルであり、もっと高い優先度を与えるべきだ。
まだやるべきことはある。以下があなたにできることだ。
- コードを共有し、記録する
- コードのない論文は科学性が弱い。洞察の上に構築しにくいからだ。理想の世界では、あらゆる主張は再現可能なコードで裏付けられるべきだ。初日からコードを使い、常に共有しよう。
- 安定したコードを書く、NixOS を使う
- コードは信頼でき、永続的に動くべきだ。そのためには依存と環境を一定に保つ必要がある。最良の方法は再現可能環境を使うことだ。NixOS は急速に最大かつ最良のツールになりつつある。100 年後でも、あなたのコードがまったく同じように動くことを保証する。Docker や Conda などもましだが、NixOS はより包括的な保証を与える。
- 自分で作るのではなく既存のツールの上に構築する
- 共通の科学知識基盤を改善するには、クロスプラットフォームのツールが要る。ニューロモルフィック計算のような小さい分野では特にそうだ——最近の Nature 論文も、スケールにはオープンソースソフトウェアが鍵だと指摘している。Open Neuromorphic のソフトウェアガイドを見て、自分の仕事に近いライブラリを探してみてほしい。
- ソフトウェアに取り組む研究者の昇進を後押しする
- コードの重要性を考えれば、学術的な昇進はソフトウェアの貢献を評価すべきだ。
科学革命が成功したのは、透明性、再現性、絶え間ない吟味にこだわったからだ。オープンソース運動はソフトウェアに対して同じ原則を体現しているが、やるべきことはまだずっと多い。
ソフトウェアを科学的にする手助けをしてくれるだろうか?