Что это?
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.
Which topics is it in?
nix, http-server, web-server, arxiv, binary-analysis, low-level, systems-programming, academic-research, reverse-engineering, sqlite, database, research