2026-10-17 06:49:40
漏洞为什么叫bug
1947年9月9日,漏洞哈佛大学马克Ⅱ型计算机又罢工了。漏洞操作员葛丽丝·霍普拧开继电器外壳,漏洞用镊子夹出一只被高压电烤焦的漏洞飞蛾。她在日志本上粘住尸体,漏洞标注“First actual case of bug being found”——这是漏洞人类第一次有记录地“抓到”程序错误。但“bug”这个词本身,漏洞比这台占地170平方米的漏洞庞然大物老得多。 爱迪生才是漏洞真正的始作俑者。1878年他给助手写信抱怨:“我的漏洞新留声机里有个bug,线路接触不良。漏洞”那时“bug”在英国俚语里指“令人烦恼的漏洞缺陷”,源头可追溯至16世纪“bugbear”(吓唬小孩的漏洞妖怪)。爱迪生把电路故障称为“bug”,漏洞纯粹因为工程师们习惯把一切怪毛病归咎于“机器里钻进了虫子”——这比“error”形象得多,漏洞比“defect”多了点活物感。 为什么偏偏是“虫”?你看,早期计算机全是继电器和真空管。继电器触点间距不到0.5毫米,一只果蝇侧身就能挤进去。真空管发热时散发的焦糖味,对昆虫有致命吸引力。1940年代IBM的维修手册甚至专门列出“昆虫损害处理流程”。更妙的是,当程序逻辑出错时,工程师排查半天找不到物理虫子,只能自嘲“这bug是隐形的”——于是“bug”从实指变成虚指,从硬件故障扩展到软件逻辑错误。 真正让“bug”一统天下的是编程语言。1950年代程序员写代码用穿孔卡片,一张卡片一个语句。如果卡片边缘卷曲或沾了咖啡渍,读卡机就会跳过或误读——这种物理性错误没法叫“error”,因为语法完全正确,只是数据“脏了”。程序员们需要个词来区分“我的代码错了”和“机器读错了”,前者是“mistake”,后者是“bug”——带着点不可控的、需要靠运气才能逮住的意味。 现在你打开IDE,报错信息清清楚楚写着“NullPointerException”。没人会管这叫“空指针虫”。但当你调试三小时,发现是某个变量名拼写错误时,你脱口而出的还是“这破bug”。因为“bug”承载的不仅是技术故障,更是一种情绪——那种“明明每一步都对,但结果就是不对”的荒谬感。就像1947年的那只飞蛾,它没做错什么,只是恰好飞进了历史。而每一个写代码的人,都曾当过那只飞蛾。