一个空格引发的惨剧
你是否相信如果你的程序里没有检查一个变量会导致怎么系统瘫痪?无论你相不相信,这是我一个亲身经历过的案例,你可以在本站的程序员那些悲催的事儿中找到很多这样的事。这样的事昨天在发生,今天同样在发生。Unix40多年了,在这40年里,程序员发生过各种各样的的惨剧,但是大多数的事情一而再再而三的重演。
今天的你,可能在开发者各种各样NB的系统,你会相信你的一个空格也能导致系统瘫痪吗?也许你可能很难相信这个事。不过,再下面这个事将告诉你这个血淋淋的事实 —— 一个空格产生的bug可以让你的系统瘫痪。
bumblebee是一个开源项目,这个名字也就是变形金刚里的大黄蜂,这个项目是这样介绍自己的——
bumblebee is Optimus support for Linux, with real offloading, and not switchable graphics.. More important.. it works on Optimus Laptops without a graphical multiplexer..
Optimus 是NVIDIA的“优驰”技术,其可以将您的笔记本电脑PC提升到绝佳状态,提供出色的图形性能,并在需要时延长电池续航时间。这个项目是把这个技术移到Linux上来。
这个项目本来不出名,不过,程序在其安装脚本install.sh里的一个bug让这个项目一下子成了全世界最瞩目的项目,这个bug的fix如下:
@@ -348,7 +348,7 @@ case "$DISTRO" in
- rm -rf /usr /lib/nvidia-current/xorg/xorg
+ rm -rf /usr/lib/nvidia-current/xorg/xorg
看明白了吗?空格。这个空格会导致什么样的问题呢?呵呵。你有没有感到菊花一紧?这个bug绝对的霸气外露!真是验证了“如何写出无法维护代码”的那句话——“测试你的程序是一种懦夫的行为”。
不过,最精彩还不是这个bug,而是全世界程序员的对这个bug 的 code review comments,真的相当的欢乐。请强势围望!
https://github.com/MrMEEE/bumblebee/commit/a047be85247755cdbe0acce6#diff-1
重点是其中的很多图片——下面的图片众多。
http://pic003.cnblogs.com/2011/34358/201106/20110620115951113.gif "clip_image001"
http://pic003.cnblogs.com/2011/1/201106/2011062012551463.jpg
http://pic003.cnblogs.com/2011/1/201106/2011062012574297.jpg
http://pic003.cnblogs.com/2011/34358/201106/20110620115951524.jpg "clip_image002"
http://pic003.cnblogs.com/2011/1/201106/2011062012590122.jpg
http://pic003.cnblogs.com/2011/1/201106/2011062013022333.jpg
http://pic003.cnblogs.com/2011/1/201106/2011062013033063.jpg
http://pic003.cnblogs.com/2011/1/201106/2011062013042755.jpg
http://pic003.cnblogs.com/2011/34358/201106/2011062011595582.jpg "clip_image007"
http://pic003.cnblogs.com/2011/34358/201106/20110620115958644.jpg "clip_image010"
http://pic003.cnblogs.com/2011/34358/201106/20110620115959784.jpg "clip_image011"
http://pic003.cnblogs.com/2011/34358/201106/20110620120001976.jpg "clip_image012"
http://pic003.cnblogs.com/2011/1/201106/2011062013060775.jpg
http://pic003.cnblogs.com/2011/34358/201106/20110620120001634.gif "clip_image014"
http://pic003.cnblogs.com/2011/1/201106/2011062013073049.jpg
http://pic003.cnblogs.com/2011/34358/201106/20110620120002955.gif
http://pic003.cnblogs.com/2011/1/201106/2011062013083437.jpg
http://pic003.cnblogs.com/2011/1/201106/2011062013090259.jpg
http://pic003.cnblogs.com/2011/34358/201106/20110620120002202.jpg "clip_image016"
http://pic003.cnblogs.com/2011/1/201106/2011062013110568.jpg
http://pic003.cnblogs.com/2011/1/201106/2011062013121496.jpg
http://pic003.cnblogs.com/2011/34358/201106/20110620120002718.jpg "clip_image019"
http://pic003.cnblogs.com/2011/34358/201106/20110620120003540.jpg "clip_image020"
http://pic003.cnblogs.com/2011/34358/201106/20110620120004356.jpg "clip_image021"
http://pic003.cnblogs.com/2011/1/201106/2011062013135533.jpg
(全文完)
(转载本站文章请注明作者和出处 酷 壳 – CoolShell ,请勿用于任何商业用途)
相关文章¶
- API设计原则 – Qt官网的设计实践总结
- 从Code Review 谈如何做技术
- https://coolshell.cn/wp-content/plugins/wordpress-23-related-posts-plugin/static/thumbs/14.jpg千万不要把 bool 设计成函数参数
- 重构代码的7个阶段
- https://coolshell.cn/wp-content/plugins/wordpress-23-related-posts-plugin/static/thumbs/30.jpg如何写出无法维护的代码
- https://coolshell.cn/wp-content/plugins/wordpress-23-related-posts-plugin/static/thumbs/27.jpg代码重构的一个示例 The post 一个空格引发的惨剧 first appeared on 酷 壳 - CoolShell.