Bert Hubert's writings · 站上可见 373 篇(2014 年 9 月至 2026 年 9 月)· 另有一篇 2001 年起笔、一路改到 2021 年的长文 · 2020 年前后明显转折:从 C++/DNA/卫星导航的技术写作,转向欧洲技术主权与荷兰政府 IT · 仍在更新,最新一篇 2026 年 9 月 14 日 · 荷英双语混写,全站免费无付费墙 · 本页通读 17 篇,跨度 2016 年 4 月至 2026 年 9 月,另含那篇 2001 年起笔的;转折两侧各有多篇 · 选文以作者主页自己列的 "notable projects, publications & presentations" 清单为主干(这是作者本人说「该读什么」),再以外部关注度补足
荷兰鹿特丹港区有一座会升降的大桥叫 Botlekbrug。它卡住过大约 250 次。
后果很严重——那是卡车从 A 到 B 的唯一通路。于是这座桥有了自己的网站公布故障,有了自己的短信服务(发送「BBRUG AAN」到 3669,Hubert 特意注明「我没开玩笑」),还有一名工程师被塞进桥边一辆面包车里常驻,桥一坏他就上。靠这个办法,停机时间砍了一半。
三年过去,没人知道它为什么坏。最后查出来:桥里有一台服务器管着状态和传感器,它的一根网线、或者网口,烂了。
And during that two-year period, everyone thought, it cannot be the computer. No one came and said, shall we just replace all the cables and ethernet ports for once and see what happens? We lacked the expertise.那两年里,所有人都认定:不可能是电脑的问题。没有一个人站出来说,要不咱们把所有线缆和网口都换一遍,看看会怎么样?我们缺的是那份本事。Cyber Security: A Pre-War Reality Check,2024 年 5 月 14 日
讲这件事的人叫 Bert Hubert,荷兰程序员,1999 年创办 PowerDNS,写过让 DNS 更难被骗的 RFC 5452,当过荷兰情报部门的监督者,现在给几个政府部门当兼职技术顾问。他一辈子在做同一个动作:别人说「这太复杂了,得找人来看」的地方,他把盖子掀开,自己读一遍。
2020 年 12 月,世卫组织公开了 BioNTech/辉瑞新冠疫苗的完整序列。那串东西 4284 个字符,短到能塞进几条推文。多数人看一眼就滑过去了。Hubert 把它当源码,逐字符读完,写成一篇文章。
他发现开头两个字母 GA 什么也不编码却必须在那儿——就像每个 Windows 可执行文件都以 MZ 开头、每个 Unix 脚本都以 #! 开头。他发现所有的 U 都换成了一个叫 Ψ 的近亲分子,因为人体对外来 RNA 有一套凶悍的「杀毒系统」,而 Ψ 能让免疫系统失去兴趣、细胞却照单全收。他的评语是:这个把戏搞安全的人很熟——发一条稍微「坏」掉的消息,防火墙看不懂,后端却照收不误。
他还找出了整条序列里唯一两处真正改变蛋白质的修改:两个氨基酸被换成了脯氨酸。因为刺突蛋白一旦离开病毒身体就会塌成另一个形状,而脯氨酸很硬,像两根夹板把它撑在免疫系统需要看到的姿势上。他说,做出这个发现的人「应该一直在给自己击掌,浑身散发着难以忍受的得意」。
这篇文章有 170 万人读过,译成三十多种语言,直接导致他去写了一本关于 DNA 的书。而这套读法他 2001 年就开始练了——那时他还只是个写 DNS 软件的程序员,闲着把人类基因组当代码读:97% 的内容被注释掉,注释的起止标记是 GT 和 AG,功能等同于 /* 和 */;肿瘤是 fork 炸弹;每条染色体两份是 RAID-1。那篇文章的副标题他一直没改:「或者说:如果你是一把锤子,看什么都像钉子」。
理解他的钥匙就在这里。同一把锤子,他后来抡向了别的东西。
2020 年 1 月欧洲正吵 5G 该不该用华为,他写文章说这个问题问晚了:华为和它的紧密伙伴当时已经在直接运营欧洲一亿多用户的移动网络,通话详单从 2000 年代初起就外包给了第三方、常常是外国公司。「根本不需要装什么后门——数据是我们心甘情愿送出去的。」他给出的推论让人哑口无言:担心中国人通过后门瘫痪我们的通信,忽略了一件事——他们要瘫痪我们的通信,只需要停止替我们维护网络就行了。
同一篇里还有一个数字:某家一千五百万用户的欧洲运营商,管全网地址与号码分配的核心团队一共 4 个人,其中一个是经理;而这四个人也快被外包掉了。
六年后他把这件事写成了一个马桶的寓言。某大机构的马桶漏水且冲不了,一周的电话和法务升级才搞清楚归谁管。一位手巧的同事说十分钟能修好,但得开墙。于是高层每天开会:弄坏了墙谁负责?他受伤保险赔不赔?外包运维还发话说客户不许自己动手。人事起草了一份免责书,同事没签。几万升水流掉了。一栋楼之外,同样的马桶坏了,一位员工走到自家面包车拿了工具,九点半修好了,管理层从头到尾不知道有这回事。
区别在哪?后一家「是干技术的」。Hubert 给前一种状态起的名字是习得性无助:只要我们还把 IT 当成「得打电话找人来弄」的东西,我们就哪儿也去不了。
二十五年,题材从基因组换到疫苗、换到 5G、换到政府机房,他说的其实是同一句话:我们正在系统性地失去「打开来看一眼」的能力,而这个损失,比任何一家具体的厂商都更危险。
Glossary · 术语表(本页会用到的几个前置概念,一句话一个)
荷兰鹿特丹港区有一座会升降的大桥叫 Botlekbrug,2015 年才启用,是新桥。它卡住过大约 250 次,头几年一年能坏七十五次。
这不是小事。那是卡车从 A 到 B 的唯一通路。于是事情发展成了这样:这座桥有了自己的网站,专门公布故障记录;还有自己的短信订阅服务,坏了会给你发短信——发送「BBRUG AAN」到 3669。Hubert 在讲这件事时特意加了一句「我没开玩笑」。管理方甚至把一名工程师塞进桥边一辆面包车里常驻,桥一坏他就上。靠这个,停机时间砍了一半。
三年过去,没人知道它为什么坏。
最后查出来的原因是:桥里有一台服务器管着状态和各路传感器,它的一根网线、或者网口,是烂的。
Hubert 是在一场给荷兰国家网络安全中心做的演讲里讲这个故事的,他补的那句才是重点:
And during that two-year period, everyone thought, it cannot be the computer. No one came and said, shall we just replace all the cables and ethernet ports for once and see what happens? We lacked the expertise.那两年里,所有人都认定:不可能是电脑的问题。没有一个人站出来说,要不咱们把所有线缆和网口都换一遍,看看会怎么样?我们缺的是那份本事。Cyber Security: A Pre-War Reality Check,2024 年 5 月 14 日
他接着说了一句更狠的猜测:说不定最后是凑巧解决的——有人要那根线去插别的电脑。
「这说明你对自己的基础设施没有控制权。你有一座大桥,三年时间,你查不出它哪里坏了。这让我很担心。」
Bert Hubert 是荷兰人,程序员出身。1999 年他创办 PowerDNS——回答「这个网址在哪台机器上」的那类软件,至今仍跑在大量欧洲电信运营商的机房里。他是 RFC 5452 的作者,那份标准的任务是让 DNS 更难被伪造的回答骗到。公司后来卖给了 Open-Xchange,他曾是其股东。
2020 年他进了荷兰情报部门的监督机构,后来退出。他自己的介绍页上写得很平淡:「2020 年,我加入了一个政府监督机构,此后已经离开。」现在他给几个荷兰政府部门当(用他自己的话说,「非常」)兼职技术顾问,其中包括荷兰选举委员会。
一个有画面感的细节:他自己架硬件、自己写软件,长期监控全世界所有的导航卫星(项目叫 galmon.eu),2019 年伽利略系统大瘫痪时,他是少数能从外部说清发生了什么的人之一。另一个:荷兰有一道叫 Maeslantkering 的巨型挡潮闸,离他家不远,他在演讲里说——他有时候就是去那儿看看它,因为他欣赏它。
他用荷兰语和英语混着写。谈欧洲、谈荷兰政坛时用荷兰语,谈 DNA、C++、气候时多用英语,重要的篇目常常两种语言各发一遍。站上可见的文章从 2014 年到今天有 373 篇,仍在更新,最新一篇是 2026 年 9 月 14 日。全站免费,没有付费墙。
他二十五年没放下的那个问题,不是「该防谁」,而是——我们还认不认得自己每天依赖的东西?
他是怎么撞上它的,有具体的时间和位置。2020 年 1 月,整个欧洲在吵 5G 该不该用华为设备。这场辩论有一套隐含的世界图景:运营商自己采购设备,自己的员工受训、拆箱、测试、配置、组网,自己的员工日常运维和监控;设备要是行为反常——比如往外发数据——自家员工能发现并查下去;厂商推送升级包,自家先测一遍再装;账单和通话详单这类极敏感的数据在自家系统里处理;警察拿着搜查令上门时,数据是从自己完全控制的系统里取出来的。政府也相信这套图景,所以要求运营商的关键岗位持有安全资质。
在这套图景下,5G 的问题就变成了一个采购问题:选错了厂商,这套良好的本地控制就会被破坏。
Hubert 的位置让他知道这套图景早就不成立了。PowerDNS 和它的母公司把大批欧洲大型电信商做成了客户,他从供应商的角度看过这些公司的内部;而他在国家安全领域的那段经历,让他知道政府和电信商之间实际上如何「互动」。所以他写:这条卢比孔河早就过了。
In reality, most service providers have not been operating on this model for decades.现实是,大多数运营商已经有几十年不是按这个模式运转的了。5G: The outsourced elephant in the room,2020 年 1 月 20 日
这一下把问题整个挪了位置。如果控制权早就不在自己手里,那么「选华为还是选爱立信」就不是安全问题的主轴——它只是在问,你希望由谁来替你掌握你不再掌握的东西。而真正的问题,是你自己还剩下什么。
这个问题此后再没离开过他。它长成了 2024 年那座三年查不出病因的桥,长成了 2025 年「把整个政府搬进美国云」,长成了 2026 年那个没人敢开墙修的马桶。题材越换越大,问的还是同一句:出事的时候,屋里还有没有人能自己动手?
2001 年,一个写 DNS 软件的荷兰程序员闲着没事,开始把人类基因组当代码看。他自己在文章开头写得很老实:「这是一个程序员关于 DNA 的胡侃。我不是分子遗传学家。」二十年后他在同一句话下面加了一行更新:「开始写这篇二十年后,我已经能装得挺像了。」
他注意到的东西一件比一件有意思。人类基因组约 30 亿个碱基,存成文件约 750MB——他当年的对照是「这只相当于 3.6 个 Mozilla 浏览器」,并且为浏览器居然变小了而惊讶。97% 的内容是被注释掉的:不该被翻译的段落标记得非常清楚,注释的开始标记几乎总是 GT、结束标记是 AG,功能上就是 /* 和 */;但因为这些注释在物理上必须被剪掉、剪完两头还得接上,所以它们其实更像 HTML 注释那样两头更长的结构。
顺着往下:几乎每个细胞都带着全套基因组,但肝细胞用不着造神经元的那段代码,所以需要机制把不用的部分关掉——「遗传密码里全是 #if 和 #endif」,而干细胞之所以珍贵,正是因为它的代码还没有被 #ifdef 掉。细胞不是被「生成」而是被 fork 出来的,失控的 fork 就是肿瘤——细胞里布满了 ulimit 和看门狗来防止这件事。
最漂亮的一段他叫「神圣代码」。有些代码没人记得是谁写的、为什么写,只知道它能用,于是谁也不敢动。基因组里也有:组蛋白 H3 和 H4 这两个基因管着基因组本身怎么存放,任何差错都会让生物直接报废,所以它们在人类身上的有效突变率是 0.00——而且你和鸡、和草、和霉菌共享着几乎一模一样的这段代码。
还有 Makefile。同源异形框基因(HOX)只负责触发别的基因,自己什么也不造,像极了 Makefile。而且这套「语法」神圣到什么程度呢——把老鼠的 Hox-B6 基因插进果蝇体内,它能顶替果蝇自己的基因,让果蝇在长触角的地方长出腿来。人和果蝇的基因组分家是几亿年前的事。造腿的具体流程当然天差地别,但那个「选择器」贴过去还能点对地方。
然后是 2020 年 12 月。世界卫生组织公开了 BioNTech/辉瑞疫苗的完整序列,4284 个字符,短到能塞进几条推文。Hubert 把二十年前那把锤子抡了上去,逐字符读了一遍。
开头两个字母是 GA。它们不编码任何东西,但必须在那儿——就像每个 DOS/Windows 可执行文件都以 MZ 开头、每个 Unix 脚本都以 #! 开头。「在生命和操作系统里,这两个字符都不会被执行。但它们必须在那儿,否则什么也不会发生。」
接着他撞上了第一个惊喜:序列里本该是 U 的地方,全都是一个陌生符号 Ψ。原因是人体对外来 RNA 有一套极其凶悍的「杀毒系统」——他管它叫「最早的那一套」——细胞会拼命销毁来路不明的 RNA。而多年实验发现,把 U 换成一个略微改装过的分子,免疫系统就失去兴趣了,细胞相关部件却仍然把它当正常的 U 接收。
In computer security we also know this trick - it sometimes is possible to transmit a slightly corrupted version of a message that confuses firewalls and security solutions, but that is still accepted by the backend servers - which can then get hacked.这个把戏计算机安全圈也懂——有时候你可以发一条稍微「坏」掉的消息,防火墙和安全设备看不懂,后端服务器却照收不误,于是后端就被打穿了。Reverse Engineering the source code of the BioNTech/Pfizer SARS-CoV-2 Vaccine,2020 年 12 月 25 日
他把疫苗序列和病毒原序列并排摆出来,一个密码子一个密码子地对。绝大多数差异发生在密码子的第三位——查一下通用密码子表就知道,第三位往往不影响最终是哪个氨基酸。也就是说,这些改动全是同义的:序列变了,造出来的蛋白质一模一样。那为什么要改?他数了数,发现除一处之外,所有改动都让 C 和 G 变多了——而 C、G 含量更高的 RNA 翻译成蛋白质的效率更高。
唯一那个不增加 C 或 G 的改动(CCA 改成 CCU)让他很着迷,他在文章里公开求解。后来读者告诉他,这可能是为了避免 RNA 折出一个发卡结构——他把这条更新补进了原文。
然后是整条序列里仅有的两处真正改变蛋白质的修改:两个氨基酸被换成了脯氨酸。他解释了为什么这两处值三倍工价。真病毒上的刺突蛋白是插在病毒身体上的,而疫苗只造刺突、不造身体;无所依附的刺突蛋白会塌缩成另一个形状。如果照原样注射,人体会认真地对着塌掉的那个形状建立免疫——然后真病毒带着挺立的刺突登门,免疫系统认不出来。2017 年有人发现,在恰好的位置塞两个脯氨酸,就能让刺突在脱离病毒身体的情况下仍保持「融合前」构型,因为脯氨酸非常僵硬,像两根夹板。
他对那几位发现者的评语是全文最好玩的一句:他们「应该一直在给自己击掌,浑身散发着难以忍受的得意,而且这完全应得」。后来他更新说,麦克莱伦实验室联系了他,表示鉴于疫情仍在进行,击掌力度有所收敛。
这篇文章有 170 万人读过,译本超过三十种语言,直接促成他去写一本关于 DNA 的书。而它之所以能成立,靠的不是他懂分子生物学——他在文中老老实实地把脂质递送系统那部分整块让了出去,说那是「我没有能力描述的部分。幸好 Derek 有」。它靠的是一个更朴素的动作:那份文件是公开的,而他真的把它从头读到了尾。
2020 年那篇 5G 文章最有杀伤力的部分,不是论证,是一串事实。
华为和它的紧密伙伴,当时已经在直接运营着欧洲一亿多移动用户的网络。他把这句话单独拎出来,让读者消化一下。
账单更早。从 2000 年代初起,大部分计费就外包了,做法是把全部通话详单——谁给谁打了、多久、在哪个基站、漫游到了哪个国家——送到第三方维护的系统上去,这些第三方常常在以色列或中国。他的评论是:
In this way, there is no need to plant backdoors - data willingly gets sent out to systems under control of third parties.这样一来,根本不需要装什么后门——数据是我们心甘情愿送到第三方控制的系统里去的。5G: The outsourced elephant in the room,2020 年 1 月 20 日
外包是有链条的。他举了一家大型移动运营商:公司把 IT 外包给 Tech Mahindra,Tech Mahindra 再去跟爱立信谈,最后由爱立信运营网络。而爱立信本身又把许多职能挪到了人力更便宜的国家。另一家荷兰大型运营商则把大部分技术人员整建制交给了华为,新落成的漂亮总部从此空了一半——剩下那半里坐着一批 IT 架构师,按他的说法,这些人离真实的运维最近也就到一张 Excel 表格或一张 Visio 图为止。
还有一个数字,是全文最像黑色笑话的:某家拥有一千五百万用户的欧洲运营商,负责全网地址与号码分配的核心团队一共 4 个人,其中一个是经理。在多次尝试失败之后,这四个人也将被外包。
顺着这堆事实,他推出了那个让人哑口无言的结论。所有关于「中国人能通过后门瘫痪我们通信」的担忧,都忽略了一件更简单的事:他们要瘫痪我们的通信,只需要停止替我们维护网络就行了。
那用合同兜底呢?运营商当然知道风险,所以风险被写进了合同和服务等级协议里——中国公司不会中断我们的通信,因为合同说不会;供应商承诺只把它能接触到的数据用于约定用途,所以我们的计费记录会和外国情报机关隔开,因为合同说会。他的回应是一句职业性的冷笑:任何对国家安全有一点点了解的人都知道,这类协议连它写在上面的那张纸都不值;何况大多数欧洲国家(以及美国、中国)的法律本来就规定,政府的令状压过一切客户隐私承诺。
所以他的答案不是换一个供应商。他的答案是人:「要做到不必信任供应商——不管它来自哪里——整个公司必须把本事捡回来,真正控制自己的网络和它的运行。光有一个满怀好意的安全部门是不够的。」他顺手连开源也一并泼了冷水:开源只对有本事看懂它的人才透明。
五年后,同一套论证换了对象。2025 年 2 月他写了《把我们的政府和社会搬进美国云,已经不再安全》。这篇的推力来自法律面的塌陷——支撑欧美数据传输合法性的那套机制被特朗普政府釜底抽薪——但他真正的火力对准的还是那个老问题:我们是为什么走到这一步的。答案让他难以接受:因为方便。
But this brings us to the unbearable conclusion that we are entrusting all our data and business processes to the new King of America … because we can't be bothered to get used to a different word processor.但这把我们逼到了一个难以忍受的结论:我们把全部数据和业务流程交给这位新的「美国国王」……只因为我们懒得去适应另一个文字处理软件。It is no longer safe to move our governments and societies to US clouds,2025 年 2 月 23 日
值得记一笔的是他在同一篇里交代的立场变化。他说他那些更激进的朋友「正确地指责了」他自欺欺人——他此前的主张是「至少别把所有东西都搬去美国」,而这等于默认了大部分系统还是要交出去。他接受了这个批评,并且写下来给读者看。
然后是 2026 年的马桶寓言(精华版里讲了全程)。压缩成一句:某机构的马桶漏水,一位手巧的同事说十分钟能修好但要开墙,于是高层每天开会讨论责任与保险,外包运维发话说客户不许自己动手,人事起草了一份免责书,同事拒签,几万升水流掉。而一栋楼之外,同样的马桶被一位员工从自家面包车里取了工具,九点半修好,管理层从头到尾不知道有这回事。
区别只有一条:后一家机构「是干技术的」,所以能从容应对一个技术问题。
Hubert 的问题是:你到底是不是干这行的?荷兰政府是全国规模遥遥领先的信息处理者,依赖着数量惊人的 IT 系统,却像第一家公司对待马桶那样对待 IT——「我们觉得 IT 不真是我们的事」。他补了一刀:机构内部其实有能干的同事,但他们不被允许动手,事情必须走「正确的结构」、最好通过与外部方的合同来办,因为这样让人舒服。
他给这个状态起的名字是习得性无助——而且他指出这不是技术问题,是文化问题,所以光有一份宏伟的技术方案解决不了。他还引了一位荷兰议员的话作为病因诊断:IT 是政治生涯的数字百慕大三角;任何珍惜自己在政府里前途的人,都知道要离这摊子事远一点。
2024 年 1 月,计算机先驱 Niklaus Wirth 去世。他在 1995 年写过一篇有名的文章,叫《为精简软件辩护》。Hubert 写了一篇同名的三十年后版本来纪念他。
他先摆事实:如果你过去一年用过 Ivanti、MoveIT、Outlook、Confluence、Barracuda 邮件安全网关、Citrix NetScaler 里的任何一个,你很可能已经被黑了。而我们仍在依赖这些产品。软件现在已经危险到了这个地步——我们干脆告诉所有人别自己跑软件,交给「某某即服务」或者云。他的类比是:这就好比汽车自燃的概率高到我们建议你不要自己开车,而要交给随身带着消防员的专业人士。
他把安全问题拆成两个因子:源码里问题的密度,以及暴露在外的代码的绝对数量。「量本身就是一种质」——这句冷战时期美国国防界爱说的话,反过来适用于软件:你拥有得越多,风险越大。
他举的例子精确得令人难受。苹果 iPhone 用户多年来反复被攻破,是因为 iMessage 暴露的攻击面太大:任何人都能给苹果用户发一条未经请求的消息,手机会立刻处理它以便生成预览。而苹果认为这种未经请求的消息需要支持海量图片格式,其中意外地包括了 PDF,包括带有某种古老格式的嵌入式压缩字体的 PDF——而那个格式里实际上含有一门编程语言。于是攻击者可以享用可能数百万行代码里的安全漏洞。他的评论是:在几百万行代码里找一个能用的洞,你根本不需要多高的缺陷密度。
更让他不解的是,苹果本可以轻松避免这一切——那是他们自己的平台,不需要跟任何人互通,完全可以把预览限制在很小一组图片格式里。他们没有。2023 年他们还新加了一个图片格式支持,而且重要到必须放在安全沙箱外面。然后又被打穿了。
再看我们怎么发布软件。Wirth 1995 年哀叹当时的软件动辄需要好几兆,而他自己做的 Oberon 操作系统只要 200KB,还包含编辑器和编译器。Hubert 的对照是:现在大概有些项目光 YAML 就不止 200KB。今天一个典型应用建在 Electron 上,同时打包了 Chromium 和 Node.js,算上依赖他估计至少五千万行代码;应用本身还会拉进几百上千个 Node 模块,而依赖会再拉依赖,每天都在变,没人真的知道里面有什么。如果这个应用控制着你家里的什么东西,它还会连到亚马逊那边的另一套栈上,同样是 Node、同样一堆依赖、同样没人说得清。
于是结论是:我们大概在用五千万行以上的代码、跑在好几台服务器上的好几个操作系统镜像,来开一扇车库门。
换个人,文章到这里就该结束了。Hubert 的做法是去写代码。
Writing has been called the process by which you find out you don't know what you are talking about. Actually doing stuff meanwhile is the process by which you find out you also did not know what you were writing about.有人说,写作是你发现自己其实不懂自己在说什么的过程。而动手做事,则是你发现自己连自己写的是什么也不懂的过程。A 2024 Plea for Lean Software (with running code),2024 年 1 月 18 日
他写的东西叫 Trifecta,一个可以自己架设的图片分享站——因为他多年来不得不用 imgur,而那玩意不但往他浏览器里塞一堆追踪器,还逼着每个来看他图片的人一起被追踪。1600 行新代码,大约五个重要依赖,功能却是齐的:完整的用户和会话管理、拖拽多图上传、一篇帖子可含多图、标题和图注、公开或限时公开、免密码登录(邮件链接)、找回密码流程、只有一个 cookie 且锁死在本站,提供源码、二进制、docker、.deb 和 .rpm。以及他最在意的那一条:「源码小到你一天之内能把它全部读完。」
对照组他也列了:另一个图片分享方案发布为 311MB 的 Docker 镜像——他承认那个更好看、功能更多一些,「但不值 308MB 那么多」。还有一个基于 Node 的同类方案,拉进 1600 个依赖,合计四百多万行 JavaScript。
最好笑的是反响。他收到的最常见的反馈是:你应该用上一整套 AWS 服务来部署它。对一个明确写着「提供不依赖外部服务的独立软件」的项目。他的回应只有一句:「我不太明白这是怎么回事。」
他用 Wirth 三十年前的两句话收尾。一句是:「对某些人来说,复杂等于强大。(……)人们似乎越来越把复杂误认成精妙,这很荒谬——不可理解本该引起怀疑,而不是崇拜。」另一句更像是在替所有赶工期的程序员说话:「时间压力会逐渐腐蚀一个工程师对质量和完美的标准。它损害的不只是产品,还有人。」
这个想法比上面那些都早,2016 年就写了,而且它是他全部欧洲论述背后那块看不见的地基。
他的不满从一句吐槽开始:「『在一个唯一不变的就是变化的世界里』是一句谎话。这个世界花了二十年才发明出一个像样的开罐器。」而当时市面上关于创新的材料,在他看来几乎全是空话,谈的都是他称之为「零阶发明」的东西:把众所周知的技术块重新排列成新形状。Uber、AirBNB、Snapchat、Slack 都是范例——其中有些确实让我们做到了以前做不到的事,但它们的创新几乎全在(非?)商业模式上,技术全是现成的:GPS、Web、数据库、评价系统,以及 1988 年发明的 IRC。
他举了一个很漂亮的反事实:设想 Uber 在 2001 年创业。那它必须自己搞定可靠的 GPS、必须能在极慢的移动网络上跑、必须发明给司机和乘客排序的反馈算法。以当时的资金和精力,这是做得到的——而那个「2001 版 Uber」将会帮忙发明未来。结果它 2010 年才出现,那时应用生态、移动网络、精确定位和评价技术全都成熟了,它「只」需要把它铺开。
一阶创新是:你想做的事,用现在可靠且现成的技术做不出来,你得真的发明点东西,或者把研究级的想法产品化成真能用的东西。他给的例子是 1990 年代末的 Google——当时的搜索技术根本无法以足够速度索引互联网,因为从没有人需要索引如此庞大、分散、无结构且变动飞快的信息,HotBot 和 Altavista 都办不到。
最吓人的是二阶创新:你必须先发明一些东西,才能去发明你真正想发明的那个东西。他记录得最完整的例子来自贝尔实验室。为了让纽约能打电话给旧金山,他们先得发明足够好的声音导体,试了铁线、铜线,最后做出双绞铜线;这把他们送到约 1700 英里,还不够。于是他们捡起一个当时没人搞得明白的放大器件 Audion,做研究、修毛病,做成了第一支实用的真空管——晶体管的前身——并在 1915 年实现了纽约到旧金山的第一次通话。后来他们真的发明了晶体管,却因为材料杂质而不好用:早期晶体管敏感到有人挥挥手或摔一下门就罢工,碰一下就坏。于是贝尔实验室顺手在冶金学上也创了个新,发明区域熔炼,这才有了能量产的半导体。洛克希德的臭鼬工厂同理:发现超音速飞机该用钛,然后不得不去发明能加工钛的机床。
So in short — they had to invent things to invent things to invent things.所以简单说——他们必须发明东西,好去发明东西,好去发明东西。How About Some Actual Innovation,2016 年 4 月 17 日
这个分层为什么重要?因为它是他所有欧洲论述的底层。他反复说的不是「欧洲该多出几家创业公司」——零阶的创业公司欧洲不缺。他说的是,一个把设备、运维、计费、云、乃至理解能力全部买进来的地方,连做一阶的资格都在流失,更不用说二阶。而二阶正是未来实际出产的地方。他在 2025 年那篇里落到的那句实务建议,正是这条线的终点:欧洲政府偶尔也该有胆子去买点别的东西,因为没有营收的许诺,创新不会自己发生;哪怕只把几个百分点花在替代方案上,也意味着几十亿欧元。
读一个写了二十五年的人,最可迁移的常常不是结论而是手法。他的手法有几条很清楚,而且条条都能从文章里指认出来。
去读那个东西本身,不要读关于它的讨论。这是贯穿全部的一条。疫苗那篇他在中途插了一句给读者的提示:「有疑问的时候,就去看世卫组织那份带着数字代码的文件,自己确认。」DNA 那篇开篇就把基因组的在线浏览入口甩给你。气候那篇附一个 Jupyter notebook。性能优化那篇的全部主张可以压缩成「别猜,去拿调用图剖析」。
怀疑那些无法被证伪的行话,也怀疑自己的聪明。2016 年讲性能优化时他专门开了一节骂「大刀阔斧式优化」:「别用引用计数指针」「用无锁代码」「离 STL 远点」——这类建议之所以阴魂不散,正因为它极难被实现或被驳倒。同一篇里还有一节,标题叫「那种心态:CPU/编译器/库/操作系统/语言都是白痴」。他说这个心态源自 1980 年代,那时候它是真的——xor ax,ax 确实比给 ax 赋 0 快。但今天显而易见的优化多半已经替你做完了,「而编译器和 CPU 对你的代码在干什么的了解,比你多得多」。他见过太多项目为了躲开虚函数,在每个函数开头手写一个 switch 把它笨拙地重新实现一遍——这是实实在在的倒退,因为编译器常能把虚调用去虚拟化,而你的 switch 不能。
做出来,然后把代码和数据一起发出去。Trifecta 是这样,galmon.eu 的卫星监控是这样,收录三万多条染色体与质粒的 SkewDB 是这样(还发在了《自然·科学数据》上),把荷兰建筑与地址数据库变得能用的 bagconv、把荷兰议会开放数据做成可用网站和 SQLite 库的 tkconv 也是这样。他自己给这套习惯下过定义:写作让你发现你不懂自己在说什么,动手让你发现你连自己写的是什么也不懂。
先说清楚自己这个模型不是什么。这是他最容易被忽略、也最值得抄的一条。他那篇讲全球变暖的长文自称是「球形奶牛」模型,并且把话说在前面:
Very important to note is that our "spherical cow"-grade model is of course not correct (no model is), but it strives to be educational and capture the key effects.非常重要的一点:我们这个「球形奶牛」级别的模型当然是不正确的(没有哪个模型是正确的),但它力求有教益、并抓住关键效应。A Spherical Cow Model of Global Warming (With Data and Code),2023 年 9 月 25 日
紧接着他还划了收信范围,这几句很有他的味道:「我非常想听到下面计算中的错误,但你没有必要告诉我这个模型是一个巨大的简化。也真的没有必要给我寄什么推翻了全球变暖的替代研究。」
公开承认自己不懂的部分,并且指路。疫苗那篇里脂质递送系统那一整块,他直接让给了药物化学家 Derek Lowe,理由是「那是我没有能力描述的部分。幸好 Derek 有」。这种交接在他文章里到处都是,而它恰恰是他敢在自己那块地方讲得那么硬的原因。
把话直说,尤其是对技术人。2017 年他写过一篇很短的文章讲这件事,起因是他向办公室经理抱怨清洁工不听他的,对方问他你到底说了什么,他说他「示意」了三楼走廊曾经有过更干净的日子。对方当场诊断出了问题:你在讲故事、在暗示,而没有说出你的问题是什么。他把这条翻译成一句给所有管理者的忠告:
Do not put your important message between the lines. (…) When in doubt: be explicit. It will almost never hurt. Just leave us some room on the "how".不要把重要的信息放在字里行间。(……)拿不准就直说。这几乎从不会有坏处。只要在「怎么做」上给我们留点余地就行。Talking to Technical People,2017 年 7 月 7 日
他给技术人员不擅长读暗示找的理由,大概是他最俏皮的一句:「我们学那一万五千页专家和冷僻知识的时候,总得有点东西被牺牲掉,牺牲的就是这个。」
最后一条更像是性格而不是方法,但它决定了前面所有条目的成色:他会公开改变自己的立场,并且说是谁让他改的。2025 年那篇里,他写下他的激进派朋友「正确地指责了」他自欺欺人。2023 年那篇《论有用》里,他坦白自己曾设计过一个看起来完美的方案——让博士生、产业界和学术资助方三方合作开课,为科学界培养会写软件的人——结论是「纸面上看真是三赢」,但他花了几个月才发现,他自己在这个方案里要干的活是连续几年去谈协议、说服大学、对抗体制惰性,想想就抑郁。于是他没做。他从这件事里提炼的那句话,比任何职业建议都实在:光是找到一件重要的、你又恰好有技能的事还不够,你还得确认你真要干的那些活是你受得了的。「这件事能不能让我星期一早上从床上爬起来」——这才是该问的问题。
锤子问题,他自己写在了标题里。那篇 DNA 长文的副标题是「如果你是一把锤子,看什么都像钉子」,而他也在开头声明「我并不想把我的观点强加给 DNA」。这份自觉是真的。但一篇被译成多种语言、被当成程序员进入分子生物学最佳入口的文章,实际效果仍然是让几十万读者带走了一个印象:生命是可读的代码。
更有意思的是,对这个印象最有力的反驳也是他自己写的。2019 年那篇《生物学是否复杂到我们永远无法理解?》里,他拿出了分子生物学的「氢原子」——乳糖操纵子,一组三个基因,被研究了六十年,任何一本分子生物学教科书都不会跳过它。结果是:教科书上那幅图景「极其不完整」,而他判断,光讲这一个最基本的操纵子,很可能就能写出一千页。他还指出乳糖操纵子并不像教科书说的那样感应葡萄糖的缺乏,它感应的是葡萄糖停止输入后累积起来的另一种化学物质——这种事在生命里比比皆是,清楚地说明生命不是被任何人类意义上的设计者设计出来的。
There is no rule that says nature can not be more complex than our brains can handle. And after billions of years of evolution, why should it be simple?没有哪条规则说,自然不可以比我们的大脑所能处理的更复杂。而经过几十亿年的演化,它凭什么应该是简单的?Is biology too complex to ever understand?,2019 年 12 月 7 日
这两篇文章之间有一道真实的裂缝,他没有合上它,也没打算合上。读他的人应该自己拿着:代码比喻是一部极好的电梯,但它会让你以为楼层比实际少。
主权论证的软肋,也是他自己盘出来的。2025 年底他写了一篇欧洲云现状的年终盘点,那是全站最诚实的一篇,也是对他自己纲领最有力的质疑。他的结论是:买方不会带路,因为他们只关心下个季度的财报;政府得带路,但政府没这个装备;而欧洲自己的云与托管商也没在冲锋。他写得更具体:欧洲的政府和企业被绑得死死的,连把一项服务从一家美国供应商换到另一家美国供应商都很少做得成,因为他们把自己建在了亚马逊、Azure 或谷歌的专有服务上。所以——
So even if you'd show up with a perfectly fine European cloud that offers the same sort of things as (say) AWS, companies and governments would not flock to it.所以哪怕你真拿出一朵完全够用、提供和 AWS 同类服务的欧洲云,企业和政府也不会蜂拥而至。The European Cloud Situation at the end of 2025,2025 年 12 月 23 日
他还补了一条从多位产业界人士那里听来的、连他都觉得犬儒但「听上去是真的」的说法:如果全欧洲的产业都靠着美国云,那万一出事,大家一起完蛋,谁也不会被单独怪罪。
这就把他纲领里的一个洞照亮了。他的诊断锋利,他对「为什么没人动」的分析也锋利——没有人因为规避未来的理论风险而受奖赏。但他给出的行动号召,落点往往是意志力:「拿出勇气去用不一样的软件和服务。哪怕需要适应一下。」把一段二十年没投资形成的产品差距、以及一整套已经长进业务流程里的专有依赖,翻译成「适应一个不同的文字处理软件」,这在修辞上很有力,在工程上却偏轻。他自己举得出来的、真正做成了的例子屈指可数——德国石勒苏益格-荷尔斯泰因州让 80% 的员工用上了自主方案,几个奥地利部委也在推进——而他把这些称作「我们能指出来的极少数地方之一」。他是对的,这正说明问题有多大;但一个纲领如果五年只能指出这么几个样板,那么它缺的可能不只是勇气。
立场的不对称。2020 年那篇 5G 文章有一处很漂亮的自律:他专门引了《金融时报》的报道,说在一屋子电信运营商里问「你们认为中国人能通过华为设备的后门窃听吗」,所有人都举手;接着有人为求平衡问「你们认为美国人能通过思科的关键设备接触通信吗」,「所有的手毫不犹豫地又举了起来」。他当时明确写下:许多针对中国的论证,用在美国身上一样成立。到了 2025–2026 年,这份对称性在文本里几乎消失了,火力集中朝向美国一侧。考虑到那几年实际发生的事——支撑欧美数据传输的法律机制被拆除、微软承认无法保护欧洲数据免于美国窥探、国际刑事法院那件事——这个转向是有充分理由的,不是双标。但读者应当自己注意到:他分析「依赖的代价」极其细致,分析「自建的代价」则明显更粗。
关于批评者:我在准备这一页时专门去找过针对他的、有分量的实名批评原文。能找到的最相关一篇是 Computer Weekly 的《荷兰云先行者遭遇数字主权的硬边界》,但该文我无法打开,所以我不会复述一篇没读过的文章里的论证。这里只报书目事实:这类质疑存在,标题指向的是可行性而非动机;本页第六节的全部具体内容,都来自他自己写下的东西。
/* 和 */、肿瘤是 fork 炸弹、组蛋白 H3/H4 是没人敢动的神圣代码、HOX 基因是 Makefile。本页另据以下篇目写成:Cyber Security: A Pre-War Reality Check(2024-05-14,Botlek 大桥)、Ben je van de IT of niet?(2026-07-15,马桶寓言)、Hoe wordt de overheid weer 'van de IT'?(2026-09-14)、It is no longer safe to move our governments and societies to US clouds(2025-02-23)、The European Cloud Situation at the end of 2025(2025-12-23)、How About Some Actual Innovation(2016-04-17)、Optimizing optimizing(2016-09-22)、Talking to Technical People(2017-07-07)、On Being Useful(2023-07-01)、A Spherical Cow Model of Global Warming(2023-09-25)、Do not invite big-tech to join your digital autonomy discussion(2026-06-16)、疫苗源码第二部分(2020-12-31)。