Python · 项目报告

fzakaria/selfdb

该仓库暂未提供 GitHub 项目描述。

已完成 打开 GitHub
F
316星标
7Fork
3Issue
未知许可证

分析结果

项目分析

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