selfdb README

The project's README from github.com/fzakaria/selfdb. As one markdown file: README.md.

selfdb

SELF — the Structured Executable & Linkable Format: a program that is a SQLite database instead of an ELF file, and the machinery to actually run it on Linux/NixOS.

sqlelf (arXiv:2405.03883) put a SQL view over ELF. This project inverts it: the rows are the format, a binfmt_misc interpreter executes them, and nixpkgs/NixOS is the vehicle to run a real slice of a system on it.

$ file hello
hello: SQLite 3.x database, application id 0x53454c46, user version 1
$ ./hello
Hello, world!
$ sqlite3 hello 'SELECT soname FROM ldd'          # ldd, as a query
$ sqlite3 hello 'DELETE FROM sections; VACUUM'    # strip, as a transaction
$ ./hello                                         # still runs
Hello, world!

What's here

Read DESIGN.md; §13 tracks implementation status.

Try it

$ nix develop                        # dev shell (converter + loader + tools)
$ nix develop -c bash tests/all.sh   # run M0..M3b end to end
$ nix develop -c bash tests/showcase.sh
$ nix run .#self-vm                  # a NixOS VM where ./hello.self just runs
                                     # (login: root, empty password)

$ bash examples/server/build.sh ./server   # a website, inserted into a program
$ loader/self-exec ./server 8080           # http://localhost:8080

selfdb (fzakaria/selfdb)

Searching Database…

572 ·GitHub
Что это?selfdb (SELF, Structured Executable & Linkable Format) делает программу буквально базой данных SQLite вместо ELF-бинарника, плюс механизм загрузчика, чтобы эту базу можно было реально исполнять на Linux/NixOS.
Это библиотека или файловый формат со своим тулчейном?Это кастомный исполняемый формат файлов (строки в SQLite-БД заменяют ELF-секции) с конвертером, интерпретатором binfmt_misc в ядре для его запуска и Nix-упаковкой для развёртывания.
Как попробовать сконвертировать и запустить файл .self?Используйте CLI self (или elf2self/self2elf напрямую) в converter/, чтобы превратить ELF-бинарник в SQLite-файл .self, затем полагайтесь на интерпретатор self-exec binfmt_misc в loader/ (устанавливается через Nix-пакеты/NixOS-модуль) для его исполнения.
Нужны ли Nix или NixOS для запуска?Да — проект построен вокруг nixpkgs/NixOS: он поставляет Nix-пакеты, хук selfify и NixOS-модуль (programs.self) для регистрации binfmt-интерпретатора и запуска реального системного среза в виде файлов .self.
Все ли режимы исполнения (memfd, native, selfld) полностью работают?Статус реализации отслеживается отдельно в дизайн-документе, из чего следует, что некоторые из трёх режимов загрузчика проработаны лучше других.
Работает ли это где-либо кроме Linux/NixOS?Нет, он привязан к механизму binfmt_misc в Linux, к экосистеме Nix для упаковки и к NixOS-модулю, поэтому работает только там.
Что такое self-httpd?Пример сервера в examples/server/, у которого страницы, программа и журнал посетителей живут в одном файле .self: он открывает argv[0] как базу данных и раздаёт ответы из собственной таблицы маршрутов, так что правка живого сайта — это буквально SQL UPDATE.
Зачем выворачивать ELF в базу данных, вместо того чтобы просто использовать ELF?Идея вдохновлена sqlelf (arXiv:2405.03883), который надстроил SQL-представление над ELF; selfdb выворачивает её: SQL-строки и есть сам формат, исполняемый через интерпретатор binfmt_misc.
Что делает libself-audit.so?Это библиотека LDAUDIT, позволяющая стоковой glibc загружать разделяемые библиотеки .self, разрешая их символы через SQL-запросы вместо обычного динамического связывания ELF.
Где определён сам формат?DDL схемы SQLite для .self лежит в schema/self.sql и генерируется из selfconv/schema.py.
What are similar projects?wcdb-key-tool, h2o, XRAG, ANE, Tinyhttpd, pwndbg, wikiskill, re4
Creator
fzakaria
Size
0.1 MB
Stars
572
Updated
CommitSep 24
Age
1mo
Commits · 90 Days