実行可能ファイルはSQLiteデータベースである:SELFフォーマットの提案
Executable Is a SQLite Database
この記事では、ELF実行可能ファイルフォーマットをSQLiteデータベースに置き換える「SELF」(Structured Executable & Linkable Format)という新しいフォーマットが提案されている。ELFは本質的にデータベースであり、多くのデータベースプリミティブを手作業で実装しているという認識から、SQLiteの自己記述的で拡張可能な性質を利用するアイデアが生まれた。SELFフォーマットでは、実行に必要なメタデータやセグメント情報をSQLiteのテーブルに格納し、`segments`テーブルにロードイメージのバイト列を、`symbols`テーブルにシンボル情報を格納する。これにより、`ldd`や`nm`のようなELF解析ツールはSQLクエリに置き換えられ、`strip`のようなファイル変更操作はトランザクションとして実行可能になる。SELFファイルは、SQLiteのアプリケーションIDフィールドに「SELF」を格納することで識別され、`binfmt_misc`を通じてNixOSなどのシステムでネイティブに実行できるようになる。また、動的リンクもSQLクエリを通じて処理され、`ld.so`の代替となる`self-ld`や`glibc`の`rtld-audit`インターフェースを利用する監査ライブラリが開発されている。サイズ面ではELFの約2倍になるが、デバッグ情報などを削除することでELFに迫るサイズになる。ベンチマークでは、SQLiteのオープンとページ読み込みに固定オーバーヘッドがあるものの、多数の依存関係を持つプログラムではELFよりも高速になる場合がある。さらに、SELFはプログラムとその依存関係を単一のデータベースファイルにまとめる「クロージャ」としても機能し、多数の実行可能ファイルと共有ライブラリを単一のユーザーランドデータベースに統合することも可能である。この統合により、ファイルサイズは個々のファイルの合計よりも小さくなり、ライブラリやシンボルの重複排除が自然に実現される。このフォーマットは、Nixのようなシステムと組み合わせることで、既存の制約にとらわれず、実行可能ファイルフォーマットの根本的な見直しを可能にするとしている。
- ELF実行可能ファイルフォーマットをSQLiteデータベースに置き換える「SELF」フォーマットが提案された
- SELFはbinfmt_miscを通じてNixOSなどのシステムでネイティブ実行可能であり、動的リンクもSQLクエリで処理される
- プログラムと依存関係を単一のデータベースファイルにまとめるクロージャとして機能し、ファイルサイズは個別ファイル合計より小さくなる
本記事は実行可能ファイルフォーマットの根本的な再設計を提案する技術的アイデアであり、現時点では概念実証段階の提案に過ぎない。投資判断に直結する具体的な商業的事象(調達、製品化、企業の発表など)は含まれておらず、将来的なシステムソフトウェア設計のトレンドを示唆する内容として注視すべきだが、現時点での投資機会には直結していない。