图灵访谈之十八:专访Mike Gancarz

20年前,X Window System的开发者Mike Gancarz将Unix社区普遍认同的一些准则整理成Unix Philosophy,让GNU/Linux等后来者能站到巨人的肩膀上。10年前,这本书的第二版Linux/Unix Philosophy得以出版。如今,基于Unix思想体系的Linux、iOS、Android等已经成为全球范围内的主流系统,Mike的远见卓识得到印证。图灵社区有幸邀请Mike Gancerz接受邮件采访,谈谈《Linux/Unix设计思想》、操作系统的前世今生、开源运动的前景等。

图灵社区: 首先,我想感谢您为我们创作了这样一部关于Linux和Unix哲学的大作。从您个人角度出发,是什么激励您写出了Unix PhilosophyLinux and the Unix Philosophy这两部书呢?

Mike: 谢谢你的夸奖。我很高兴自己的书能带给读者一些启发。当然,我其实也很享受创作这两本书的过程。

当我还在DEC公司Ultrix(Ultrix是DEC的Unix产品)工程组工作时,人们早已就The Unix Philosophy的内在理念讨论了很多年。在享用午餐时,我们会孜孜不倦地相互强调小程序是多么好用,可移植性/便携性是如何至关重要,等等。此外,我们不只流于讨论,还在技术生活中贯彻实施了这些准则。

其实,直到我转去DEC在佐治亚州阿尔法利塔市的Ultrix电话客户支持中心工作之前,我并未真正意识到我是多么地迷恋Unix哲学,并遵循其准则来构建系统。在那里,似乎也没有任何人意识到Unix的做法与其他系统是大相径庭的。因此,我为大家做了一些幻灯片演示,概要阐述了Unix哲学,并将Unix系统作为一种教学工具使用,每年还会给组里的新人分发几次教程。后来,在一次“DEC用户协会(DECUS)”举办的研讨会上,当我做完演示后,有一位编辑提出我教授的这些知识可以作为一本书的创作素材。这便是The Unix Philosophy的缘起。

Linux and the Unix Philosophy的情况却有些不同。出版商和我都意识到,尽管哲学是永恒的,但The Unix Philosophy中的一些素材却有些过时了。于是,我们才有了出第二版的想法。但问题是,作为一个操作系统,Unix的声望在不断下降,而Linux却迅速地得到了人们的普遍认可。在贯彻Unix哲学的同时,该系统并未像Unix那般商业化。经过与编辑的多次讨论后,我们终于决定将这本书的书名变更为Linux and the Unix Philosophy

图灵社区:近年来,您为Linux(包括内核)开发和应用做了哪些新工作?

Mike: 虽然我对Linux内核开发者怀有无限敬意,但我本人的关注点却一直是用户空间的应用。其实,我在DEC最喜爱的项目之一便是将整个Unix指令集移植到64位DEC Alpha芯片。打个比方说,如果将Linux比作是一辆车,那我其实对它的发动机并不感兴趣。我更关心它可以带我去到何方,以及,我是否会享受这些旅程。

近年来,围绕Linux的开发活动呈爆发性态势,我们已经很难跟上所有项目的进展情况。比如说,就算你只想专注于Linux用户界面这一块,但该领域涵盖的内容多而广,你最多也只可能掌握其中的一部分技能。所以,目前我仅在系统编译及工程项目部署这两方面花了很多时间。在这两个领域里,脚本工具的使用依然很频繁。虽然,现今的脚本工具都略有不同,但脚本仍然是一个很强大的工具。我很享受这种只编写一行代码,却能利用上别人撰写的数千行代码的喜悦感。

图灵社区:您总结概括的这些准则都基于Unix的历史和文化、黑客精神、自由软件运动以及您与Unix / Linux社区人群普遍采用的做法。素材来源如此之多,再加上Unix哲学文化的博大精深,您是如何将这些精要准则提炼出来的呢?也就是怎么通过一个短语和句子来总结Unix哲学的精髓?

Mike: 通过在用户会议及其他论坛上的互动活动,我们大部分人开始体会到Unix有着一些核心理念。多年以来,Rob Pike、Kirk McKusick、Brad Cox、 Jon “maddog” Hall与其他人也都在谈论着小程序的重要性,即它们可以轻而易举地组合在一起去完成大规模的任务。我并未发明所谓的Unix准则,我只是把这些“大拿”们谈到过的理念如实记录了下来。

如何用一个短语或句子来总结Unix哲学呢?这确实是个难题,因为每一条准则单独存在时,根本就体现不出其优势。只有将它们视作一个整体,我们才会发现Unix哲学的博大精深之处。我想你们可能会认为,程序应该做且必须要做到的最重要的事情,就是与另一个程序交互。大多数Unix版本的开发都是基于这个思想,如果你能正确构建软件,它就永远能与其他软件进行交互,从而始终如一地遵循Unix哲学理念。

图灵社区: 您提出了一个有趣的概念——“人类创造的三个系统”,您还指出Linux同时兼具第二个和第三个系统的特性。那么,目前Linux进化到了哪个阶段?它是否已经达到了“第三个系统”的标准呢?

Mike: 相比本书创作时,Linux现在要更为接近“第三个系统”的状态。事实上,我认为如果你忽略掉某些Linux发行版那繁琐的安装机制,其实大多数Linux已经算得上是“第三个系统”了。当然,在Linux平台上,仍有一些子系统正处于演化进程中。例如,触摸用户界面与移动世界就是两大能说明Linux仍在不断发展的代表性领域。

图灵社区: 您曾经预测,Unix将成为计算机世界的首选操作系统。并且,Linux作为Unix的变种,最有可能实现这一预测。十年后,Linux在企业领域与桌面领域的发展各不相同。您如何看待此前这一预测?

Mike: 虽然我预测得没错,但是它并没有朝着我原本预期的方向发展。Unix确实是计算机世界的首选操作系统,今天,它已成为除Windows之外的所有主流操作系统的根源。 而Linux还牢牢雄踞企业级服务器系统的江山。另外,叫好又叫座的Android操作系统也是基于Linux内核开发的。更不用说iOS是从Mac OS X演变而来的,要知道Mac OS X可是Unix的衍生品。单纯以平台数量而论,除掉桌面领域,从Unix派生出的操作系统几乎可以说是无处不在。

其中,真正具有讽刺意味的是,虽然Linux因传说中用户界面的不好用而未能主宰桌面领域,但Linux与Unix都在移动环境下得到了蓬勃发展,这主要是因为开发人员重新为该环境定制了一些好用的用户界面。所以Android和iOS用户总数其实要远超Windows的用户数量。尽管大多数用户不知道Linux或操作系统到底是什么,可实际情况就是如此。

图灵社区: 关于“可移植性/便携性”,您曾经说过“使用最频繁的那台机器才是最强大的计算机”。那参照这个标准,iPad与智能手机岂不就是最强大的计算机么?我们还想知道,目前的移动互联网热潮将会给Linux带来何种机遇与挑战?GNU/Linux在移动互联网的发展前景如何?

Mike: 是的,按这个标准来衡量,智能手机与平板电脑等移动设备早已赢得了这场战役。这是因为大多数人都是内容消费者,而不是内容生产者。还记得“内容为王,傻瓜!”这一章节吗?移动设备为用户提供了最高便利,使得他们可以随时随地获取他们喜爱的内容。

此外,用户是内容消费者而不是生产者这一倾向使得移动互联网占据了一定优势,但对Linux本身而言影响不大。目前,带宽不足这一普遍问题限制了移动互联网的发展,但我相信它最终还是会解决的。另一个棘手问题就是,很多网页的设计是基于让多数用户连接到同一Web服务器的理念。如果同时有一百万用户希望能在一小时内下载某个视频,网站就很难满足所有人的需求。已经有人在着手解决此问题,他们将迫使Linux网络领域的人们去重新思考,到底该如何处理海量信息的缓存与传输。

Linux在移动领域中的最大机会之一就是“云计算”。每个人都希望能在世界各地通过任何设备来获取数据。但与此同时,他们也希望系统能做好数据备份并保证其安全。作为计算基础设施的头号操作系统,Linux已在“云计算”领域立稳了脚跟。而且,它还会在可预见的未来继续增加市场占有率。这恰恰印证了我们在书中提到的一个观点,计算机应做的最重要事情之一就是与其他计算机交互。可靠的网络通信是“云计算”的一个基本要求。

未来,在移动世界Linux要面对一些安全性方面的重大挑战。这同样是具有讽刺意味的,因为此前Linux一直被视为比其他同类产品更为安全的产品。其中,也有诸如Android这样基于Linux的开放系统。目前,开放状态对它们来说可谓是喜忧参半。也许,人们可以只通过认证机构来下载应用程序。亚马逊已经在朝着这个方向努力,更不用说苹果早就采用了这一做法,即该公司旗下的在线应用商店(App Store)。 不过,目前为止我仍然没看到真正的解决策略,因为每个人都有自己的衡量标准,拥有绝对安全的自由度是一件很难的事情。你需要放弃一些东西,非此即彼。而且,人们都对所谓的安全界限有着不同看法。

图灵社区: 在这本书里,你用了很长的篇幅来抨击“强制性的用户界面(CUI)”,但今天CUI已成为计算机系统中的主导界面。你会如何解读此情况?

Mike: 在命令行shell接口中,CUI指的是那些强制性获取用户注意力,并防止他们执行其他程序的接口。除非他们先完成此前任务才能脱离CUI的控制。然而,在图形化环境中,CUI指的是模态(Modal)界面。例如,锁定用户的强制性对话框,此类对话框在用户给出响应之前是不会释放系统资源的。目前,大多数用户界面已经克服了这一壁垒,哪怕是在资源有限的移动环境也一样。这说明,曾经的哲学理念现已成为常识。

图灵社区:有很多中国程序员渴望能投身到开源活动中,但他们不知道自己是否能依靠此类软件过活。您能够根据自己的经验给他们一些建议吗?

Mike: 虽然我不想假装自己能理解中国程序员所面临的软件市场环境,但我想说的是,正经加入一家公司并为其开发某些应用程序或系统更靠谱。如果公司允许你将代码贡献给开源社区的话,这会是一件好事情。也就是说,程序员的首要任务是生存,他们和芸芸众生一样,先得解决好温饱问题才会有闲情逸致去考虑其他。所以,在满足生存需求的前提条件下程序员还能做出一些无私贡献是最理想的状况。

那么,如何能在为他人提供免费软件之余,还能养活自己呢?开源社区的普遍做法是为该软件的用户和其他开发人员提供技术支持,这确实可行。当然,我也见证过很多尝试此运营模式,但最终还是失败了的公司。因此,我建议公司与个人都应该先专注于做好自己的本职工作。在项目成功之后,如果你想与大家分享自己的代码,并确实这么做了,那所有的人都会从中受益。

图灵社区: 前两本书阐述了相同的哲学原理。如果您有机会就类似主题创作第三本书的话,您会对Linux/Unix Philosophy的九大基本准则及和十条小准则作修订与补充吗?

Mike: 哲学是永恒的。这些准则依然是真理,我顶多会修改一下其中的规范,让它们变得更为通用。比如,“使用脚本来提高软件杠杆效应”仍然是一个伟大的想法,但shell脚本正在被诸多新工具取代。不考虑用户环境,“强制性的用户界面”其实本质上是“模态用户界面”。所以我可能会将该准则改为“避免模态用户界面。”

此外,苹果目前取得的成功恰恰可以证明“哲学是永恒的”。但凡在苹果充分实践了Unix/Linux哲学的领域,它都独占鳌头。想要“可移植性/便携性”吗?苹果将用户的整个音乐收藏库放进你的口袋、平板电脑及桌面机中。比起iTunes桌面界面,市场上有诸多高效的用户界面。然而,“可移植性/便携性”这一因素却屡获成功。那么,“只做好一件事”的小程序又是什么情况?听起来iPhone应用程序不正是在贯彻这条准则吗?什么是软件杠杆效应?苹果并没有亲自去撰写运行在其设备上的软件,它只是充分调动其他开发人员来为其编写应用。

当我兴起就类似主题而编写第三本书的念头时,我会问自己一个问题,“Linux/Unix哲学适用于现实生活的情况吗?”想想在非计算机世界中去“尽快建立一个原型”的适用性。 “让每一个程序都成为过滤器”在现实生活中可以转化为“从某处获取信息,整合成新资讯,然后发送给相应的消费者”。还有“寻求90%的解决方案”变成“不要为所有人建立一揽子解决方案,能处理大部分人的需求即可”。如果人们需要一本在总体生活层面上的Unix哲学书,我也许会沿袭这些思路去改写我的书。

图灵社区:Linux and the Unix Philosophy的最后,您讨论了一些在当时(2003年)就已采用了Unix哲学的“新技术”。那么,现在您能否为我们介绍一下最近十年间还有哪些技术符合Unix哲学吗?

Mike: 好吧,我其实可以与大家讨论一些诸如近场计算(near field computing)与分析,以及整个社交网络热潮中的技术。但是,“授人鱼不如授人以渔”,我宁愿选择后者,让我们从以下这些层面来思考吧。

随着新技术与生活的联系越来越紧密,我们可以仔细观察它们都是如何贯彻Unix哲学的。一项技术是否做到了“舍高效率而取可移植性”?公司是否达到了“只做好一件事”这个目标,还是他们试图去取悦所有人的需求?产品在价廉之余,是不是能够高效运行,即满足“更坏就是更好”这一准则?还有,你脑海里冒出的新想法是“第一个系统”吗?或者,你已经看到它有成为“第二个系统”的倾向?请注意,其中又有多少想法能明显转变成“第三个系统”呢?此外,有多少在十年前被人们视作奇思怪想的概念,到现在却被人们视作常识了呢?你是否又有这个鉴别能力,可以洞悉今天的“第二个系统”(比如,社交网络)中真正有价值的部分思想,也就是那些能将其转化为“第三个系统”的核心概念?


更多精彩,加入图灵访谈微信!