这是一个什么样的传统文化和设计哲学呢?可以用“简单”和“傻x”来概括,也就是Keep It Simple and Stupid,简称KISS。这是所有Unix以及Linux这样的类Unix操作系统的传统文化和设计哲学。这里最重要的就是傻x,因为往往傻x和精明就是一念之间的事儿。 4.6.1 “傻x”的精明 能够说明这种Unix传统文化和设计哲学“傻x”的地方有很多,比如:文件就是简单的纯文本文件,在字节层面再无结构可言,处理这种文件有时费时又费力;文件一旦删除就再也无法恢复,对于用户的一些误操作没有任何补救措施;安全模型过于原始,使用起来复杂难耐,只有一个权限超大的root用户,一处被攻击则意味着全盘沦陷;等等这类。其他的选择不是没有,可是基本上都没什么好下场。比如:试图想改变文件无结构这个问题的方法有很多,但现在却没有几个人能记起它们都是什么,即便是如今最先进的Hadoop分布式文件系统中,推荐的文件类型依然是纯文本文件;文件删了就没法恢复,很多人觉得这个设计有些欠妥,但是当使用能够恢复文件的文件系统而导致自己的艳照漫天飞时,又憎恨为什么自己删不掉它们;虽说安全模型过于原始,可是那些改变策略的家伙却一直被病毒和流氓软件所困扰,而坚持采用这种安全模型的Linux,纵使已经非常广泛地被人们所应用,却很少有人担心自己的系统被病毒或流氓软件入侵。 其实,这些都不是最主要的争论点。最主要的,而且是旷日持久的争论,恰恰是这种设计哲学的最重要的一个特性——提供一套“机制,而不是策略”。基于这种设计哲学而产生的一个设计倾向就是:行为的最终逻辑被尽可能推后到使用端。所以你会发现:在Linux中可以有很多种shell供用户选择;图形界面也有很多种窗口管理器供用户选择;甚至重要的系统初始化过程,在不同的发行版都有不同的策略和配置文件集。每一个Linux用户都可以有一个与众不同的Linux。这一切都让初学者那么眼花缭乱,最终不知所措。因此,这种设计哲学也导致了Linux等这些类Unix系统丧失了大量初级用户,经常被人嘲笑它们的“傻”。 然而,如果只看眼前的话,这种自由放纵还有点“傻x”的传统文化和设计哲学,的确会让所有采用这一哲学而设计的系统丧失大量初级用户。但是从长远考虑,最终你会发觉这个“傻x”换来了至关重要的优势:策略相对短寿,而机制才是长命百岁。那些标榜着提供简洁性操作的设计常常会走进明日进化的死胡同。 Linux爆炸式的发展也正是受益于将这种“傻x”式的设计哲学发挥到极致的结果所致。加之互联网技术重要性的渐增,开源运动的兴起,都给了我们充足的理由来否定对这种设计哲学的怀疑。虽然“开源”这个术语和开源的定义一直被人们误认为是随性懒散的,甚至有一些“傻x”的嫌疑。但是自由共享源码的同僚严格复审的开发方式也是打从Unix文化的诞生之日起就拥有的最具特色的部分。这也就是Linux内核一直采用基于互联网这种松散式开发方式,而却没有导致自身分裂或者凌乱不堪的根本所在,更没人敢嘲笑Linux内核的开发者们都是“傻x”。开源的一个重要好处就是将弱点暴露给世人,而不是成为那些所谓的核心机密。这吸引了大量hacker的涌入。能够修复一个软件的漏洞被这群人认为是好玩儿的。好玩儿则代表了趣味性,而趣味性又是峰值效率的标志。充满痛苦的工作只会浪费劳动力和耗尽创造性。这导致的一个结果就是:高质量的开源开发工具在这个星球上已经极其丰富,开源的应用程序也已经达到甚至超过了它们专属同侪的高度。这些开发工具和应用程序可以自由修改、重用和再造,又节省了大多数软件开发者90%的工作量。显然只要花10%的努力就能够完成100%的工作又是一件好玩儿的事情。这就像野火一样,无法控制地蔓延开来,使得开源软件的力量越来越大,大到人类已经无法阻止了。况且一直有一个地方是被人们所忽视的,那就是没有任何人说过开源的软件一定是免费的。到了这份田地,还有人说开源者们“傻x”吗? 4.6.2 “简单”不简单 虽然“傻x”是这种文化和设计哲学的重要部分,但是也不能忽略“简单”这一本质特性。你可以说是因为过于简单而使得它“傻x”,也可以说是因为“傻x”导致了简单。反正既然说的是哲学,你就得用哲学的思想去思考。 简单使得更加专注。最显著的特征就是我们熟知的Linux系统上的每一个工具软件大都只会做一件事情,其他类Unix系统也是如此。开发者可以足够专注地将这一件事情做到极致。这样所产生的一个现象就是:很少有人去尝试替换这个工具软件,实际上也没有人能够做到。除非这个工具软件要做的事情没人去做了,但是这种事情发生的概率又很少。对知识的投资极具性价比! 简单使得系统更具普适性。比如Linux系统中大多数文件都是纯文本文件,各种程序之间的通信方式也是文本流。因为所谓文本就是没有特定格式的简单字符序列。好处就是人们不需要专门的工具就可以很容易地读写和编辑。在编写和调试程序的时候,可以非常容易地察觉输入和输出的变化。文件可以长期保存,永远不会因为格式的过期而导致没有合适的查看工具。每个需要与其他程序通信的程序不用假设对方的通信协议,也不用限制自己的通信协议。这样,即便面对未来的程序也不会发生问题。 简单容易让人掌握。Linux系统和其他类Unix系统所提供的API(应用编程接口),大多数就是C的标准库函数。有过C语言开发经验的程序员,就可以直接在这些系统上进行开发,不需要特别学习。这样带来的好处是显而易见的,即所有采用标准C所编写的程序可以不经修改地移植到这些系统上;在这些系统上所开发的软件也可以很容易地移植到其他支持标准C的系统上。这主要的原因也是因为C起源于Unix,Unix API的很大一部分成为了C的标准库函数。由于C语言的简单才使得大多数开发人员都掌握了它,从而奠定了这个坚实的基础。 简单才能灵活。按照这种设计哲学而设计的应用程序接口会尽量做到小巧,并通过提供众多的程序粘合手段,使得所有类Unix系统的基础工具箱的各种组件连纵开合后,将获得单个工具设计者无法想象的效果。这是彻头彻尾的灵活性。“一根筷子轻轻被折断,十根筷子牢牢把成团”这样的科学真谛,也在这里体现的淋漓尽致。 综上所述,这些都是简单所带来的好处,但并不仅限于这些,只是无法一一穷举。看似简单的东西往往是不简单的。这与我们传统的唐诗宋词是有一拼的。谁都知道五言绝句好记又好读,毕竟只有20个字嘛,还合辙押韵。可是现今能够流传下来的却不多。因为能写五言绝句的都是大师级的人物,能够写好的都是大师中的大师。虽然只有20个字,却能表达出用2万字都无法描摹到位的意境,难度是绝对的不同凡响的。可是大师就那么几个,你不能指望他们什么都不干天天写这个不是? 正如五言绝句是中华民族传统文化的精粹那样,“简单”是Unix文化的精粹。不同的是,五言绝句需要大师写,而Unix的“简单”加上它的“傻x”却塑造了一批大师。更有甚者,Linux继承了Unix的传统文化和设计哲学之后,又与互联网文化相融合,使得我们人人都能成为大师!