RTFSC——致敬可爱的Linus以及Linux初代大神们
最近读Linux0.11源码,先被Linus的那句RTFSC惊到了,在读源码的过程中,又被Linus和诸位初代Linux元老们注释中的自娱自乐给萌到了!
于是我就蹭蹭蹭打开所有源码,就有了本文。
好吧,我承认我不务正业。
但是,真的好惊喜!
这是一份来自遥远1991年的,原汁原味的,程序猿们的冷幽默和自娱自乐!
(翻译是直接截的百度翻译,虽不够通顺,大意差不离)
借我们东坡一句,可以使览者一笑。
谨以此文,致敬可爱的Linus以及Linux初代大神们!
1. linux/kernel/mktime.c【1991.10.2】
这个是最有意思的,也是我接触的第一个可爱注释!
哈哈哈,图有点儿长,越分析越觉得有意思,就截得越长了……
真是槽点满满呐!
首先,作为程序猿,需要了解几个“暗号”:
1970:1970年有什么特殊呢?最特殊莫过于,1970年1月1日0点是UNIX TIME的纪元时间,也就是“计算机时间要从1970年1月1日0点开始算起”。
原因呢,上古时期的计算机操作系统是32位,一个int类型的数据是32位,它表示的范围是:-2147483648 ~ 2147483647,用它来代表秒钟数进行计算:2147483647/(3652460*60)=68.1(年)。也就是说用这个数来表示时间如果从公元纪年(耶稣诞生)开始算显然不够用,所以综合当时UNIX的发展历程,取了1970年做为计算机元年,用于计时的开始。
TZ:Time Zone,时区。
“PS:我也讨厌那些想出来用1970做时钟元年的人,难道他们就不能改成只过闰年吗?我也讨厌Gregorius,教皇或不是。我脾气暴躁。”
'whoever though(t) up the year 1970',Linus少打了个t。(感谢 @李晓峰)
Gregorius:甭管故事多乱,反正这个人当过教皇pope :-)
Wiki:
叙事诗:格里高利厄斯(Gregorius)或“好罪人”(The Good Sinner)是Hartmann von Aue写的一首中古德国叙事诗。该书写于1190年左右,用押韵对句写成,讲述了,一个由哥哥和姐姐的乱伦生的孩子,在修道院长大,他不知道自己的出身,娶了他的母亲,忏悔自己的罪行,并成为教皇。
人名:同Gregory。格里高利(Gregory)应该是指把儒略历改为格里高利历的罗马教皇。他增加了整百年份是四百的整数才是闰年的规定。(感谢@章可循
)
小说:Bengt Ohlsson写的。
Linus也表示,分闰年和平年,真的好麻烦!
另外,底下这个有设计感的“leap-years”也是很强迫症呀,O(∩_∩)O哈哈~
我也是没忍住,就把底下这个设计感的三角形截了下来。
用极致的美表达心中极端的愤怒,可以,这很程序猿!
最后两句也很可爱“magic offset”,神奇的offset。
不是闰年,不得不调整,所以表示“为什么不改成只过闰年?!”
本想发个说说简单调侃一下,结果看到了下面那条“互相调侃”的注释,于是没忍住,满篇找起注释来。。
2. linux/kernel/vsprintf.c【1991.10.2】
这个就更精彩了,Linux初代程序猿们通过注释“神交”,互相调侃,最后来一个意味深长的微笑
:-)
自省体会,你懂的
想起Linus的经典RTFSC :-),就是以 :-) 结尾的。
刚刚发现了个神奇的功能,office的word中,打出:-)会自动变成☺,按Ctrl+Z才能还原!好神奇!
作为程序猿,在暴躁的时候,不妨学习下初代们,可以在注释中多打几个:-)或☺,以示f**king!
恍然大悟,难道这就是“微笑”表情不同寻常的根源!惊!
3. linux/kernel/console.c【1991.11.24】
字里行间都是满满的期待,期待无Bug(我猜需要一个锦鲤hhh)
又看到了其他小伙伴儿的身影,“John T Kohl”和“Galen Hunt”。
4. linux/lib/malloc.c【1991.11.29,tytso】
从注释第一行就能看出来啦,少有的没有文件路径的注释。
显然“Theodore Ts'o”的编程习惯可能不如我们的Linus,也有可能是没有设置自动生成注释,或者其他什么原因┓( ´∀` )┏
突然产生一个想法,Linus虽然解释,是他的朋友Ari Lemke坚持要把他本来为系统取的名字“Freax”改为他名字的谐音“Linux”,“所以我可以光明正大地说我并不自负”,但我觉得他每次看到根目录Linux的时候,心里一定美滋滋~
毕竟,程序就是程序猿的孩子。
我们的“Theodore Ts'o”大神还是很仔细的,在这个“*must*”有序的list的最后,加了个结束标记,以防修改!
5. linux/kernel/blk_drv/ramdisk.c【1991.12.2】
这次,我们的“Theodore Ts'o”写了完整路径:-)
6. linux/fs/exec.c【1991.12.2】
Linux是Linus的自豪!
哇塞,又发现一个表情!TYT,这是大哭的意思吧。。。
看来Linus在写这部分的时候真的被虐得很惨 :-)
奇迹出现 :-)
7. linux/mm/memory.c【1991.12.3】
Linus在这个memory.c文件中,几乎是注释最多的,而且也修改多次,每次都有记录,可见他在此处的用心!
应该很容易实现,一个月后,需要费点儿小把戏,似乎可以了,运行和我想的一样好,我做的还不够。
这可不就是一个程序实现的心路历程嘛。
第一个,其实也是最后一个hhhhh
我们的微笑脸又出现了,:-)真的是程序员专用了233
最复杂的函数。不想debug:-)。
所有程序员的最大愿望,都是“bug-free”,好吧,真的不想debug。
然鹅,总是事与愿违┓( ´∀` )┏
这一段看得我有点儿感动,这就是历史时刻了吧!
他在这里没有做好的时候,说自己“stupid”,还表达了强烈的愿望“我真的想要GNU的libc.a”。他写这个Linux系统的初衷,真的只是学习,或者玩一玩儿操作系统,而他真正的厉害所在,也就是这句“我真的想要那个GNU libc.a”,他等不及GNUC编译器的开发了,于是索性自己写。。。
即使到最后的发行版,代码中不免还是有疑惑,且留与后人评说……
8. linux/tools/build.c【1991.12.4】
这个注释本身也没什么笑点,只是这里有个名字“tytso”,有点小疑惑。
在赵炯《Linux内核0.11完全注释》第9页,有提到除Linus之外的另一个著名早期开发者“Theodore Ts'o (Ted Ts'o)”,不知道是不是同一个人呢?如果是的话,名字好像错了hhhhh
发音好像是一样的,难道歪果仁只在乎发音?不晓得┓( ´∀` )┏
反正也是个点儿,就mark一下好啦。
PS:哇塞,没想到我还真的猜对了,从lib/malloc.c中的邮箱不难看出,“tytso”就是“Theodore Ts'o”没错了。
9. linux/kernel/floppy.c【1991.12.7】
Linux的创始人说“我不喜欢编程”,这……
让我无法不想起凡尔赛文学,“不知妻美刘强东,普通家庭马化腾,悔创阿里杰克马,一无所有王健林。”
再加一句“不喜编程Linus”:-)
不过,人家Linus说的并不是不喜欢编程,而是“不喜欢编写多软盘驱动,因为不管怎样我也只有一个软盘。。”!
but I don't like programming floppies. 不是不喜欢编程,而是不喜欢写软盘驱动支持多个软盘,floppies 应该是多个软盘,后面他说了他只有一个软盘。(感谢 @trojiii )
二傻子百度翻译,没救了!(这句撤回,我好像比机翻不强。。。)
graceful error recovery,优雅的错误修复工作!好吸引人的graceful,可惜我大多数都是灰头土脸地debug :-)
10. linux/init/main.c【1991.12.8】
这个注释本身很普通,但是,从他的三个“!”和大写的“NO COPY ON WRITE”我们不难看出,Linus一定是被这个问题导致的Bug折磨得超级惨,所以一定要“!!!”,才能表达内心的愤懑!!!
所以说,程序猿们的脾气暴躁(I'm grumpy),是一种传承:-)
其实,真的是工作性质导致的,想想你被一个“超级低失误”导致的Bug折磨两天的心境吧,不摔键盘砸电脑已经很好了兄嘚!
不过这也只限于工作嘛。
日常生活中,我们的程序猿小哥哥小姐姐们还是很和善的!
11. linux/kernel/tty_io.c【1991.12.9】
所以,Kill-line到底是啥?继续往下看。
看到这里注释,才知道是“杀死输入行”。
Jeh竟然是“耶”?!
“如果有人证明我错了,我会永远恨intel :-)”
hhh,好可爱的Linus。
12. linux/kernel/traps.c【1991.10.31】
其实这段本身没什么特别的,只是这个“kill”,我们不难理解,Linux中为什么直接用kill命令来杀死一个线程了。
转念一想,不对,好像在Linux之前,Unix系统估计本来就有kill命令,好吧,我想多了。。
我的天哪,12个文件而已,就这么点儿注释竟然要耗了我4-5个小时!
借用Linus的话,RTFC :-),Read The F**king Comment☺!
— 完 —