Skip to content

ROADMAP

anan edited this page Aug 18, 2026 · 3 revisions

PyFly 终极路线图

唯一真源(single source of truth):本文件是所有阶段(L/R/P/S)的唯一整合视图。 实施细节见各专项文档,本文件只负责总览、阶段编排、验收标准与优先级决策。 专项文档:Plan.md(语言实现)、方案.md(语言设计)、docs/长期规划.md(L0-L5 生态)、 docs/Rust迁移方案.md(R0-R5 核心迁移)、docs/CLI-Rust转型方案.md(P0-P6 CLI 迁移)、 docs/THREAT-MODEL.md(威胁模型与边界)、docs/安全测试报告.md、docs/沙箱白皮书.md。


1. 现状盘点(2026-08)

域 条目 状态
语言 8 关键字(safe/only/lock/mask/cage/guard/seal/trace) ✅ P0-P7 全部落地
语言 污点引擎(R1-R5)、escape 全局扫描、运行时注入(guard/only/seal/trace/cage 节) ✅
语言 进程级沙箱 fly-sandbox(Linux=ns+Landlock+seccomp;macOS=Seatbelt;Windows=Job Object) ✅ 三平台原生实现(v0.6.5)
CLI 全 Rust(P0-P6 完全交付,cmd/fly 退役):build/run/check/sandbox/version/error/update/lsp + fmt/analyze ✅
Rust lexer(R0/R1)、ast、parser、checkd 客户端、错误渲染 format、gen、typeinfer ✅
工程 VSCode 插件(LSP)、npm 包、GitHub Actions 发布链、自更新 ✅
质量 testdata 反例 52+、golden、checker 单测、fuzz(lexer/parser/compile/checker) ✅
安全 威胁模型、边界清单 B1-B8、外部评估回应(THREAT-MODEL §9/§10)、逃逸面 E1-E14 枚举 ✅ 2026-08 两次审计落地

已填缺口(2026-08):G3 签名 ✅、G5 fuzz+红队 ✅、G2 交互矩阵 ✅、G4 审计注释 ✅、 G7 类型生态澄清 ✅、G1 wrapper 试点 ✅(S6,requests)。G6 错误信息迭代(S7)随 L0 P6 推进。

已填缺口(2026-08 二轮审查,13 项):only 块 dunder __import__ 逃逸修复(E14,运行时特判 + 编译期 onlyDeny∪escapeModules 联合 + __builtins__ 纳入)、needs_guard 递归 only/trace/cage、 aug_assign 单次求值(Go/Rust 双修 + golden 重生成)、fmt not in 空格、checkArgs *args 误报、 propagateTaint 基符号、analyze 评分边界、lexer 省略号列号、http 相对重定向 scheme + 拒绝明文降级、 LSP 单一 debounce 线程、prelude cage ctypes 投递、refCollector 参数默认值;fuzz 追加 FuzzCheckSource。

1.1 待收尾清单(2026-08 不完备性报告,未决项)

# 条目 类型 状态
W1 win/mac 无 OS 级沙箱(空壳 exit 2) 平台 ✅ v0.6.5:macOS=Seatbelt(sandbox-exec SBPL:禁网/限文件写/内存CPU上限),Windows=Job Object(kill-on-close+内存/时间/进程上限),强度声明入 README 平台表
W2 发布链依赖人工 secret:SIGN_PRIVATE_KEY/VSCE_PAT/NPM_TOKEN 未配即静默跳过 → fly update 无 .sig 自断链 发布 🔲 CI 显性告警;PR 门禁 CI(当前仅 tag 触发 release.yml)
W3 安全核心(escape/taint/only/guard 拦截逻辑)无专项 fuzz 质量 🔲 补 fuzz 目标
W4 错误码双真源(errors.go ↔ errorinfo.rs)靠人工同步 质量 🔲 CI 一致性校验
W5 Wasm 沙箱 fly-sandbox 架构 ✅ 已决(2026-08):删除 Wasm 原型,单沙箱主线(进程级:Linux=ns+Landlock+seccomp,win/mac=平台原生隔离)
W6 高频语法暂不支持(with/推导式/字典解包),兼容度 74% 生态 ✅ 已决(2026-08):暂不实现,写入 docs/compat.md(报错 E0004/E0008/E0009 + workaround),74% 接受
W7 第三方库 wrapper:requests 之后补 sqlalchemy 生态 ✅ v0.6.6:sqlalchemy 可用——text() 汇点编译期拦截(taint.go)+ _FLY_SB_ALLOWED_MODS 白名单 + execute 通用汇点;文档与反例锁定(checker_test TestTaintIOSources)
W8 改名撞车(fly-lang/fly) 品牌 ✅ 已决(2026-08):不改名——品牌完全即 PyFly(repo PyFly-lang、产物 fly、npm fly-lang),撞车风险接受并记录风险表
W9 Go(checker/沙箱)+ Rust(CLI)双实现并存,语义漂移风险靠 golden 对比兜底 维护 持续(D1/D6 已定,checker 留 Go)

2. 阶段总览(统一时间线)

现状 ──L0──► v0.3.0(基线收尾)──L1──► v1.0.0(Rust 全量)✅ 2026-08 达成(实际 v0.6.4)
   └───── S 系列安全专项(S1-S6,随阶段插入,S2/S3 优先)──────┐
v1.0.0 ──L2──► v1.1(工具链自举)──L3──► v2.0(自举编译器闭环)
   ──L4──► v2.x(开放协作)──L5──► v3.0(生态与治理)

L0 基线收尾(→ v0.3.0)

任务 说明 验收
P6 打磨 golden 全量覆盖、错误消息快照、边界用例(闭包/嵌套/f-string 内 mask) ✅ 已交付
行为测试接入 CI 生成 .py 由 python3 实跑 ✅ 已交付(release.yml python 3.10-3.14 矩阵)
S1 边界文档 THREAT-MODEL §9/§10(本文件)+ README 安全边界声明 ✅ 已交付

S 系列安全专项(插队规则:S2/S3 优先,不阻塞 L1)

条目 任务 优先级 验收
S2 fly update 产物签名(ed25519,零第三方)+ 校验,失败拒绝安装 🔴 高 ✅ 已交付:tools/sign + verify.go + release.yml 签名步骤 + 5 单测(正签/篡改/缺签/换钥/--insecure)
S3 Go fuzz(parser/checker)+ 逃逸红队回归 🔴 高 ✅ 已交付:3 个 fuzz 目标(lexer/parser/compile,seed=testdata 全量),修复 3 个 parser panic;redteam_test.go 19 项对抗回归,新增属性赋值污点传播,B7 确认不可达
S4 8 关键字交互矩阵文档 + 表驱动组合测试 🟡 中 ✅ 已交付:docs/关键字交互矩阵.md + interaction_test.go 22 组合
S5 可选 --keep-annotations:产物保留安全标记注释(审计/复盘) 🟡 中 ✅ 已交付:fly build --keep-annotations,6 类注解(safe/mask/lock/guard/only/seal/trace/cage)
S6 第三方库 wrapper 试点(requests/sqlalchemy 任一) 🟢 低 ✅ 已交付:requests 受控包装(examples/third_party/safe_http.fly + docs/第三方库安全包装.md);修复 guard 消息字符串转义 bug;运行时白名单与编译期 taint 源点一致化(allow_requests_s6 防漂移测试)
S7 错误信息用户测试迭代(G6) 持续 🔲 随 P6 消息快照推进

S2 待用户操作:~/.fly-sign/priv.pem(本次生成)内容配置到 GitHub Actions secret SIGN_PRIVATE_KEY,否则 CI 跳过签名(无 .sig 时 fly update 默认拒绝安装)。

L1 Rust 迁移(→ v1.0.0)✅ 2026-08 全部完成(实际版本 v0.6.4)

阶段 内容 状态
R0/R1 lexer(token/缩进/字符串) ✅
R1.5 ast + parser(1322 行翻译) ✅
P1/P2 version/help/error + check(checkd 桥接,零差异) ✅
R2 gen + 运行时注入(only/seal/trace/cage/runtime/sandbox 节) ✅
P3 fly build / fly run(checkd 复用,golden 逐字节一致) ✅
R3 checker 语义子集自举(可选,checker 留 Go 为 D6 默认) 🔲 可选(D1/D6 决策:checker 留 Go)
P4 fly update(签名先行,见 S2)/ fly lsp ✅
R4 compile 管线整合、错误聚合 20 条上限 ✅(checkd 侧)
P5 fly sandbox(决策 B:fly-sandboxd 二进制桥接) ✅
R5/P6 切换与退役:release.yml 切 Rust 构建,产物命名不变,AGENTS.md/README 更新 ✅(b147c25:cmd/fly 退役 + fmt/analyze 迁 Rust + 三二进制打包)

验收:v1.0.0 与 Go 版 CLI diff 零差异;单静态二进制(<3MB);VSCode/CI/update 契约零改动。已达成(golden 双端逐字节一致 + LSP full_session 集成 + update 实测全链路)。

L2 工具链自举(→ v1.1)← 当前主线

  • fly fmt(AST 驱动,注释保留,用 Fly 编写,Rust 壳调用)
  • fly doc(docstring → Markdown)、fly test(目录级测试运行器)
  • Neovim/JetBrains LSP 客户端配置
  • 验收:fly fmt 格式化自身源码后 golden 无差异(dogfooding 自证)
  • 前置:§1.1 W2-W4 收尾(CI 门禁、安全 fuzz、错误码校验)随 L2 并行(W1/W5 已于 v0.6.5 完成)

L3 自举编译器(→ v2.0)

  • gen 发射器用 Fly 重写(参考实现,D-1 双实现互证)
  • 前端 flyc.fly 自编译闭环:fly build flyc.fly → python3 flyc.py 编译任意 .fly
  • 验收:Fly 写的编译器能编译自身并产出可运行 .py

L4 开放协作(→ v2.x)

  • RFC 流程、CHANGELOG 自动生成、文档站(GitHub Pages + docsify,D-3)、playground
  • 安全评审清单 + 漏洞披露流程
  • 验收:外部贡献者 PR 全流程无维护者人工干预

L5 生态与治理(→ v3.0)

  • 标准库/包管理寄生 Python(pip/PyPI 复用,无自研 registry)
  • 合规行业试点(金融/医疗/政务)与合规报告模板
  • 成功指标:示例库 10+、外部贡献 PR ≥ 1(自 L4 持续)

3. 关键决策(已定,勿反复)

# 决策 结论
D1 checker 是否迁移 Rust 留 Go(D6),走 checkd 桥接;R3 可选自举
D2 工具语言 用 Fly 写 fmt/doc/test(自举优先),Rust 壳调用
D3 文档站 GitHub Pages + docsify(零成本)
D4 自举编译器形态 编译为 .py 由 python3 跑(无引导问题)
D5 sandbox 迁移 决策 B:保留 Go 实现,fly-sandboxd 二进制桥接(安全关键代码不重写)
D6 包管理 寄生 Python(pip/PyPI),无自研 registry、无 flyx 包

4. 风险

风险 等级 缓解
安全保证被"改写产物"绕过(THREAT-MODEL §9.1) 高 文档诚实声明 + 编译期零残留关键字为不可篡改层
S2/S3 拖延导致信任链缺口 高 插队规则:S2/S3 优先于 L1 功能
win/mac 沙箱承诺与实现不符(W1) 高 ✅ 已解除(v0.6.5):macOS Seatbelt / Windows Job Object 真实实现,强度声明入 README
发布 secret 未配 → update 断链 / 发布静默缺件(W2) 高 §1.1 W2:CI 显性告警 + PR 门禁 CI
双实现(Go checker/Rust CLI)语义漂移 中 golden 逐字节对比 + LSP full_session 集成 + fuzz(W3/W9)
Rust 迁移与工具链并行冲突 中 ✅ 已解除:L1 已达成,L2 串行开始
自举版漂移 中 golden diff + 双实现互证
改名撞车(fly 名称已被占用) 中 ✅ 已决(2026-08,W8):不改名——品牌完全即 PyFly,撞车风险接受(产物 fly/npm fly-lang 维持),用户安装走 fly update 官方渠道
单人维护精力 低 全自动 CI/发布 + RFC 流程

5. 成功指标

  • ✅ v0.3.0(2026-08 达成,实际 v0.6.4):8 关键字全落地 + S1-S3 完成(签名 + fuzz 就位)
  • ✅ v1.0.0(2026-08 达成):Rust CLI 全量零差异(golden 逐字节 + full_session 集成),update 签名验证上线
  • 🔲 v1.1:fly fmt 自举(dogfooding 闭环)(W1-W4 已于 v0.6.5 收尾)
  • 🔲 v2.0:自举编译器 flyc 闭环
  • 🔲 v2.x+:示例库 10+、外部贡献 PR ≥ 1、合规试点 ≥ 1

6. 版本时间线速览

✅ v0.3.0-v0.6.4 ──── L0 + S1-S3 + L1(Rust 全量,2026-08 达成)
🔲 v1.1   ──── L2(工具链自举)
🔲 v2.0   ──── L3(自举编译器 flyc)
🔲 v2.x   ──── L4(开放协作)
🔲 v3.0   ──── L5(生态与治理)

Clone this wiki locally