自我介绍
swananan 的自我介绍:系统编程,Linux 网络服务,调试工具,运行时观测,以及一些工程现场的复盘。
关于我
我是 Zhenzhong Wu,常用 ID swananan,一线系统编程工程师,长期关注 QUIC、Rust、Linux 网络编程、eBPF、GDB/DWARF,以及线上故障处理和工程实践。
日常打交道的东西大多围绕 Linux 网络服务、协议栈、调试工具和可观测性;偶尔也写一些「开飞机换引擎」式的复盘:一个问题如何暴露、排查路径怎么收敛、中间踩过哪些坑。
关于博客名
「从不说安全词」不是什么严肃的 brand,最初只是我在 B 站弹幕里看到的一句话。但好的工程往往就是没有 safe word 的,遇到问题就硬着头皮一路下钻到底。
我在写什么
我主要写 QUIC、TCP/UDP、Linux 网络编程、Rust 系统编程,也会记录 eBPF、GDB、DWARF、Coredump 相关的调试实践,以及线上故障处理、工程复盘和 AI Coding 的一些思考。
个人开源项目
GhostScope
GhostScope 是我最近主要投入的个人开源项目。它想解决的是一个很朴素、但其实很难的问题:线上进程正在持续运行,GDB 不能随便 attach,但排查问题时又经常会想“这里要是能加一行 printf 就好了”。GhostScope 希望把这件事做成一个低侵入的运行时调试工具:不停止目标进程,直接在函数、源码行甚至指令粒度上设点,实时打印源码语义下真正关心的变量。
难点在于,它不是简单地把 eBPF 和 uprobe 包一层。GhostScope 需要读 ELF/DWARF,理解源码位置、变量可见性、类型布局、inline 作用域、ASLR/PIE 地址映射,以及变量到底在寄存器、栈上还是已经被优化掉。同时还要设计一套自己的 trace 小语言,把用户按源码语义写下来的表达式,结合 PC 上下文里的 DWARF 读取计划,通过 LLVM 实时生成 eBPF 后端字节码。这里面最核心的挑战,其实是 GDB 这类调试器才会长期面对的 DWARF 语义问题,以及如何把这些源码级语义高效、正确地转换成 verifier 友好的 eBPF 字节码。
后续我还想继续往下做:支持基于 eBPF 实现的 DWARF 栈回溯,让 trace 结果不只是一个孤立的变量快照,而是带着调用链上下文;也希望逐步支持更复杂的编程语言语义,比如 Rust async、trait object,甚至一些解释型语言运行时里的变量和栈信息。
其实我对 GhostScope 的期望很大。它不是想做一个小众命令行工具,也不是再做一个通用观测面板,而是想把“编译后的二进制”重新还原成一个可以按源码语义提问的可观测系统:用户可以在 TUI 里可以沿着源码灵活的编写脚本获取信息,LLM 也可以根据源码路径、DWARF 信息和运行时上下文生成可执行的 trace 脚本。理想状态下,一些过去只能靠发版本加日志以及经验进行推测的线上问题,后面可以变成按源码上下文精准提问、精准采样、快速验证的问题。
feather-quic
feather-quic 是我用 Rust 写的实验性 QUIC 协议栈,定位不是生产替代品,而是一个协议栈拆解和工程验证项目。我通过这个项目把 QUIC 拆开重新走了一遍:握手、TLS 1.3、Reliability、Stream、Connection Close、MTU、Connection Migration 等。它对我来说最重要的产出其实不是代码,而是围绕协议实现以及我过去项目积累写下来的这一组文章:
用 Rust 从零开始写 QUIC:写在刚开始
用 Rust 从零开始写 QUIC:Runtime
用 Rust 从零开始写 QUIC:尝试深入分析 QUIC 握手
用 Rust 从零开始写 QUIC:实现 TLS 1.3 握手和 QUIC-TLS Key Update
用 Rust 从零开始写 QUIC:Reliability
用 Rust 从零开始写 QUIC:实现 QUIC 多路复用流传输和流量控制
用 Rust 从零开始写 QUIC:实现 QUIC 连接关闭和错误处理
用 Rust 从零开始写 QUIC:MTU 探测
用 Rust 从零开始写 QUIC:实现连接迁移
不过这个系列目前处于停更的状态,毕竟 LLM 写代码和技术调研的能力太强了😂(不过我依然觉得我的这个系列博客是有独特的价值的,欢迎阅读😉)。所以 feather-quic 后面大概率只会再写一两篇(比如拥塞算法和 Tokio 真正异步支持),还是延续前面的博客风格,重点依然是我自己以前做过的项目和积累的工程经验分享。
开源贡献
我会尽量把实际遇到的问题整理成上游 PR 或补丁。公开贡献主要来自日常工作和个人项目中真实踩到的问题,方向包括 OpenResty / Nginx、Linux 网络,以及 eBPF / Rust 生态。
Linux Kernel
发现并修复 TCP listener migration 相关问题:tcp: call sk_data_ready() after listener migration。
OpenResty / Nginx 社区
参与 OpenResty HTTP/3 和 PCRE2 功能开发。在 PCRE2 相关工作中发现上游 Nginx PCRE 功能存在内存泄露问题,向社区反馈并提交补丁:Memory Leak Issue in Nginx PCRE2。
修复 lua-nginx-module 中 Lua coroutine yield APIs 在 HTTP/3 场景不可用 的关键问题:PR。也向 Nginx 社区反馈和讨论过 HTTP/3 热更新存在的缺陷。
eBPF / Rust 生态
在 Aya 中主要围绕 uprobe 和 reuseport 方向做贡献:补充 BPF_PROG_TYPE_SK_REUSEPORT 支持,推进 multi-uprobe attach / uprobe.multi section 支持,也修过 ProcMap 路径解析、pid scope 语义、BPF link 类型转换等边界问题。
这些工作大多来自我在 GhostScope 和 Linux 网络调试场景里真实踩到的问题,希望把上层工具需要的能力补回 Rust eBPF 生态。更多记录可以看 GitHub PR 列表。
终端版自我介绍
curl -N https://jt26wzz.com/aboutme