首页 > 2026年5月

把一个 OS 子系统拆成独立进程:video app 的解耦实录

TL;DR 把一个浏览器桌面 OS 里最复杂的子系统从主进程里拆出来跑成独立进程,听起来像"挪个目录",实际要重新回答四个问题:谁负责接 HTTP,谁负责排任务,DB 怎么分家,前端怎么跨 bundle 借能力。这篇讲我们怎么回答这四个问题,以及拆离过程踩到的三个真问题。 目录 TL;DR 目录 Part 1 · video 从内置域模型迁移为独立 app §1.1 项目定位与职责边界变化 §1.2 video 的职责归属冲突 §1.3 video 是最关键的一次抽离 Part 2 · 设计约束 Part 3 · 四条核心架构边界 §3.1 Bus 通信架构 ...

一次 SMB 视频点击引发的 SIGSEGV:当 ffmpeg 和 libvips 各带一份 glib

一次 SMB 视频点击引发的 SIGSEGV:当 ffmpeg 和 libvips 各带一份 glib 用户:"我点了 SMB 上的电影,server 直接崩了。" 我:"…让我看看。" 目录 现象:一点视频,服务器整个退出 第一直觉:又是 LD_LIBRARY_PATH 顺序问题 真相:两个 bundle,两份 glib 为什么"一份 glib"是天大的事 短期回避 vs. 真正修复 tokimo-lib:把 ffmpeg 和 libvips 关进同一个 Docker CI 里如何强制"只有一份 glib&q...

浏览器里的 AI agent 工具调用:从前端按钮到 microVM PTY 的完整链路

浏览器里的 AI agent 工具调用:从前端按钮到 microVM PTY 的完整链路 目录 为什么一次「看目录」不只是一次命令执行 链路全景:从 React 到 guest-agent 前端:按钮、SSE、WS 与 typed client 的边界 后端:Axum 把聊天流和工具执行拆开 sandbox:为什么是 vsock,不是 TCP PTY:为什么不是直接 exec 错误与回流:stdout、exit、error 都是协议 业界正在做什么 一个可复用的工程框架 为什么一次「看目录」不只是一次命令执行 用户在浏览器 chat 输入「帮我看一下当前目录」,表面上只是 pwd ...

用 Opus 半小时把博客从 Typecho 搬到 GitHub Pages

用 Opus 半小时把博客从 Typecho 搬到 GitHub Pages 旧博客一直跑在 Typecho 上:PHP + MySQL + Nginx + 主题 + 评论插件。可以工作,但每次想动它都要先盘一遍 PHP 版本、SSL 证书、备份是否完整、主题是否还兼容。维护成本远高于写作成本。 今晚用 Claude Opus 4.7 把整套迁到 GitHub Pages,耗时约半小时。 新架构 前端:React + Vite + TypeScript,构建产物推 gh-pages 内容存储:当前仓库的 GitHub Issues。一篇文章 = 一个 Issue,标签作分类与 tag,...

为什么我们给 AI 沙箱手写了一套跨平台用户态 TCP/IP 栈

为什么我们给 AI 沙箱手写了一套跨平台用户态 TCP/IP 栈 目录 问题为什么难 为什么不是容器 / userns 业界正在做什么 网络方案怎么选 现在的架构 性能目标不是越高越好 我们诚实承认的取舍 AI sandbox 的网络问题,表面上只是"让 guest 能访问外网"。但我担心的不是能不能 ping 通,而是:未知代码会在高频网络路径里做什么,以及我们能不能在事后解释它为什么能做。 AI agent 跑的是用户给的仓库、脚本、二进制和临时命令。它可能 curl | sh,可能跑包管理器,也可能启动一个开发服务器。网络是高频路径:DNS、TLS、包管...

manifest 驱动的桌面应用:在浏览器里「装」一个跨 4 种窗口类型的应用是什么体验

manifest 驱动的桌面应用:在浏览器里「装」一个跨 4 种窗口类型的应用是什么体验 浏览器给了我们 DOM,但没有给我们桌面;React 给了我们组件,但没有给我们应用生命周期。 目录 为什么这件事难:窗口不是路由,应用也不是组件 四种窗口类型:page / system / app / popup manifest 如何把 app 注册进桌面 文件窗口和 app 窗口如何共存 跨窗口通信:bridge 不是全局事件总线 业界正在做什么 从 0 加一个 Hello World app framework-level 的一句话 为什么这件事难:窗口不是路由,应用也不是组件 ...

最新文章

最近回复