← semua berita

Executable Linux yang sebenarnya sebuah database SQLite

Engineering · · · sumber (fzakaria.com)

Farid Zakaria membuat proof of concept yang bisa berjalan: sebuah program Linux disimpan di dalam database SQLite lalu dijalankan langsung. Ia menamainya SELF, singkatan dari Structured Executable and Linkable Format, plesetan dari ELF, format binary standar di Linux. Argumennya, ELF sebenarnya sudah menjadi database yang enggan mengakui dirinya: ia menciptakan ulang tabel string, indeks, dan referensi silang yang sudah disediakan gratis oleh database sungguhan. Maka ia memindahkan semuanya ke tabel SQLite. Segmen program menjadi BLOB di tabel segments, simbol masuk ke satu tabel terindeks, dan sebuah interpreter kecil membaca database, memetakan kode ke memori, lalu melompat ke titik masuk program. Mekanisme binfmt_misc di Linux membuat kernel mengenali file ini dan menjalankannya seperti binary biasa.

Sisi praktisnya lebih menarik dari sekadar trik. Karena ini database, strip cukup menjadi satu transaksi dan menyunting binary cukup dengan pernyataan UPDATE. Mengemas 723 executable dan 400 library ke dalam satu file menghasilkan 611,9 MiB, lebih kecil dari 644,4 MiB file ELF aslinya, karena bagian yang dipakai bersama hanya disimpan sekali. Biayanya sekitar 5 milidetik overhead tetap per peluncuran dan hilangnya berbagi memori antarproses yang biasa didapat ELF dari mmap. Zakaria menyebutnya eksploratif, belum siap produksi, dan konversi bolak-balik antara ELF dan SELF berjalan tanpa kehilangan data. Tulisan lengkapnya tersedia, dan kodenya ada di GitHub.

Kenapa ini penting

Jika Anda menggarap build system, packaging, atau analisis binary, ide ini memandang executable sebagai sesuatu yang bisa Anda kueri dan sunting dengan SQL, bukan blob yang kaku. Bukan alat untuk dipakai besok, tapi contoh bersih tentang memperlakukan format lama sebagai data biasa, layak dilihat sebelum Anda menulis parser ELF sendiri lagi.

SQLiteLinuxSystems