selfdb
SELF——结构化可执行与可链接格式:一个程序,它是 SQLite 数据库而不是 ELF 文件,并具备在 Linux/NixOS 上实际运行它的机制。
sqlelf(arXiv:2405.03883)在 ELF 之上提供了 SQL 视图。本项目将其反转:数据行就是格式本身,一个 binfmt_misc 解释器执行它们,而 nixpkgs/NixOS 则是承载其真实系统片段的载体。
$ file hello
hello: SQLite 3.x database, application id 0x53454c46, user version 1
$ ./hello
Hello, world!
$ sqlite3 hello 'SELECT soname FROM ldd' # ldd,作为查询
$ sqlite3 hello 'DELETE FROM sections; VACUUM' # strip,作为事务
$ ./hello # 仍然运行
Hello, world!
项目内容
converter/—elf2self、self2elf以及self命令行工具(Python + LIEF)。loader/—self-exec,binfmt 解释器,具有三种模式:memfd(重建 ELF →execveat)、native(映射段 + 移交给 ld.so)、selfld(充当动态链接器,通过 SQL 绑定)。此外还有libself-audit.so,一个LD_AUDIT库,使标准 glibc 能够加载通过 SQL 解析的.self共享库。nix/— 软件包、一个selfifyhook、一个 NixOS 模块(programs.self)以及self-vm。schema/self.sql— 格式 DDL(由selfconv/schema.py生成)。bench/、tests/— 评估测试框架与 M0–M3b 测试套件。
阅读 DESIGN.md;§13 跟踪实现状态。
尝试运行
$ nix develop # 开发环境(转换器 + 加载器 + 工具)
$ nix develop -c bash tests/all.sh # 端到端运行 M0..M3b
$ nix develop -c bash tests/showcase.sh
$ nix run .#self-vm # 一个 NixOS 虚拟机,其中 ./hello.self 直接运行
# (登录:root,空密码)