当你构建隐私工具时,‘Offline-First’ 实际意味着什么
Source: Dev.to
对隐私导向的 PDF 工具而言,“offline‑first” 真正意味着什么
“offline‑first” 常被用来表示“在没有网络的情况下也能工作,重新连接后再同步”。
对于隐私导向的 PDF 应用,这一要求更为严格:应用必须在架构上无法将你的数据发送到任何地方——而不仅仅是通过配置禁止。
承诺不发送你的数据是一种政策承诺。目标是将在代码层面强制执行该承诺。
从 Rust 后端移除网络依赖
Rust 后端应当没有任何网络 crate。例如,Cargo.toml 可能如下所示:
# Cargo.toml — no network crates
[dependencies]
lopdf = "0.31"
aes-gcm = "0.10"
argon2 = "0.5"
image = "0.24"
notify = "6"
# reqwest is not here intentionally.如果依赖树中不存在网络 crate,二进制文件就无法发起 HTTP 请求,任何配置选项也无法启用不存在的功能。
检查传递性的网络 crate
即使你没有直接列出网络 crate,某个依赖可能会通过传递方式引入它。运行:
cargo tree | grep -E "reqwest|hyper|h2|rustls|native-tls"如果出现任何匹配项,追溯输出找到来源 crate 并禁用对应的特性。在上面的例子中,早期的一个依赖通过可选特性标志拉入了 hyper;移除该特性即可解决问题。
禁用 Tauri 内置的网络调用
Tauri 为更新检查和遥测会发起网络请求。要保持应用仅离线运行,需要同时禁用这两项:
{
"plugins": {
"updater": {
"active": false
}
}
}验证没有流量离开机器
使用网络监控工具(例如 macOS 上的 Little Snitch)确认在正常使用期间没有任何出站连接。
通过最小网络面进行许可证验证
一次性激活密钥检查仅在首次启动时进行。激活后,密钥会本地保存,且不再重新验证,从而允许离线用户无限期运行应用。这是该产品可接受的最小网络面。
为什么 “offline‑first” 很重要
大多数用户在需要打开高度敏感的文档——如医疗记录、法律合同、税表——之前并不会考虑网络行为。此时,“offline‑first” 不再是一个功能,而是他们选择该工具的核心理由。
Hiyoko PDF Vault – https://hiyokoko.gumroad.com/l/HiyokoPDFVault
@hiyoyok