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

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

  •  1
     
  •   soleilune · 4 days ago · 1850 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 ?

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

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

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

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

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

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

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