• 请不要在回答技术问题时复制粘贴 AI 生成的内容
soleilune
V2EX  ›  程序员

用 Tauri 写运维软件很好,但是? ——OxideTerm 开发小记

  •  1
     
  •   soleilune · 24 days ago · 2143 views

    OxideTerm 是一款我开发的免费开源的运维软件,具备 SSH 、SFTP 、端口转发、文件编辑、serial 、telnet 等功能。

    GPUI 是 Zed 编辑器团队开源的 Rust 原生 UI 框架,直接用 Rust 构建桌面界面,不依赖浏览器 WebView 。最近在做 OxideTerm 的 GPUI 版本,顺便回头看了一下之前用 Tauri 的过程。我们最早用 Tauri 起步,就是因为它真的很适合快速做桌面端:前端生态成熟,Rust 后端也好用,包体积小,看起来也比 Electron 清爽很多。But at what cost ?

    welcome

    Tauri 一开始真的很香。包小、Rust 后端、前端生态成熟,看起来像是 Electron 的完美替代品。 但 OxideTerm 做到后面,我越来越觉得:它解决了 Electron 最显眼的问题,却把很多复杂度转移到了更难受的地方。

    包体积是小了,WebView 还在;后端是 Rust 了,状态却被切成前后端两份;你以为自己在写原生应用,最后还是在给 IPC 、WebView 、Linux WebKitGTK 兜底。

    前后端分离,双份事实容易相互污染

    举几个实际例子:连接在后端,但是断连又要前端抓,重连、断线、任务取消、错误恢复,最后很多任务都要跨 IPC 来回同步,做久了发现容易两边都不完整。

    很多东西放 Rust 后端很怪,因为它需要知道前面在干什么;放前端也很怪,因为它本质上又是连接、协议、系统资源。最后就变成前端一份状态,后端一份状态,中间一堆事件、命令、回调、序列化、反序列化。搞不好就是两份事实相互污染。说难听点,复杂到一定程度,可能反而不如 Electron 那种“大家都在一个 JS 世界里”的感觉。

    WebView 还在,可能省不了太多内存

    Tauri 包体积小是真的,启动也不错。但运行时还是 WebView 。UI 一复杂,多标签、多会话、终端输出、编辑器这些堆上来,内存并不会因为用了 Tauri 就突然消失(就例如 xterm.js)。Rust 后端确实香,高并发、协议、文件、网络这些都很舒服。问题是它和前端中间还隔着 IPC ,也会不如纯血 rust 性能好。

    普通控制信号没什么问题。但终端输出日志流、输入事件这些一高频,JSON 通信就开始碍事。我们后来有些地方就是靠 WebSocket 绕开默认 IPC 。绕到最后就会想:那我当初为什么要这样?

    OxideTerm tauri 截图 1 (图为 tauri 版本空载内存,所有进程相加约 350 MB )。

    OxideTerm GPUI 截图 1 ( GPUI 版本 几乎只剩下三分之一,原生软件恐怖如斯)

    Linux WebView 的坑

    Windows 和 macOS 还好,Linux 上会被发行版、桌面环境、WebKitGTK 版本、输入法、字体、GPU 等轮流教育。这不完全是 Tauri 的锅,底层 WebView 差异就在那。但用户不会管这些,最后还是应用自己兜底。

    所以我现在的感觉如果是设置面板、小工具、轻量客户端,Tauri 很合适。但如果是比较厚重的东西,要么索性就 Electron 追求快速开发+功能迭代,要不就不如尝试原生 App 了。

    这也是我们现在在做 OxideTerm GPUI 版本的原因。GPUI 生态早,组件少,很多东西想要舒服要自己写,文档也没 Web 生态丰富,但至少它性能好得多,也相对统一一点。

    最后介绍一下 OxideTerm

    OxideTerm GPUI Preview

    我们不只想做一个单纯的 SSH 客户端,而是想做一个运维工作台。平时干活经常不只是连一台机器敲命令,更多是在终端、文件、端口转发、远程桌面、临时 TCP / UDP 调试、多台机器会话之间来回切。

    现在 GPUI 版在做这些:SSH 、Telnet 、Serial ,SFTP 和远程文件编辑,端口转发,Raw TCP / Raw UDP 调试,RDP / VNC ,多会话、多标签、连接管理。还在快速打磨,肯定有不少不成熟的地方。但方向很明确:少一点 WebView ,多一点真正围绕运维工作流的原生体验,让内存和应用性能表现好一些。

    项目地址: https://github.com/AnalyseDeCircuit/OxideTerm

    GPUI 预览版本下载(还在持续更新): https://github.com/AnalyseDeCircuit/oxideterm/releases/tag/gpui-v2.0.0-gpui-preview.11

    如果你觉得这个方向有意思,也欢迎顺手点个 Star 。开源项目真的很靠这个让更多人看见。

    最后,也想听听大家做复杂桌面工具时最后是怎么选的:Tauri 、Electron 、GPUI 、Slint 、egui 、Qt 、Flutter 、Wails 、Dioxus ?

    Supplement 1  ·  8 days ago
    2.0 正式版已发布,大家不用下载 Preview 版本了,直接下载正式版就好
    27 replies    2026-07-04 10:24:56 +08:00
    xxlsize
        1
    xxlsize  
       24 days ago
    Tauri 已经够用了,Electron 太重了
    soleilune
        2
    soleilune  
    OP
       24 days ago
    @xxlsize 很多场景 Tauri 确实够用了,我也不是想完全否定它。只是 OxideTerm 这种终端软件,我们很在乎输入延迟、输出吞吐等;如果终端核心还是 xterm.js 这类 Web 渲染链路,性能上限就摆在那里了。

    另外 Tauri 复用系统 WebView 的路线,确实容易遇到各平台、各发行版 WebView 版本不一致的问题。之前我们就遇到过不少因为 WebView 差异导致的 issue 。如果为了统一体验像 Electron 一样再把 WebView 自己打进去,那 Tauri 在轻量和系统复用上的优势就会被削弱很多。
    luckzk
        3
    luckzk  
       24 days ago
    考虑加入数据库吗
    soleilune
        4
    soleilune  
    OP
       24 days ago
    @luckzk 可以考虑,数据库面比较大,我还得慢慢了解先
    0x5c0f
        5
    0x5c0f  
       24 days ago
    不是 rust 才是写运维工具的么
    wbrobot
        6
    wbrobot  
       24 days ago
    怎么 windows 安装版 58.4M ,portable 版本 169M ??
    做了什么?
    soleilune
        7
    soleilune  
    OP
       24 days ago
    @0x5c0f 协议和后端这层确实很适合 Rust ,我主要纠结的是桌面 UI 这层。Tauri 虽然后端是 Rust ,但前端还是 WebView ; OxideTerm 这种终端、多会话、文件、端口转发都堆在一起的工具,做到后面会遇到状态同步和高频数据流的问题,所以才想试 GPUI 这种 Rust/native UI 。
    soleilune
        8
    soleilune  
    OP
       24 days ago
    @wbrobot 主要是压缩方式差异。安装版是 NSIS ,压缩率高; portable 是完整应用目录打 zip ,包含主程序、resources 、helper/CLI 、LICENSE/NOTICE/README ,zip 压缩率差很多。实际解压/安装后的体积会接近。
    lakernote
        9
    lakernote  
       24 days ago
    借楼打个广告,可以多个参考项,虽然可能一堆人喷🥶 O(∩_∩)O 哈哈~
    https://github.com/lakernote/EasyPostman
    iLoveSS
        10
    iLoveSS  
       23 days ago
    Avalonia 有机会吗? 踩过这个坑的佬说说
    soleilune
        11
    soleilune  
    OP
       23 days ago
    @iLoveSS Avalonia 我没实际用过,我问 GPT ,GPT 说它在 .NET 跨平台 UI 里看起来挺成熟,做管理工具/业务客户端应该有机会。
    ASHYWHISPER
        12
    ASHYWHISPER  
       23 days ago
    不错,我非常喜欢 Zed ,也一直在找合适的运维工具。直接下载 GPUI 版本
    soleilune
        13
    soleilune  
    OP
       23 days ago
    @ASHYWHISPER 感谢!
    soleilune
        14
    soleilune  
    OP
       23 days ago
    @lakernote 哈哈欢迎参考,不过这楼主要还是聊 OxideTerm 和 Tauri / GPUI 这类桌面技术选型。EasyPostman 看起来是另一个方向的工具,有兴趣的朋友可以顺手看看。
    soleilune
        15
    soleilune  
    OP
       23 days ago
    @wbrobot 改掉了,以后 win 便携版本用高压缩率的,就不会这样了。
    github2020
        16
    github2020  
       23 days ago
    Zed 速度很快,无脑使用 GPUI 版本,感谢 OP
    prudence
        17
    prudence  
       23 days ago
    为什么突然就刷到 2 个帖子讨论 Avalonia 和 Tauri ,我才花了十天时间把一个 Avalonia 改为了 Tauri
    soleilune
        18
    soleilune  
    OP
       23 days ago
    @prudence 这也挺正常,说明没有十全十美的东西。Tauri 在很多业务型桌面工具里确实很好用,我这边主要是终端高频输入输出、多会话和远程连接这些场景,WebView/IPC 的成本比较容易被放大,所以才试 GPUI 。应用形态不同,最佳选择也会不一样。
    kero991
        19
    kero991  
       23 days ago
    electron 是臃肿,但前提是,你得比 electron 小,才有资格批评它臃肿。
    electron 的普遍打包在 80-100m ,重型软件才有可能达到 150M 这个量级
    我们不谈 tauri ,他确实小,但也比 electron 差了不少,功能上差很多的。
    而你们的软件大小,压根就不该拿 tauri 来比。electron 做出来很可能比你这个还小点。
    ninjaJ
        20
    ninjaJ  
       23 days ago
    我现在也想从 tauri 迁移到 gpui ,但是无奈 tauri 的跨平台 updater 太省事了,gpui 这边的 updater 有什么好思路吗?
    soleilune
        21
    soleilune  
    OP
       23 days ago
    @ninjaJ 直接自己写吧,gpui 就是轮子比较少,都要自己搓
    soleilune
        22
    soleilune  
    OP
       23 days ago   ❤️ 1
    @kero991 我不同意“必须比 Electron 小才有资格批评 Electron 臃肿”这个前提。

    说 Electron 臃肿,批评的主要是它把浏览器运行时作为桌面应用基础设施这件事,以及由此带来的运行时内存、进程模型、启动成本和 Web 技术栈复杂度;不是在做一个简单的安装包大小排行榜。

    一个软件的安装包大小会受很多东西影响,比如协议 helper 、CLI 、远程桌面组件、资源文件、压缩方式等。拿最终产物大小反推 UI 技术路线是否轻量,我觉得这个比较不准确。

    我的重点也不是“OxideTerm GPUI 版本包一定比 Electron 小”,而是终端这类高频输入输出应用里,WebView / IPC / 前后端双状态会带来实际的复杂度和性能上限。这个问题和安装包大小不是同一个维度。
    ninjaJ
        23
    ninjaJ  
       23 days ago
    @soleilune #21 那细节好多,好麻烦
    soleilune
        24
    soleilune  
    OP
       23 days ago
    @ninjaJ 要不我把我写的 updater 从 GPL 改成 Apache 2.0 得了
    Mageblade
        25
    Mageblade  
       22 days ago
    只要不是浏览器套壳就值得点赞
    下载试用了下,总体不错,细节还有待打磨

    我目前常用的是这个终端工具: https://github.com/TermoraDev/termora

    楼主可以参考参考,这个工具很多细节做得很好
    soleilune
        26
    soleilune  
    OP
       22 days ago
    @Mageblade 挺好的,之前我也有看过,也可以继续多参考
    ninjaJ
        27
    ninjaJ  
       21 days ago
    @soleilune #24 OP 功德无量。我用 tauri 几年了,从 v1 用到 v2 。我对 rust 爱不释手,但也越来越意识到 tauri 的局限性,比如高频渲染、视频流这些。如果能补齐生态,那太好了。
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   2968 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 43ms · UTC 08:38 · PVG 16:38 · LAX 01:38 · JFK 04:38
    ♥ Do have faith in what you're doing.