selfdb 是一个实验性系统项目,提出 SELF(Structured Executable & Linkable Format):把可执行程序表示为 SQLite 数据库,而不是传统 ELF 文件,并通过 Linux binfmt_misc、Nix/NixOS、动态加载器等机制让这种“数据库即程序”的文件可以直接执行。项目包含 ELF 与 SELF 的相互转换工具、运行时加载器、NixOS 集成、示例 Web 服务器、测试与基准工具。它更像是操作系统、可执行文件格式、动态链接和软件供应链方向的研究原型,而不是普通应用框架。
适用领域
操作系统 / Linux 可执行文件格式 / ELF / 动态链接 / SQLite 数据库 / Nix / NixOS / 程序加载器 / 软件打包与分发 / 系统安全研究 / 编程语言与运行时实验 / 可观测软件供应链
配置难度
高。该项目要求使用者理解 Linux 可执行文件、ELF、动态链接、SQLite、Python 工具链、Nix/NixOS 和系统调用等知识。普通 Python 开发者可以运行示例,但要真正理解和扩展 converter、loader 或 selfld,需要较强的系统编程背景。
商业价值
短期商业落地价值较低,更适合作为研究原型、技术演示、教学工具或底层系统创新探索。中长期看,它在可查询二进制、软件供应链审计、可复现构建、程序元数据管理、数据库化软件分发等方向有潜在启发意义。但由于标准化、兼容性、安全性和生态成熟度不足,目前不建议作为生产级执行格式或商业基础设施直接采用。
01
技术亮点
- 概念非常新颖:把可执行文件格式反转为 SQLite 数据库,使程序结构天然可查询、可事务化修改。
- 不只是静态格式转换,还实现了实际执行路径,包括 memfd、native、selfld 三种 loader 模式。
- 与 Nix/NixOS 深度结合,便于构建可复现实验环境和系统级演示。
- 提供 self-httpd 示例,展示程序、网页内容、访问日志存储于同一个可执行 SQLite 文件中。
- 可用 SQL 实现类似 ldd、strip 等传统二进制工具的一部分能力。
- 覆盖从格式 schema、转换器、加载器、NixOS 模块到测试/基准的一整套原型系统。
- 对系统软件、软件供应链、可查询二进制格式研究有较高启发价值。
02
目标用户
- 研究 ELF、动态链接器、加载器和 Linux ABI 的系统开发者
- 对 Nix/NixOS、可复现构建和软件打包感兴趣的开发者
- 操作系统、编译器、二进制分析方向的研究人员或学生
- 想探索“程序即数据库”“可查询二进制格式”的开发者
- 安全研究人员、逆向工程师、软件供应链工具开发者
- 希望了解 binfmt_misc、execveat、LD_AUDIT、memfd 等 Linux 机制的工程师
03
配置要求
- 需要 Linux 环境;项目依赖 Linux 的 binfmt_misc、execveat、memfd、动态链接器等机制。
- 推荐使用 Nix 或 NixOS;仓库提供 nix/ 包、selfify hook、NixOS module 和 self-vm。
- converter 部分使用 Python 与 LIEF,用于 elf2self、self2elf 和 self CLI。
- 如果希望 SELF 文件可直接执行,需要配置 binfmt_misc 或使用项目提供的 NixOS module programs.self。
- 如果使用 loader/self-exec 手动执行,则不一定需要全局注册 binfmt_misc。
- 运行 stock glibc 加载 .self 共享库相关功能需要使用 libself-audit.so 和 LD_AUDIT 机制。
- 部分功能属于实验实现,可能依赖特定 Linux/glibc/Nixpkgs 版本;建议优先使用仓库提供的 Nix dev shell 或 self-vm。
04
适用场景
- 将 ELF 可执行文件转换为 SQLite 数据库形式的 SELF 文件,并仍然可以在 Linux 上运行
- 通过 SQL 查询程序结构,例如依赖库、section、segment、符号等信息
- 通过 SQL 事务修改程序内容,例如类似 strip 的操作可以表现为删除数据库表记录
- 实验自定义 Linux binfmt_misc 解释器,让 .self 文件像普通可执行文件一样执行
- 研究动态链接器的替代实现,包括通过 SQL 解析依赖和绑定符号
- 构建一个程序、内容和运行日志都存储在自身 SQLite 文件中的示例 Web 服务器
- 在 NixOS VM 中测试 SELF 程序的系统级执行环境
- 用于教学或论文复现实验,展示 ELF 与数据库模型之间的转换和执行
05
部署与配置
- 安装 Nix,推荐在 Linux 或 NixOS 环境中使用;项目明显依赖 Nix 开发环境。
- 克隆仓库:git clone https://github.com/fzakaria/selfdb.git && cd selfdb
- 进入开发环境:nix develop
- 运行端到端测试:nix develop -c bash tests/all.sh
- 运行展示脚本:nix develop -c bash tests/showcase.sh
- 启动 SELF 支持的 NixOS 虚拟机:nix run .#self-vm,登录用户为 root,密码为空。
- 构建示例服务器:bash examples/server/build.sh ./server
- 运行示例服务器:loader/self-exec ./server 8080,然后访问 http://localhost:8080
06
风险与注意事项
- 项目高度实验性,不适合直接用于生产环境。
- 依赖 Linux/NixOS 特性较多,跨平台可用性很弱,macOS 和 Windows 基本不适用。
- 可执行文件加载、动态链接和 ABI 兼容性非常复杂,遇到边界情况的概率较高。
- README 中未声明 license,商业或开源二次使用前需要确认许可证风险。
- stars 316、forks 7,说明关注度不错但生态仍小,社区支持有限。
- 安全风险需要谨慎评估:把程序作为可变数据库存储,虽然灵活,但也可能带来篡改、完整性校验、执行可信度等问题。
- 依赖 LIEF、glibc、binfmt_misc、LD_AUDIT、Nixpkgs 等组件,调试门槛较高。
- SELF 格式和工具链不是行业标准,与现有调试器、打包器、安全扫描工具的兼容性有限。
2026-08-26
第22名
新收录 · github_search