ソフトウェア工学研究の日々

ソフトウェア工学の学術研究を紹介しています。ここではソースコードなどのプロダクトが研究の主役です。

ブロックチェーンを用いたソフトウェアビルドプロセスの記録

ソフトウェアの実行可能ファイル(いわゆるバイナリ)は、ソースコードさえあれば自由に作成することができます。プロの分析者であればバイナリに含まれた定数値などから元のソースコードをある程度は推定することができますが、多数のソースファイルのどれを組み合わせてバイナリを作ったかは、実際にビルドを実行した人以外にはわかりません。

ソフトウェアの実行可能ファイルをエンドユーザに提供するとき、「このファイルは、これらのソースファイル(といくつかのライブラリ)だけから作りました」と説明できるようになると、悪意あるコードの混入などのリスクを抑えらえるようになりますし、著作権の侵害などのトラブルにも対応しやすくなります。このコンセプトは "Reproducible Builds" として知られています。

Reproducible Builds — a set of software development practices that create an independently-verifiable path from source to binary code

ソフトウェア工学研究室では、このような取り組みを支援する技術の1つとして、ブロックチェーンを用いたビルドプロセスの記録に取り組んでいます。任意のコマンド(たとえば gcc のようなコンパイルの実行)の実行を監視し、読み書きしたファイルを記録することで、どのファイルが、どのファイルと関係があるかを記録することで、この目的を達成しようとしています。2019年1月の時点で、ビルドを監視するツールを試作し、ブロックチェーンに登録可能であることを確認した段階というところですが、構想には思ったより反響もあり、第25回ソフトウェア工学の基礎ワークショップ(FOSE 2018)では貢献賞(ショートペーパー部門)を受賞しました。以下はそのときの発表スライドです。

www.slideshare.net

ソースファイルと実行可能ファイルを結びつけることは、「その実行可能ファイルに使われたソースファイルに対する品質検査を確かに行った」というように、エンドユーザに提供されているソフトウェアの品質を説明していくためにも使えます。ソフトウェアにはバグが避けられませんが、開発者がその時点で行った様々な努力を証拠として記録することも、ソフトウェアに起因するトラブルの解消や原因の理解、再発の防止において重要な課題であると考えています。