夜雨聆风学习资料网

ARTICLE · 1197071

Web2App v3 发布,支持 Linux,依然是全网最小的网页转桌面应用的工具

Web2App v3 发布,支持 Linux,依然是全网最小的网页转桌面应用的工具
     点击/上方的蓝字/关注我
🚀公众号后台复【布道者】查看最新AI技术学习路线🚀

Web2App 是我维护的一个开源小工具。给它一个网页 URL,它还你一个原生桌面应用,Windows 下是单文件 exe,Linux 下是原生 deb。

最近它发布了 v3,正式从 Windows 跨到了 Linux。借这个机会,想跟你聊聊它的架构、这次的变化,以及两件我自己做不完、需要社区帮忙的事。

先说一句它的老本行。到 v3 为止,它依然是市面上体积最小的 URL 转桌面应用工具。

打包器界面只有三个元素,URL 输入框、图标选择、打包按钮

01

它到底有多小

先看一组实测数字。

指标
实测
子应用(Windows 单文件 exe)
约 700 KB
子应用(Linux deb)
约 430 KB
打包器本体(master)
约 1.5 MB,单文件零外部依赖
冷启动
秒级
关闭残留
进程、WebView2 子进程、临时文件,零残留

做个对比。Electron 系方案的产物动辄上百 MB,Web2App 比它们小了两个数量级。

根本原因只有一条,不内嵌浏览器。Windows 复用系统自带的 WebView2,Win11 预装,微软官方维护。Linux 复用系统 WebKitGTK,装 deb 时 apt 会自动补齐依赖链。

02

架构,三个 crate 的克制设计

v3 是一个三 crate 的 workspace。tail-core 是纯逻辑层,child 是子应用运行时,master 是打包器,编译期把 child 模板整个内嵌进自己身体里,自身也是单文件分发。

三 crate 结构,产物就是 child 模板加一段 29 字节的尾部配置

几个设计决策值得展开说说。

结构性不可繁殖。写配置的能力被物理隔离在 master 里,child 的依赖图中不含任何写尾代码。产物在编译期就不具备再打包的能力,而不是靠删命令行参数之类的补丁式手段。CI 里有静态审计脚本机械守着这条边界。

尾部协议 v3。尾部帧带 CRC32 校验,被截断或篡改时,产物明确报「文件可能已损坏」,而不是静默错跑。JSON 手写转义,零 serde 依赖。

确定性关闭。实测 WebView2 的嵌套 COM 消息泵可能吞掉 WM_CLOSE,进程 30 秒以上不自退。v3 用 WNDPROC 哨兵加看门狗线程双层兜底,给出确定性的关闭上限。关闭即退出,零残留,不靠运气。

图标双通道。文件图标经 Windows UpdateResource API 注入 .rsrc 节,产物仍是单文件。窗口图标在编译期内嵌 256px PNG 默认值,用户选图则随尾部配置下发,两个平台行为统一。

干净的签名 hook。证书经环境变量传入,私钥永不内嵌二进制,兼容本地 signtool 与远程签名服务。签名被定位为业务运营问题,而不是架构职责。

03

v3 的变化,Linux 来了

最大的变化是 Linux。

产物是原生 deb,只有约 430 KB。Depends 声明完整依赖链,sudo apt install ./example.com.deb 一条命令装完,应用菜单里出现带自定义图标的启动项,卸载同样一条命令。装、用、卸,一条命令链。

目标生态是 deepin、UOS、openKylin、麒麟这些国产桌面操作系统,以及 Ubuntu 和 Debian 全系。

Linux 下的打包器界面,与 Windows 同一套体验

为了这一步,平台层抽出了 #[cfg] 同名同签名的 platform 外壳模块,数据目录、关闭兜底、打包平台项都收在里面。新平台接入,接缝是干净的。

CI 也立了规矩。每个 release 必须同时给出 Windows 裸 exe、Linux 打包器本体,以及 SHA256SUMS 校验值,GitHub Actions 全自动。质量门禁在两个平台同口径执行,单元测试、clippy 零告警、端到端断言,一个不少。

04

两件事,需要社区发力

说实话,这两件事靠我一个人做不完。

其他 Linux 包格式。deb 只覆盖了 Debian 系,但 Linux 生态不止于此。rpm(Fedora、openSUSE)、AppImage、AUR,欢迎基于现有 platform 抽象贡献对应的打包后端。

macOS。.app 必须是 bundle 目录结构,与单文件承诺存在本质冲突,签名、公证、窗口行为也都需要真机验证。我没有 Mac 硬件,短期不会做。platform 外壳已经就位,欢迎有 Mac 的同学来接力。

Web2App 的信条是 UNIX 哲学。

做一件事,并做到极致。单文件、极致轻量、零依赖、零残留。

如果它对你有用,欢迎 Star,也欢迎转发推荐给需要的朋友。使用中遇到的任何问题、反馈与优化建议,都欢迎在 GitHub Issue 里告诉我,每一条我都会认真看。

项目地址,github.com/31i45/Web2App

🚀公众号后台复【布道者】查看最新AI技术学习路线🚀

相关学习资料