平台兼容与验证边界

August 10, 2026 · View on GitHub

English | 中文

SmartPerfetto 有四种分发 / runtime 家族;产品内部仍有更多具体入口。宿主系统、实际 运行系统和发布证据不能混为一谈: 例如 macOS 上的 Docker Desktop 仍运行 Linux container,交叉构建出的 Windows 归档也 不等于已经在 Windows 上启动验证。

入口推荐宿主 / targetCPU 架构边界runtime 是否随产物提供更新路径当前证据类别
Source Web (./start.sh)macOS、Linux;原生 Windows 开发使用 WSL2由 Node.js 24、Go 和当前原生依赖共同约束否;使用宿主 Node.js,并准备固定 trace processorGit 同步后重新启动source build、readiness 和项目门禁
npm CLI (smp)支持 Node.js 24 的 macOS、Linux、Windows shellLinux x64、macOS arm64、Windows x64 随包提供 trace processor;其他 host 按固定版本下载且可能不受支持CLI runtime 随 npm 包;不包含 Web launchernpm 安装新的明确版本npm pack contract + 空目录真实安装 smoke
Docker image任意可运行兼容 Linux container 的 Docker host;实际 runtime 是 Linux发布镜像为 linux/amd64linux/arm64是;镜像包含 Node、后端、提交版 UI 和固定 trace processor拉取明确 tag 后重建 containerimage build/health + 已发布 tag/manifest 验收
Portable archiveWindows 10 / Windows Server 2016 及以上 x64、macOS arm64 13.5+、Linux x64 glibc 2.34+;必须在匹配 target 上运行,不支持 Alpine 等 musl 系统每个归档只支持文件名和 manifest 声明的单一 target;Windows、macOS 最低系统版本写入 manifest,macOS 同时以包内 LSMinimumSystemVersion 为准是;包含 launcher、Node、原生依赖、后端、提交版 UI 和固定 trace processor下载新归档并按平台说明迁移/保留数据static package contract + 全 payload ELF/Mach-O 最低版本审计 + 匹配 target 的 exact-archive runtime smoke + GitHub release 验收

证据类别

  1. Packaged/static contract:验证版本、target、manifest、目录、固定依赖和静态签名。 这能发现错误归档,但不能证明目标系统能启动。
  2. Target-native runtime smoke:在归档声明的 OS/arch 上运行同一份最终字节,检查 127.0.0.1 health、包内 runtime、最小 trace processor 查询、受控退出和端口释放。
  3. Published-surface acceptance:在对应分发面核对不可变版本、远端 digest、tag/ manifest 或空目录安装等公开状态。它不能由本地构建结果替代。

任一层缺少证据时,只报告已完成的层级;Windows/Linux 交叉构建不能写成 Windows/Linux runtime smoke,Docker host 的操作系统也不能写成 container target。

Windows 用户操作以 Windows 指南 为准。当前公开 v1.4.0 的 Windows x64 最终归档已在 Windows Server 2025 runner 验证包内 runtime、health、 最小 trace processor 查询、退出和端口释放;这不等于 Windows 10/11 桌面、SmartScreen 或 Provider UI 已人工验收。后续归档门禁还要求实际加载 SQLite/sodium、运行本地 Provider 生命周期和 Windows DPAPI SecretStore probe;只有对应最终归档执行成功后才能计为证据。

网络绑定边界

Source Web 默认把前后端监听到 IPv4 loopback 127.0.0.1。若维护者确实需要暴露源码 前端,可显式设置 SMARTPERFETTO_FRONTEND_BIND_HOST;这会改变本机安全边界,不能仅 因为日志或访问 URL 仍使用 loopback 就假定服务未对外监听。Portable launcher 为避免把 本机 Provider 与 trace 数据意外暴露到网络,会把前后端监听固定为 127.0.0.1,不继承 ambient bind-host 变量。Docker 内部则显式使用 0.0.0.0,宿主暴露范围由 compose 的 publish host 控制,默认仍只发布到宿主 127.0.0.1

事实所有权

应用更新检查只报告可用版本和推荐动作,不会替换正在运行的源码、npm 包、Docker container 或 portable 目录。