一套内核,一条分支,四个平台
每个客户端都构建自同一套网络内核的同一条分支:开源引擎 mihomo 的修改版构建,由我们自行维护并扩展。这条规则是在一条图方便的分支偏离数月、还带着别处早已修掉的缺陷之后才立下的。
工程实践
我们是一家新公司,拿不出客户名单,所以我们把方法公开:工程按什么规则进行,又用什么构建。
四条规则,每一条都是出过事之后才立下的,而不是出事之前。
每个客户端都构建自同一套网络内核的同一条分支:开源引擎 mihomo 的修改版构建,由我们自行维护并扩展。这条规则是在一条图方便的分支偏离数月、还带着别处早已修掉的缺陷之后才立下的。
当配置错误可能让流量走到隧道之外时,客户端会拒绝连接,而不是装作正常。这道检查写在代码里,不靠代码评审去提醒。
我们逐个核实了所调用的每一个端点,删掉了那段仅凭旧说法保留的宽松证书处理代码。这类写法一旦重新出现,构建就会失败。
每个客户端和每个后端都带着一份技术文档,记录某个决定为什么这么做,而不只是做了什么。查证后被推翻的说法也一并列在里面。
这两则都是我们对自家产品的工程记录,不是客户项目,每一则的开头都是某个地方已经出了问题。
网络内核的 Android 构建曾为图方便单独放在一条分支上,其他平台则继续沿主线前进。数月之后,它已经落后很多,还带着主线早已修复的缺陷,于是我们把所有平台收回到同一条分支上。
macOS 客户端支持把最后一跳交给用户自备的代理。我们以对抗性的方式评审这个设计,找出两种会不声不响失败的情形,此后只要配置无法保证安全,客户端就拒绝生成它。
以下是我们自己的软件所使用的语言、数据库与服务。这只是一份工具清单:不是客户,不是合作伙伴,也不是背书。