ESC
开源 1 分钟阅读

selfdb:将SQLite数据库作为可执行文件格式

selfdb 提出了一种名为 SELF(Structured Executable & Linkable Format)的格式,让程序本身是一个 SQLite 数据库而不是 ELF 文件,并提供了在 Linux/NixOS 上运行它的机制。它反转了 sqlelf 的思路,让数据行成为格式本身,通过 binfmt_misc 解释器执行,并借助 nixpkgs/NixOS 运行真实系统。项目包含转换工

来源:GitHub

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/ — 软件包、一个 selfify hook、一个 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,空密码)