猜想:互联网ID,“死号”判定与回收

GD Star Rating
loading...

注:本文所有内容均为100%原汁原创,允许转载,但转载前请发邮件至[email protected]或评论告之,并在转载时附加出处信息,多谢配合!

这个题目很早之前便开始在脑子里转了,之后陆陆续续又有很多零碎的想法,却一直没有整理。最近离开了忙了2年的创业公司,下个工作又不知何时开始,于是窝在杭州,陪陪老婆,修身养性,顺便整理之前的诸多想法。此篇便是之一

开篇

本篇猜想基于当下互联网上这样一个大环境:你是不是有这样的经历,在google上搜索某个软件的下载地址、电影的bt种子或者连续剧的e2k链接地址,结果列表里有不少论坛的链接,点进去,发现是篇帖子,所需链接被大号、加粗甚至大红大绿进行修饰。刚欣喜若狂地试图点击“下载”,却被提示“本贴所包含附件需要登录才能显示”,或者“附件需要回复本贴才能看见”。于是郁闷地开始注册,便更无奈地发现经常在坛子里使用的ID却“已被注册”或者“不可用”……好吧,加个后缀,jayxu2011怎么样?于是,我注册了一堆类似jayxu2010、mustangxu2009、ijay_2011的用户名,麻烦,而且只会使用一次……随着互联网用户的爆炸性增长,以及越来越多的“老字号”网站(年头很久,比如google、gmail、搜狐、新浪等,i),或者用户粘性很强的sns网站(比如facebook、twitter、youtube等,ii),或者gtalk、msn、kik等和手机号一样用户名需要稳定的im工具(iii)的大量兴起,这种用户名冲突的情况会越来越严重(I)。  我们应该能算上(国内)互联网的第二代,对于只使用telnet泡泡有限坛子的老一代来说,第一我们数量极大,第二我们每个人注册的坛子、网站、im数量也极多(平均每人10个的估计,不算夸张吧),第三我们“很年轻”,80后为主,只要没有飞来横祸,在网上泡到70岁,不算过分吧,那还有半个世纪。于是将(I)往极端情况推一下:10年、20年甚至50年后,互联网上的ID注册会是一个什么情况(II)?再激进些,等我们这代人都入土了,互联网上的ID又会是个什么情况(III)?那等到90后、00后、10后……都入土了呢(IV)? 上述III、IV便是此篇猜想的前提之一,虽然大过年的说这个有些不吉利,但是我只是做个半科学猜想,不是么?当然了,前提之二,就是这个猜想暂时只限于上述i、ii及iii,对于那些开了若干年便挂掉的还没我们活得久的网站,不在猜想范围之内。于是,隆重推出以下猜想:

对于i、ii、iii中所描述的网站,在网站存活期间,会有持续的、呈(爆炸性)增长势头的用户进行注册。虽然用户名的集合可以由ascii码排列组合后得到的集合进行真包含,但是,“有意义的”、“用户所欲的”、“延续性的”(即可以让朋友们看到后即刻联想到“我”的用户名。比如朋友们在一个陌生的网站看到一个用户叫“jayxu”,可能会上前打个招呼,看看是不是真的是“我”)用户名将会越来越少。随着时间的推移,使用诸如“jayxu_2011”的“次级”(以用户所欲的“主级”用户名作为词根,使用前后缀等手段进行退而求其次的唯一性区分的)用户名将会越来越多,如何让用户根据意愿选择“有意义的”、“用户所欲的”、“延续性的”用户名(a)?另一方面,当拥有某个用户名的用户从现实生活中消失(比如死亡)后,这些用户名(死号)及其所关联的数据该如何处理(c)?当然,(c)的前提,另一个棘手的问题是,由谁,根据什么来判定一个用户名是“死号”(b)?

破题

(a)“有意义”、“用户所欲”、“延续性”

如上所述,对于用户来说,当在一个注册系统(包含上述I、II、III,下同)新注册时,首先关心的肯定是“我想要的用户名能不能被注册”,那什么是“我想要”的呢?受老婆有关QQ号的论述,我觉得包括但不限于以下特征:

  • 延续性。所谓延续性是指让朋友们看见之后3秒内便能觉得“应该跟我有关系”的ID,这种延续性不光是从现实生活带来的延续性,也可以是从其它虚拟生活中产生的延续性
    • 与现实生活有关联的现实延续性,比如“jayxu”,或
    • 与我之前已有的其它ID有关联的虚拟延续性,比如另一个我比较常用的ID “mustang”或“mustangxu”
  • 好记。这点和“有意义”很有关系,这也是为什么我觉得本猜想不该包含诸如QQ号这类纯数字的ID的原因
  • 当然,一个既有延续性又有意义的用户名八成是我所欲的了

延续性这个概念是相对的。因为延续性是基于我与朋友之间的某种不成文的、慢慢形成的契约而建立起来的,比如jayxu。其实比起jayxu来,我更prefer “jay”。但是,如大家所预料,想在上述I、II、III注册系统上注册“jay”已经是一个梦想,于是在各个坛子上注册时我都不会去考虑jay而是直接去尝试jayxu。更好的例子是这个域名,jayxu.com。久而久之,大家看到jayxu就会与我关联了。当然,这种“久而久之”是可以发生改变的,只要身边的朋友圈子也相对延续。比如大学开始的朋友会习惯于mustangxu,以及之后到jayxu的转变,而之后的朋友便只能习惯jayxu了。更极端的,可能只有极少数的朋友还有印象,很早之前,我曾经用过“sandy_xu”,比如china pub上的用户名

由于延续性这一概念是需要慢慢培养的,不妨设这个培养过程是一个ID序列{a0, a1, a2, … , an, b0, b1, b2, … , bn},其中的“b”可以认为是一种可以被接受的,之后仅需要相对较短时间就可以完成培养的跳跃,比如从mustangxu到jayxu。而对于a0、b0的选择是整个猜想的一个重点。在上面描述的这样一个互联网的大环境中,一个刚接触互联网的“菜鸟”对于自己第一个ID a0,会遇到越来越多的冲突。比如我,发现jay肯定是个极易冲突的ID,于是我将b0定成了jayxu。然而不幸的是,由于jayxu这个坑就这么被我占了,对于之后想要使用jayxu的用户,会出现下面几种选择:

  • 在此系统中使用诸如jayxu2011的ID退而求其次,但仍然保持自己的ID序列稳定,在其它网站注册时,先尝试注册jayxu,如果不行依然被占坑,继续求其次(有点像线性哈希算法……)
  • 为了避免以后的麻烦,直接将a0定为诸如jayxu_007相对有意义但是又不易冲突的ID。这看似解决了问题,但是,若干十年甚至若干世纪后,只要之前这些死号不被销毁,这种退而求其次的ID将会越来越长越来越多,继而会产生越来越严重的副作用。比如,目前我的朋友偶尔看见jayxu_007这个ID,根据序列{b0, b1, …}可能会猜测是我的ID,而这种猜测可以被看做一种相对弱化的延续性。但在将来,当jayxu_007成为其它用户的a0,再加上整个系统中充斥着大量其它的jayxu_xxx时,那这种延续性就彻底被打断了:“jayxu_2012?应该是另外一个倒霉蛋吧”

我觉得究其原因,互联网和现实生活不一样,没有“代”的概念!这该如何解决?

按上述“算法”出现的另一个问题是,当不同用户在不同的注册系统上使用相同的词根已经培养起来相对稳定的圈子后,当这两个甚至更多个用户在某个注册系统上出现冲突时,该如何解决?按照我们目前已有的思维,谁先注册谁得利。但是对于后注册遇到冲突于是退而求其次的用户,这样公平么?尤其是诸如域名这种全球唯一却又不会消亡的注册系统,对于其它“jayxu”,这样公平么?这个问题貌似已经上升到了人文关怀的层次,我不知到该如何回答

这里需要提一句的是,目前已有一类技术可以解决一个现实“人”在不同注册系统拥有大量虚拟用户名的问题,就是以open id为首的各类跨站connect,比如国外的google account、facebook account、twitter account,国内的人人连接、开心连接、新浪微博连接等。这类技术的详细信息以及究竟能不能(彻底)解决上面这个问题,不在本文讨论之列

(b)由谁,根据什么来判定一个用户名是“死号”

如上所述,互联网没有“代”的概念,那意味着,注册系统中的ID将会越攒越多,相对应的,可用的ID便会越来越少;再加上如果这个系统类似gmail,每个ID下又有数量为(保守估计)1G的数据,那若干现实代后,如果这些ID继续保留,相对于ID被占坑,保留、维护遗留数据而产生的服务器、带宽、电力消耗才更为恐怖。换句话说,相当不低碳!那这些坑能被回收利用么?俗话说一个萝卜一个坑,要想重复使用已经被占了的坑,唯一可想到的办法就是先挖掉坑里的萝卜。但是如果这位萝卜还会来使用这个ID,强行挖掉显然是不合情不合理的,除非:

  • 和手机号一样,如果欠费一段时间后运营商有权利回收号码并重新出售

但是互联网上免费的午餐太多了,除了腾讯、域名出售这样霸道且有收费系统的公司,没有运营商会使用上述这样简单粗暴的手段。那只能使用一些不粗暴的手段了,比如:

  • 按照注册时间,定义一个阈值,比如注册超过150年(但有可能,在这150年内原用户已经私下将帐号转交其他人使用了,如何甄别?)
  • 结合实名制,进行身份证绑定,身份证失效时(我怎么觉得我有点成为了推行实名制的的帮凶?……)
  • 连续不活跃时间超过一个阈值,比如10年(可能遇到与第一点相同的问题,比如10年后的某天我儿子在整理我的遗物时发现我很有情调地将当初我和他妈的开心网帐号密码留给了他,刚欣喜若狂地想去看看我们当年如何在网上高调腻味,却被低调告知“账户已停用”,或者早已易主,出现“用户名或密码错”)
  • 由家属告知此人已消失(没有这么有公德心的家属吧,更何况如何甄别消息的真假?家属又如何知道此人注册了多少系统?)
  • 由公安机关介入、配合(算了吧,我们纳的税已经不够用了)

(c)如何处理死号及其所关联的数据

我经常和老婆开玩笑说,我们这代人是幸运的,因为将来等我们的孩子懂事后,我们可以有大量的数字化的信息与他们分享:爸妈谈恋爱的邮件、聊天记录、开心网上的朋友们评论、博客、微博、相册……记录了我们生活的点点滴滴,甚至可以传给我们的孙辈、曾孙辈看。但是如上所述,幸福的背后带来的却是一个恐怖的问号:

如果一个注册系统上的ID可以被顺利地认为是死号后,其关联的数据如何处理?

呃……没觉着恐怖?那如果你是某个网站(比如开心)的运营方,现在看见每天有源源不断的新用户注册,网站上留言、照片、状态、分享、视频等各种活动进行得火热,你肯定每天坐在办公室乐滋滋地等着VC的美刀。但到2211年,如果网站还没死,上面又存着三代人几亿的ID,其中明明有1亿用户年龄已经超过了150岁,肯定早已投胎,但是他们的数据又在服务器的磁盘上(假设那时候还用磁盘吧),极少有孝顺的、知道用户名密码的子孙们上来翻翻爷爷奶奶年轻时甜言蜜语,却每天吞噬着你几十万的电费,到那时你应该会哭得很难看。摆在你面前有两条路:

  • 按照(b)所述找出死号,删除。(但如果我很有先见之明地把我的儿子培养成著名律师或者著名律师他爸,而且很不幸地,那时的中国已经成为法制社会并且有了集体诉讼这么一说,那昂贵的诉讼费和赔偿费肯定会让你立马打消这个念头)
  • 开放一个服务,可以让子孙们在提供“相关证明”的前提下导出所有数据,然后删除。而这样会催生以下几种情况发生:
    • 导出数字信息太冷冰冰了吧,要不要制作成相册、名言警句书签之类的实体物品?这样更有纪念价值,也更加看得见摸的着啊~~于是出现了一个新兴的行业,暂且划归在丧葬服务业下吧……
    • 你爷爷有小号?多少个小号?不知道?你爷爷的!
    • 你说这个账户是你爷爷的,但是没有相关证明?咱们还是打官司吧……
    • 你好,这里是支付宝。你说这个帐号是你爸爸的?里面还有10w人民币,什么,你说你想继承?……

更多情况下,我们这些爷爷奶奶的帐号肯定是无人来认领,那你打算怎么办?

很明显地,除了新开设一个收费行业看着比较靠谱且利国利民之外,上述情景中的其它问题都相当棘手,且存在着与法律相关的问题:

  • 上述判定一个ID是死号已经很让人抓狂了,那这里谁来开“相关证明”证明这个ID是你爷爷的呢?
  • 如果发现盗领,冒名等情况,如何处理?谁负责任?
  • 类似支付宝、QQ币、点卡这种虚拟货币,可以被继承么?算遗产么?
  • 如果帐号存在纠纷,比如支付宝欠着别人钱,或者还没发货,那这些遗留纠纷该如何处理?
  • 如果是国外的系统,是不是涉及到国际法律?
  • ……

上面这些问题,算是本猜想的副产品吧。我不是搞法律的,亦不知如何回答

上述为处理ID相关数据的猜想,那ID本身呢?答案貌似是显而易见的:“重新开放注册”。那我又有问题了:

  • 如果上述的遗留问题没有处理干净,新注册的用户岂不是会很麻烦?就像买了回收后重新出售的手机号一样,得不停地解释:“不好意思,我不是原来的用户,他还没来得及发给你的充气娃娃我不负责补发”
  • 现在的互联网正向真正的“net”发展,每个人在不同注册系统间会有错综复杂的关联关系,比如在博客上放了到自己相册、开心、微博等等的链接,如果其中某个链接被服务商回收,剩下的关联链接如何处理?如果哪天我老婆正兴高采烈地浏览我新买的域名下的博客,发现有个flickr的链接和该域名相关,而那个flickr里存放了之前那个老顽童存了半辈子的违禁照片,我怎么向我老婆解释?“老婆,你看,这显然不可能是我的相册,这些造型都是半个世纪前的潮流了,我现在看了就恶心”……
  • 另一块可能出现问题的是类似google这些搜索引擎,或者更精确地说,是那些布满整个互联网的蜘蛛,仅靠它们的智商怎么判断两个原先属于同一个现实人互相关联的链接现在已经是不同用户的私产了?

结语

此篇酝酿了很久,整理、行文又花了两天,我本不指望能解决什么问题,只是抛出了一堆在我脑海萦绕了很久的砖,有没有玉和之,我亦无指望。但愿这些只是我的杞人忧天,因为是不是真的能有互联网系统成为百年老字号,本身就是个猜想。但如果真的有一天全世界遇到了这些问题,希望我是第一个将此整理公布的人。如果有这份荣幸,希望此猜想命名为“jayxu猜想”,如果大家心情好打算给我个图灵奖玩玩,我也会厚着脸皮揣入囊中

最后再啰嗦一句,如果有人对此文有兴趣,打算转载、充实、发展甚至翻译成其它诸国语言,我不会吝啬,只是希望,注上原文出处并告知,多谢!

GD Star Rating
loading...

程序员习惯于一个以自己和计算机为中心的封闭世界,没有复杂的人际关系,没有不堪处理的伦常,一桌一灯一夜一烟一键盘一鼠标一屏幕一网络足矣。有问题我们可以debug,printf,注释甚至删除,一切尽在我们指间,1 0对我们绝对服从。每天都有挫败感,但亦有更大的成就感和掌控感。安全、稳定、可靠、线程安全、线性可扩展、高可用、性能-空间平衡……是我们对代码的要求,亦是生活状态的映射。程序员都是隐于市的中隐

一周tweets更新 [2011-01-25]

GD Star Rating
loading...
  • 一周tweets更新 [2011-01-18] http://goo.gl/fb/5026t #tweets #
  • 惠普的 webOS 平板露面了!// iPad 2将在2月份发布,playbook箭在弦上,还有N多借蜂窝起势的xPad磨刀霍霍……2011 pad大战即将拉开序幕
    http://fl5.me/6sqvoj #
  • 家乐福价签戏法曝光:价签标低价结账收高价
    http://fl5.me/6t5r47 #
  • Google 需要性爱 // 应该重新审视SEO及其带来的周边产业
    http://fl5.me/6tbnd7 #
  • 杭州上海,趁我不在狂下雪啊…… #
  • omg,xcode 4的界面跟iTunes一模一样……把开发人员当普通用户,把开发当娱乐,水果真是敢想敢做啊 #
  • #xcode 4 VS #iTunes http://goo.gl/fb/MXcRr #技术生活 #apple #
  • 出租车几何学:一个全新的几何世界
    http://fl5.me/70p1l0 #
  • 昨晚在大街上看见一辆白色现代ix35,腰线相当迷人~ #
  • #转载:熬过去,就结婚。 http://goo.gl/fb/1nJTD #未分类 #婚姻 #心理 #感情 #
  • 我靠,浦发网上银行挂了么 #
  • 你是谁,问这个干什么?
    http://fl5.me/43p3rs #
  • 谷歌计划推出团购业务 挑战Groupon // google加入百团大战
    http://fl5.me/6uo9lt #
  • 从5点……一觉睡到……现在…… #
  • 强大的 TI 计算器模拟应用
    http://fl5.me/3t5dbi #
  • #
  • JDK 7所有特性现已就绪
    http://fl5.me/3uksg2 #
  • 想知道今天北京风多大?站北四环望西山,风力大小和山轮廓清晰程度成正比。比如今天,西山望着倍儿清楚…… #
  • 杭州的公交站带公交车gps位置信息的,太高科技了 #
  • 如何在JDialog上注册全局ESC键事件 http://goo.gl/fb/GBvAI #技术生活 #swing #tips #
  • 有人kik么:mustangxu #

如何在JDialog上注册全局ESC键事件

GD Star Rating
loading...

大多数用户可能会有这么一个习惯:对于富客户端弹出的Dialog,习惯使用ESC将其关闭,而不是“叉掉它”。在Swing中,弹出窗口一般继承自JDialog类,但默认没有对ESC键事件做响应,下面这段代码可以完成这个功能:

  1. private static final KeyStroke escapeStroke = KeyStroke.getKeyStroke(KeyEvent.VK_ESCAPE, 0);
  2. public static final String dispatchWindowClosingActionMapKey = "com.jayxu:WINDOW_CLOSING"; // any key string you like
  3.  
  4. public static void installEscapeCloseOperation(final JDialog dialog) { // any method name you like
  5.     Action dispatchClosing = new AbstractAction() {
  6.         public void actionPerformed(ActionEvent event) {
  7.             dialog.dispatchEvent(new WindowEvent(dialog, WindowEvent.WINDOW_CLOSING));
  8.         }
  9.     };
  10.  
  11.     JRootPane root = dialog.getRootPane();
  12.     root.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put(escapeStroke, dispatchWindowClosingActionMapKey);
  13.     root.getActionMap().put( dispatchWindowClosingActionMapKey, dispatchClosing);
  14. }
private static final KeyStroke escapeStroke = KeyStroke.getKeyStroke(KeyEvent.VK_ESCAPE, 0);
public static final String dispatchWindowClosingActionMapKey = "com.jayxu:WINDOW_CLOSING"; // any key string you like

public static void installEscapeCloseOperation(final JDialog dialog) { // any method name you like
    Action dispatchClosing = new AbstractAction() {
        public void actionPerformed(ActionEvent event) {
            dialog.dispatchEvent(new WindowEvent(dialog, WindowEvent.WINDOW_CLOSING));
        }
    };

    JRootPane root = dialog.getRootPane();
    root.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put(escapeStroke, dispatchWindowClosingActionMapKey);
    root.getActionMap().put( dispatchWindowClosingActionMapKey, dispatchClosing);
}

转载:熬过去,就结婚

GD Star Rating
loading...

有位心理学家曾写道“一个成熟称得上真爱的恋情必须经过四个阶段”那就是:

共存、反依赖、独立、共生

之间转换所需的时间不一定,因人而易。

第一个阶段:共存
这是热恋时期,不论何时何地总希望能腻在一起。

第二个阶段:反依赖
等情感稳定,一方想多一点时间做自己想做的事,这时另一方就会感到被冷落。

第三个阶段:独立
这是第二个阶段的延续,要求更多独立自主的时间。

第四个阶段:共生
这时新的相处之道成形,你们已经成为最亲密的人。

你们在一起相互扶持、一起开创属于你们人生。

你们在一起不会互相牵绊,而会互相成长。

他(她)就像是你的亲人。

但是,好多人都通不过第二或第三阶段,选择分手。

其实很多事只要好好沟通就会没事,可是想太多和任性就是无法避免。

世界上遇到唯一的你多么不容易,能不能不要轻言放弃。

你发现了吗?

你们本没有相同之处,外表不相像,性格也是南辕北辙,

但是相爱然后在一起,

日复一日,年复一年,

你会惊讶你的眼睛竟有点像他的眼睛。

他的微笑竟也有点像你的微笑。

你们走路的步伐变得相似。

你们说话的语气也愈来愈像。

你们爱喝同一杯饮料。

你们的口头禅变得一样。

你们总能猜到对方下一句话是什么。

原来我们会变成我们所爱的人。

你在不知不觉中让他改掉了他爱皱眉的坏习惯。

这个改变,或许连他自己也不曾察觉。

他在不知不觉中让你变得做事不再马马虎虎。

你差点认不出自己。

会在不知不觉中逐渐变成对方理想中的人,

这种改变,绝对不是刻意的。

两个人相处时间越久,气质也越相近,

有一天,你惊讶地发现,

这样的你们多么默契。

或许再也遇不到这样的感情。

深深爱着一个人的时候,你原来真的会一点一点失去自己

xcode 4 VS iTunes

GD Star Rating
loading...

把开发人员当普通用户,把开发当娱乐,水果真是敢想敢做啊

一周tweets更新 [2011-01-18]

GD Star Rating
loading...
  • 一周tweets更新 [2011-01-11] http://goo.gl/fb/ef8uD #tweets #
  • 一周tweets更新 [2011-01-11] http://goo.gl/fb/2V60N #tweets #
  • @nancybuaa 本来发给丈母娘的,结果手一抖发到follow 5上然后同步出来了……您回来了? in reply to nancybuaa #
  • 如果生活像照片这般美好…… // 祝大家都有一个温暖的2011~
    http://fl5.me/6u8838 #
  • 跟老婆在开心上玩你画我猜,这默契,汤勿牢了 #
  • 怎么把Eclipse的perspective dock放到右上角? http://goo.gl/fb/lkLs2 #技术生活 #eclipse #osgi #pde #tips #
  • 多好的 Python 代码编写规范呀,不要再自己弄了 // 对其它语言也有借鉴意义
    http://fl5.me/76r3ge #
  • mbp出现“修理电池”提示,得预约genius bar了 #
  • 今天apple.com和apple.com.cn在抽风么? #
  • 很多在北京的人一到望京就迷路,包括出租车司机都找不着北,那天我在
    路上走着,终于找出原因了:因为我看到望京有一路公交车是404 #
  • 周末有人想踢球的么,北航 #
  • 不知道楼里哪个二逼天天把我自行车搬到楼外头,刚才把丫前胎气放了。再搬直接拿刀捅 #
  • 不知道楼里哪个二逼手欠天天把我自行车搬到楼外头,刚才把丫前胎气放了。再搬直接拿刀扎……轮胎 #
  • 一锅排骨,搁点儿山药,搁个萝卜,上压力锅炖。今天晚饭很丰盛~ #
  • 牛了!用两只废弃打火机做成的迷你摩托车 // 这个太强了!
    http://fl5.me/6t3l0b #
  • 苹果即将进入高通时代:iPad 2、iPhone 5,以及苹果TV
    http://fl5.me/6t48hb #
  • 听说鬼吹灯要拍电影了,绝逼比哈利波特火! #
  • 当蒙娜丽莎变成3D特效 // 很有才的广告
    http://fl5.me/72962k #
  • 暂定年初五,延安聚会,西郊百联附近~~要来的速度举手~~邀请老师的工作同时进行中~~~(请相互转帖告知,谢谢~~) #
  • 原来imac现在这么便宜了,顶配27寸4核才16000 #
  • The fundamental difference between Unix and the Macintosh operating system is that Unix was designed to please programmers, whereas the Mac #
  • was designed to please users. (Windows, on the other hand, was designed to please accountants. #
  • Verizon iPhone 运行尚未发布的iOS 4.2.5,新增个人热点功能,并改进天线设计 // 水货iphone 4又多了新选择
    http://fl5.me/6sp371 #
  • 结合《社交网络》看。电影中eduardo获得的赔偿金额是“未公布”,这里显示的是2.5B……老婆说,he deserves it
    http://fl5.me/6spgpd #
  • #Facebook Valuation Over Time http://goo.gl/fb/N4S0I #互联网生活 #sns #
  • 教你做商业模型分析
    http://fl5.me/6srof5 #
  • 他人的生活 // 春运矛盾一年比一年激烈,估摸再过几年得爆发一次了吧
    http://fl5.me/6ssn7h #
  • UNIX传奇 [zz] http://goo.gl/fb/kklad #技术生活 #unix #
  • 十个有趣的英文文字游戏(上)
    http://fl5.me/6ttq3t #
  • 十个有趣的英文文字游戏(下) // 其实老外也有闲人
    http://fl5.me/6tu245 #
  • 死生契阔,与子成说。执子之手,与子偕老 http://goo.gl/fb/WSrO1 #惊艳 #love #
  • Apple 便携式电脑:如何在合盖(合上显示屏)模式下通过外部显示器操作电脑
    http://fl5.me/6ssv1i #
  • #Mac OS X 快捷键 [zz] http://goo.gl/fb/5qcud #互联网生活 #macosx #tips #
  • iPad Simulator // 在线iPad,买不起的童鞋们可以拿这个过瘾
    http://fl5.me/6svlia #
  • 在线win 31,大家来怀念吧~
    http://fl5.me/6svmkm #
  • 党你孤单你会想起税… #

Mac OS X 快捷键 [zz]

GD Star Rating
loading...

原文:http://support.apple.com/kb/HT1343?viewlocale=zh_CN

摘要

了解常见 Mac OS X 快捷键。快捷键是通过按下键盘上的组合键来调用 Mac OS X 功能的一种方式。

受影响的产品

Mac OS X 10.0, Mac OS X 10.3, Mac OS X 10.2, Mac OS X 10.1, Mac OS X 10.4, Mac OS X 10.6, Mac OS X 10.5

要使用快捷键或组合键,您可以同时按修饰键和字符键。例如,同时按下 Command 键(标有 符号的按键)和“c”键会将当前选中的任何内容(文本、图形等等)拷贝至夹纸板。这也称作 Command-C 组合键(或快捷键)。

许多组合键中都包含修饰键。修饰键将改变 Mac OS X 对其他按键或鼠标点按动作的解释方式。修饰键包括 Command、Control、Option、Shift、Caps Lock 和 fn 键(如果您的键盘有 fn 键)。

以下是出现在 Mac OS X 菜单中的修饰键符号:

Command 键图标(Command 键) – 在某些 Apple 键盘上,此键也可能带有 Apple 标志(apple 标志
Control 键图标(Control 键)
Option 或 Alt 键图标(Option 键)-“Alt”可能也出现在此键上
Shift 键图标(Shift 键)
Caps lock 键图标(Caps Lock 键)- 切换 Caps Lock 开或关
fn(功能键)

启动快捷键

按下按键或组合键,直到所需的功能出现(例如,在启动过程中按住 Option 直到出现“启动管理程序”,或按住 Shift 直到出现“安全启动”)。提示:如果启动功能未起作用,而您使用的是第三方键盘,请连接 Apple 键盘,然后再试一次。

Option 显示所有可引导宗卷(启动管理程序
Shift 执行安全启动(以安全模式启动)
C 从可引导磁盘启动(DVD、CD)
T FireWire 目标磁盘模式启动
N 从 NetBoot 服务器启动
X 强制 Mac OS X 启动(如果存在非 Mac OS X 启动宗卷)
Command-V 详细模式启动
Command-S 单用户模式启动


Finder 快捷键

Command-A 选中最前面的 Finder 窗口中的所有项(如果未打开任何窗口则选中桌面内容)
Option-Command-A 取消选择所有项
Shift-Command-A 打开“应用程序”文件夹
Command-C 拷贝所选项/文本至夹纸板
Shift-Command-C 打开“电脑”窗口
Command-D 复制所选项
Shift-Command-D 打开桌面文件夹
Command-E 推出
Command-F 查找任何匹配 Spotlight 属性的内容
Shift-Command-F 查找 Spotlight 文件名匹配项
Option-Command-F 导航到已打开的 Spotlight 窗口中的搜索栏
Shift-Command-G 前往文件夹
Shift-Command-H 打开当前所登录用户帐户的个人文件夹
Command-I 显示简介
Option-Command-I 显示检查器
Control-Command-I 获得摘要信息
Shift-Command-I 打开 iDisk
Command-J 调出“显示”选项
Command-K 连接服务器
Shift-Command-K 打开“网络”窗口
Command-L 为所选项制作替身
Command-M 最小化窗口
Option-Command-M 最小化所有窗口
Command-N 新建 Finder 窗口
Shift-Command-N 新建文件夹
Option-Command-N 新建智能文件夹
Command-O 打开所选项
Shift-Command-Q 注销
Option-Shift-Command-Q 立即注销
Command-R 显示(替身的)原身
Command-T 添加到工具条
Shift-Command-T 添加到个人收藏
Option-Command-T 在 Finder 窗口中隐藏工具栏/显示工具栏
Shift-Command-U 打开“实用工具”文件夹
Command-V 粘贴
Command-W 关闭窗口
Option-Command-W 关闭所有窗口
Command-X 剪切
Option-Command-Y 幻灯片显示(Mac OS X 10.5 或更高版本)
Command-Z 还原/重做
Command-1 以图标显示
Command-2 列表方式显示
Command-3 以分栏方式显示
Command-4 以 Cover Flow 方式显示(Mac OS X 10.5 或更高版本)
Command-,(Command 加逗号键) 打开 Finder 偏好设置
Command-`(重音符键 – 美式英语键盘布局中 Tab 键的上方) 循环显示打开的 Finder 窗口
Command-Shift-? 打开 Mac 帮助
Option-Shift-Command-Esc(按住三秒钟)- 仅 Mac OS X v10.5、v10.6 或更高版本 强制退出最前面的应用程序
Command-[ 后退
Command-] 前进
Command-上箭头 打开所含文件夹
Control-Command-上箭头 在新窗口中打开所含文件夹
Command-下箭头 打开高亮显示的项
Command-Tab 切换应用程序 – 向前循环
Shift-Command-Tab 切换应用程序 – 向后循环
Command-Delete 移到废纸篓
Shift-Command-Delete 清倒废纸篓
Option-Shift-Command-Delete 清倒废纸篓(不显示确认对话框)
空格键(或 Command-Y) 快速查看(Mac OS X 10.5 或更高版本)
拖移时按 Command 键 将拖移的项移到其他宗卷/位置(按住按键时指针图标发生变化 – 请参阅此文章
拖移时按 Option 键 拷贝拖移的项(按住按键时指针图标发生变化 – 请参阅此文章
拖移时按 Option-Command 组合键 为拖移的项制作替身(按住按键时指针图标发生变化 – 请参阅此文章

应用程序和其他 Mac OS X 键盘命令

注:有些应用程序可能不支持以下所有应用程序组合键。

Command-空格键 显示或隐藏 Spotlight 搜索栏(如果安装了多语种,则可能循环显示启用的语系)
Control-A 移到行/段落的开头
Control-B 向后移动一个字符
Control-D 删除光标前的字符
Control-E 移到行/段落的结尾
Control-F 向前移动一个字符
Control-H 删除光标后的字符
Control-K 删除从光标前的字符到行/段落结尾的所有内容
Control-L 将光标/所选内容置于可见区域中央
Control-N 下移一行
Control-O 在光标后插入一行
Control-P 上移一行
Control-T 移调光标前后的字符
Control-V 下移一个页面
Option-Command-空格键 显示 Spotlight 搜索结果窗口(如果安装了多语种,则可能循环显示某一语系下的键盘布局和输入法)
Command-Tab 在打开的应用程序列表中,向下移动到下一个最近使用的应用程序
Shift-Command-Tab 在打开的应用程序列表中向上移动(按最近使用时间排序)
Shift-Tab 按反方向浏览各控件
Control-Tab 聚焦对话框中的下一组控件或聚焦下一个表格(当 Tab 移到下一个单元格时)
Shift-Control-Tab 聚焦上一组控件
Command-esc 打开 Front Row(如果已安装)
Option-推出键 从备选光盘驱动器中推出(如果已安装)
Control-推出键 显示关机对话框
Option-Command-推出键 使电脑进入睡眠模式
Control-Command-推出键 退出所有应用程序(会让您先存储对已打开文稿所作的更改),然后重新启动电脑
Control Option-Command-推出键 退出所有应用程序(会让您先存储对已打开文稿所作的更改),然后关闭电脑
fn-Delete 向前删除(适用于便携式 Mac 的内建键盘)
Control-F1 切换全键盘控制开或关
Control-F2 聚焦菜单栏
Control-F3 聚焦 Dock
Control-F4 聚焦活跃窗口或下一个窗口
Shift-Control-F4 聚焦上一个活跃窗口
Control-F5 聚焦工具栏
Control-F6 聚焦第一个(或下一个)面板
Shift-Control-F6 聚焦上一个面板
Control-F7 临时覆盖窗口和对话框中的当前键盘控制模式
F9 拼贴或取消拼贴所有打开的窗口
F10 拼贴或取消拼贴当前活跃应用程序中所有打开的窗口
F11 隐藏或显示所有打开的窗口
F12 隐藏或显示 Dashboard
Command-` 激活最前面的应用程序中下一个打开的窗口
Shift-Command-` 激活最前面的应用程序中上一个打开的窗口
Option-Command-` 聚焦窗口抽屉
Command- -(减号) 缩小所选项
Command-{ 使所选内容左对齐
Command-} 使所选内容右对齐
Command-| 使所选内容居中对齐
Command-: 显示“拼写”窗口
Command-; 查找文稿中拼写错误的词
Command-, 打开最前面的应用程序的偏好设置窗口(前提是应用程序支持此快捷键)
Option-Control-Command-, 降低屏幕对比度
Option-Control-Command-. 增强屏幕对比度
Command-? 在帮助显示程序中打开应用程序的帮助
Option-Command-/ 打开或关闭字体平滑
Shift-Command-= 放大所选项
Shift-Command-3 将屏幕捕捉到文件
Shift-Control-Command-3 将屏幕捕捉到夹纸板
Shift-Command-4 将所选内容捕捉到文件
Shift-Control-Command-4 将所选内容捕捉到夹纸板
Command-A 高亮显示文稿或窗口中的所有项,或高亮显示文本栏中的所有字符
Command-B 以粗体显示所选文本或切换文本粗体显示开/关
Command-C 将所选数据拷贝到夹纸板
Shift-Command-C 显示“颜色”窗口
Option-Command-C 拷贝所选文本的样式
Control-Command-C 拷贝所选项的格式设置并存储到夹纸板
Option-Command-D 显示或隐藏 Dock
Command-Control D 在字典应用程序中显示所选词的定义
Command-E 使用所选内容进行查找
Command-F 打开“查找”窗口
Option-Command-F 移到搜索栏控件
Command-G 查找所选内容出现的下一个位置
Shift-Command-G 查找所选内容出现的上一个位置
Command-H 隐藏当前正在运行的应用程序窗口
Option-Command-H 隐藏所有其他正在运行的应用程序窗口
Command-I 以斜体显示所选文本或切换文本斜体显示开/关
Option-Command-I 显示检查器窗口
Command-J 滚动到所选部分
Command-M 将活跃窗口最小化至 Dock
Option-Command-M 将活跃应用程序的所有窗口最小化至 Dock
Command-N 在最前面的应用程序中创建新文稿
Command-O 显示对话框,用于选择要在最前面的应用程序中打开的文稿
Command-P 显示“打印”对话框
Shift-Command-P 显示用于指定打印参数(页面设置)的对话框
Command-Q 退出最前面的应用程序
Command-S 存储活跃文稿
Shift-Command-S 显示“存储为”对话框
Command-T 显示“字体”窗口
Option-Command-T 显示或隐藏工具栏
Command-U 对所选文本加下划线或打开/关闭加下划线功能
Command-V 在插入点位置粘贴夹纸板内容
Option-Command-V 将某对象的样式应用于所选对象(粘贴样式)
Option-Shift-Command-V 将周围文本的样式应用于所插入对象(粘贴并匹配样式)
Control-Command-V 将格式设置应用于所选对象(粘贴标尺命令)
Command-W 关闭最前面的窗口
Shift-Command-W 关闭文件及其关联窗口
Option-Command-W 不退出应用程序直接关闭其所有窗口
Command-X 移去所选内容并存储到夹纸板
Command-Z 还原上一命令(有些应用程序允许多次还原)
Shift-Command-Z 重做上一命令(有些应用程序允许多次重做)
Control-右箭头 聚焦视图(如表格)内的另一个值或单元格
Control-左箭头 聚焦视图(如表格)内的另一个值或单元格
Control-下箭头 聚焦视图(如表格)内的另一个值或单元格
Control-上箭头 聚焦视图(如表格)内的另一个值或单元格
Command-右箭头 将文本插入点移至当前行的行尾
Command-左箭头 将文本插入点移至当前行的行首
Command-下箭头 将文本插入点移至文稿的结尾
Command-上箭头 将文本插入点移至文稿的开头
Shift-Command-右箭头 选中插入点与当前行行尾之间的文本 (*)
Shift-Command-左箭头 选中插入点与当前行行首之间的文本 (*)
Shift-右箭头 将文本选择范围向右扩展一个字符 (*)
Shift-左箭头 将文本选择范围向左扩展一个字符 (*)
Shift-Command-上箭头 选中插入点与文稿开头之间的文本 (*)
Shift-Command-下箭头 选中插入点与文稿结尾之间的文本 (*)
Shift-上箭头 将文本选择范围扩展到上一行相同水平位置的最近字符边缘 (*)
Shift-下箭头 将文本选择范围扩展到下一行相同水平位置的最近字符边缘 (*)
Shift-Option-右箭头 将文本选择范围扩展到当前词的词尾,再按一次则扩展到后一词的词尾 (*)
Shift-Option-左箭头 将文本选择范围扩展到当前词的词首,再按一次则扩展到后一词的词首 (*)
Shift-Option-下箭头 将文本选择范围扩展到当前段落的段尾,再按一次则扩展到下一段落的结尾 (*)
Shift-Option-上箭头 将文本选择范围扩展到当前段落的段首,再按一次则扩展到下一段落的段首 (*)
Control-空格键 在当前输入源和上一输入源之间切换
Option-Control-空格键 在所有启用的输入源之间切换
Option-Command-esc 强制退出

(*) 注:如果未选择任何文本,则从插入点位置开始扩展。如果通过拖移选择文本,则从所选内容的边缘开始扩展。反向选择所选内容会取消选择相应部分。


万能辅助 – VoiceOver 键盘命令

有关 Mac OS X v10.6 中 VoiceOver 组合键差异的信息,请参阅此文章

Command-F5 或
fn Command-F5
打开或关闭 VoiceOver
Control Option-F8 或
fn Control Option-F8
打开 VoiceOver 实用工具
Control Option-F7 或
fn Control Option-F7
显示 VoiceOver 菜单
Control Option-;
或 fn Control Option-;
启用/停用 VoiceOver 控制选项锁定
Option-Command-8 或
fn Command-F11
开启缩放功能
Option-Command-+ 放大
Option-Command- -(减号) 缩小
Option-Control-Command-8 反转/复原屏幕颜色
Control Option-Command-, 降低对比度
Control Option-Command-. 增强对比度

:您可能需要在“键盘”偏好设置中启用“将 F1、F2 等键用作标准功能键”,才能使 VoiceOver 菜单和实用工具正常工作。


万能辅助 – 鼠标键

在“万能辅助”偏好设置中打开鼠标键后,您便可以使用键盘或数字小键盘上的键移动鼠标指针。如果电脑没有数字小键盘,请使用 Fn(功能)键。

8 上移
2 下移
4 左移
6 右移
1 沿对角线向左下角移
3 沿对角线向右下角移
7 沿对角线向左上角移
9 沿对角线向右上角移
5 按鼠标按钮
0 按住鼠标按钮
.(数字小键盘上的句点) 释放按住的鼠标按钮

另请参阅:鼠标快捷键

其他信息

高级:本文所指为默认的修饰键分配。可在系统偏好设置的“键盘与鼠标”偏好设置中更改修饰键分配。例如,您可以将 Command 键改为用作 Option 键,反之亦然。您也可以恢复默认修饰键设置。

另请参阅:

死生契阔,与子成说。执子之手,与子偕老

GD Star Rating
loading...

在博客上瞎逛,无意中逛到老婆之前的这篇博,复杂的感觉,柔软的文笔,淡伤的心情

突然觉得,把老婆的博客搬过来是件很有意思的事,两个原本不相交的平行线被按照时间揉在了一起,让我们看到在自己曾经独自经历某段生活的时候,对方在何种生活中晃荡,即使有时醋意会悠悠升腾,也是幸福的

老婆拿这篇博纪念我们第一个百日,那这篇博,算是给老婆的回礼。100天前,老婆的一个拥抱,让我放下了漂泊了八年的心

过去,我全部接受,未来,我们一起承担

死生契阔,与子成说。执子之手,与子偕老

UNIX传奇 [zz]

GD Star Rating
loading...

原文地址:()、(

了解过去,我们才能知其然,更知所以然。总结过去,我们才会知道我们明天该如何去规划,该如何去走。在时间的滚轮中,许许多的东西就像流星一样一闪而逝, 而有些东西却能经受着时间的考验散发着经久的魅力,让人津津乐道,流传至今。要知道明天怎么去选择,怎么去做,不是盲目地跟从今天各种各样琳琅满目前沿技 术,而应该是去 —— 认认真真地了解和回顾历史。

Unix是目前还在存活的操作系统的元老了,走过了40年的历程(参看《Unix 40年:Unix年鉴》、《Unix 40年:昨天,今天和明天》)。在技术更新如此迅速的计算机世界的今天,Unix始终保持它那神圣的光环,它那曲折和令人叹息的历史,以及由它引发的思想变革,对当今计算机文化造成的深远影响,这40年所产生的人和事,让它成为了一个传奇,不能不让人为之惊叹。

这是一段所有从事计算机行业人员尤其是软件开发人员需要了解的历史。Unix的传奇历史是整个计算机世界文化最具代表性的,它对整个计算机世界文化的影响也是最巨大,最深远的。他给人带来的不单单的对过去的回味,更为我们带来了计算机世界的新思潮。

了解这段的历史的人,才能体会计算机世界变迁过程中的是是非非,才能了解计算机世界中的文化,从而才能参与到整个计算机革命的大潮中。希望这段历史,这篇文章能让你感受到计算机世界那强力的脉搏,从而让你踏上这条令人充满激情的道路。

上篇

  • Unix起源
  • Unix分裂
  • Unix的法律纠纷
  • GNU开源组织
  • Linux横空出世
  • Linux今天的领袖

下篇

  • Unix与黑客文化
  • Unix的历史教训
  • Unix 家族谱
  • Unix的特点
  • Unix的影响和哲学
  • Unix痛恨者手册

Unix 起源

回顾Unix历史,我们就要说一下一个叫MULTICS(Multiplexed Information and Computing Service)的项目。上世纪六十年代时,大部份计算机都是采用批处理(Batch Processing)的方式(也就是说,当作业积累一定数量的时候,计算机才会进行处理)。那时,我们熟知的美国电话及电报公司(American Telephone and Telegraph Inc.;AT&T)、通用电器公司(General Electrics;G.E.)及麻省理工学院(Massachusetts Institute of Technology;MIT)计划合作开发一个多用途(General-Purpose)、分时(Time-Sharing)及多用户(Multi- User)的操作系统,也就是这个MULTICS,其被设计运行在GE-645大型主机上。不过,这个项目由于太过复杂,整个目标过于庞大,糅合了太多的 特性,进展太慢,几年下来都没有任何成果,而且性能都很低。于是到了1969年2月,贝尔实验室(Bell Labs)决定退出这个项目。

熟悉这段历史的人都知道,贝尔实验室中的有个叫Ken Thompson的人,他为MULTICS这个操作系统写游戏了个叫“Space Travel”的游戏,在MULTICS上经过实际运行后,他发现游戏速度很慢而且耗费昂贵 —— 每次运行会花费75美元。退出这个项目以后。他为了让 这个游戏能玩,所以他找来Dennis Ritchie为这个游戏开发一个极其简单的操作系统。这就是后来的Unix。(值得一提的是,当时他们本想在DEC-10上写,后来没有申请到,只好在 实验室的墙角边找了一台被人遗弃的Digital PDP-7的迷你计算机进行他们的计划,这台计算机上连个操作系统都没有,于是他们用汇编语言仅一个月的时间就开发了一个操作系统的原型)他们的同事 Brian Kernighan非常不喜欢这个系统,嘲笑Ken Thompson说:“你写的系统好真差劲,干脆叫Unics算了。”Unics的名字就是相对于MULTICS的一种戏称,后业改成了Unix。于 是,Unix就在这样被游戏和玩笑创造了,当时是1969年8月。也就是这一年,Linux之父Linus Torvalds在芬兰出生了。

1971年,Ken Thompson写了充分长篇的申请报告,申请到了一台PDP-11/24的机器。于是Unix第一版出来了。在一台PDP-11/24的机器上完成。这 台电脑只有24KB的物理内存和500K磁盘空间。Unix占用了12KB的内存,剩下的一半内存可以支持两用户进行Space Travel的游戏。而著名的fork()系统调用也就是在这时出现的。

到了1973年的时候,Ken Thompson 与Dennis Ritchie感到用汇编语言做移植太过于头痛,他们想用高级语言来完成第三版,对于当时完全以汇编语言来开发程序的年代,他们的想法算是相当的疯狂。一 开始他们想尝试用Fortran,可是失败了。后来他们用一个叫BCPL(Basic Combined Programming Language)的语言开发,他们整合了BCPL形成B语言,后来Dennis Ritchie觉得B语言还是不能满足要求,就是就改良了B语言,这就是今天的大名鼎鼎的C语言。于是,Ken Thompson 与Dennis Ritchie成功地用C语言重写了Unix的第三版内核。至此,Unix这个操作系统修改、移植相当便利,为Unix日后的普及打下了坚实的基础。而 Unix和C完美地结合成为一个统一体,C与Unix很快成为世界的主导。

Unix的第一篇文章 “The UNIX Time Sharing System”由Ken Thompson和Dennis

Ritchie于1974年7月的 the Communications of the ACM发表。这是UNIX与外界的首次接触。结果引起了学术界的广泛兴趣并对其源码索取,所以,Unix第五版就以“仅用于教育目的”的协议,提供给各大 学作为教学之用,成为当时操作系统课程中的范例教材。各大学公司开始通过Unix源码对Unix进行了各种各样的改进和扩展。于是,Unix开始广泛流 行。


Ken Thompson & Dennis Ritchie

Unix分裂

1978年,对 Unix而言是革命性的一年;因为学术界的老大柏克利大学 (UC Berkeley),推出了一份以第六版为基础,加上一些改进和新功能而成的 Unix。这就是著名的“1 BSD(1st Berkeley Software Distribution)”,开创了Unix的另一个分支:BSD 系列。 同时期,AT&T成立USG(Unix Support Group),将 Unix变成商业化的产品。从此,BSD的 Unix 便和AT&T 的Unix 分庭抗礼,Unix就分为System IV和4.x BSD这两大主流,各自蓬勃发展。

1979年发布的Unix 第七版被称为是“最后一个真正的Unix”,这个版本的Unix内核只有40K bytes。后来这个版本被移植到VAX机上(我在大学时学习C语言时用过这个VAX机,我还记得那时上VAX机最大的爱好就是使用talk命令和别人聊 天,呵呵)。20世纪80年代相继发布的8、9、10版本只授权给了少数大学。

1982年,AT&T基于版本7开发了UNIX System Ⅲ的第一个版本,这是一个商业版本仅供出售。为了解决混乱的UNIX版本情况,AT&T综合了其他大学和公司开发的各种UNIX, 开发了UNIX System V Release 1。这个新的UNIX商业发布版本不再包含源代码,所以加州大学Berkeley分校继续开发BSD UNIX,作为UNIX System III和V的替代选择。BSD对UNIX最重要的贡献之一是TCP/IP。BSD 有8个主要的发行版中包含了TCP/IP:4.1c、4.2、4.3、 4.3-Tahoe、4.3-Reno、Net2、4.4以及 4.4-lite。这些发布版中的TCP/IP代码几乎是现在所有系统中TCP/IP实现 的前辈,包括AT&T System V UNIX 和Microsoft Windows中的TCP/IP都参照了BSD的源码。

同时,其他一些公司也开始为其自己的小型机或工作站提供商业版本的UNIX系统,有些选择System V作为基础版本,有些则选择了BSD。BSD的一名主要开发者,Bill Joy,在BSD基础上开发了SunOS,并最终创办了Sun Microsystems。


Bill Joy

1991年,一群BSD开发者(Donn Seeley、Mike Karels、Bill Jolitz 和 Trent Hein)离开了加州大学,创办了Berkeley Software Design, Inc (BSDI)。BSDI是第一家在便宜常见的Intel平台上提供全功能商业BSD UNIX的厂商。后来Bill Jolitz 离开了BSDI,开始了386BSD的工作。386BSD被认为是FreeBSD、OpenBSD 和 NetBSD、 DragonFlyBSD的先辈。

这是一个AT&T妄图私有化的Unix的时代。为了私有化Unix,1986年IEEE指定了一个委员会制定了一个一个开放作业系统的标 准,称为 POSIX (Portable Operating Systems Interface)。最后加上个X,不知道是为了好听,还是因为这本质上是UNIX的标准。当然,AT&T的Unix取得了这个标准制订战争的 胜利,还取得了Unix这个注册商标。此时BSD的拥护者自喻为冷酷无情的公司帝国的反抗军。就销售量来说,AT&T UNIX始终赶不上BSD/Sun。到1990年,AT&T与BSD版本已难明显区分,因为彼此都有采用对方的新发明。

这段时期,从实验室出来的被全世界所分享的Unix,正处于被私有化的关键时期。(这里有一个笑话——《Alice梦游UNIX仙境》)

Unix的法律纠纷

Berkeley Software Design, Inc(BSDI)很快就与AT&T的UNIX Systems Laboratories(USL)附属公司产生了法律纠纷,USL是AT&T注册的公司。AT&T为了拥有System V版权,以及Unix商标,为了垄断Unix,1992年,USL正式对BSDI提起诉讼,说BSD剽窃他的源码。而最终了结了好评如潮的BSD系统。

由于最后判决悬而未决,这桩法律诉讼将BSD后裔的开发,特别是自由软件,延迟了两年,这导致没有法律问题的Linux内核获得了极大的支持。 Linux跟386BSD的开发几乎同时起步,Linus说,当时如果有自由的基于386的Unix-like操作系统,他就可能不会创造Linux。尽 管无法预料这给以后的软件业究竟造成了什么样的影响(如果没有这个法律纠纷,很有可能没有今天的革命性的Linux),但有一点可以肯定,Linux更加 丰富了这块土壤。

这场官司一直打到 AT&T将自己的Unix系统实验室卖掉,新接手的Novell公司采取了一种比较开明的做法,允许BSDI自由发布自 己的BSD,但是前提是必须将来自于AT&T的代码完全删除,于是诞生了4.4 BSD Lite版,由于这个版本不存在法律问题,4.4BSD Lite成为了现代BSD系统的基础版本。

这桩诉讼最终在1994年1月了结,更多地满足了BSDI的利益。伯克利套件的18,000个文件中,只有3个文件要求删除,另有70个文件要求修 改,并显示USL的版权说明。这项调解另外要求,USL不得对4.4BSD提起诉讼,不管是用户还是BSDI代码的分发者。于是,BSD Unix走上了复兴的道路。BSD的开发也走向了几个不同的方向,并最终导致了FreeBSD、OpenBSD和NetBSD的出现。

从AT&T意识到了Unix的商业价值,不再将Unix源码授权给学术机构以来,到以后的几十年,Unix仍在不断变化,其版权所有者不断 变更,授权者的数量也在增加。Unix的版权曾经为AT&T所有,之后Novell拥有了Unix,再之后Novell又将版权出售给了 SCO(这一事实双方尚存在争议)。有很多大公司在取得了Unix的授权之后,开发了自己的Unix产品。(几年前,据传闻微软为了限制Linux,微软 让SCO到法院告Linux剽窃其源码)

由于Unix是由C语言写的,所以修改和移植都很容易,因此,很多商业公司及学术机构均加入这个操作系统的研发,各个不同版本的Unix也开始蓬勃 发展。这才产生了今天这么多的各式各样的Unix衍生产品。如AIX、Solaris、HP-UX、IRIX、OSF、Ultrix等等。(这些商业化的 Unix基本上都是源于AT&T授权的Unix System V)

Unix开源组织

AT&T的这种商业态度,让当时许许多的Unix的爱好者和软件开发者们感到相当的痛心和忧虑,他们认为商业化的种种限制并不利于产生的发 展,相反还能导制产品出现诸多的问题。随着商业化Unix的版本的种种限制和诸多问题,引起了大众的不满和反对。于是,大家开始有组织地结成“反叛联盟” 以此对抗欺行罢市的AT&T等商业化行为。

另一方面,关于“大教堂”(集权、封闭、受控、保密)和“集市”(分权、公开、精细的同僚复审)两种开发模式的对比成为了新思潮的中心思想。这个新思潮对IT业产生了非常深远影响。为整个计算机世界带来了革命性的价值观。

此 时,一个名叫Richard Stallman的领袖出现了,他认为Unix是一个相当好的操作系统,如果大家都能够将自己所学贡献出来,那么这个系统将会更加的优异!他倡导的 Open Source的概念,就是针对Unix这一事实反对实验室里的产品商业化私有化。尽管Stallman既不是、也从来没有成为一个Unix程序员,但在后 1980的大环境下,实现一个仿Unix操作系统成了他追求的明确战略目标。Richard Stallman早期的捐助者大都是新踏入Unix土地的老牌ARPANET黑客,他们对代码共享的使命感甚至比那些有更多Unix背景的人强烈。

为了这个理想,Richard Stallman于1984年创业了GNU,计划开发一套与Unix相互兼容的的软件。1985 年 Richard Stallman 又创立了自由软件基金会(Free Software Foundation)来为 GNU 计划提供技术、法律以及财政支持。尽管 GNU 计划大部分时候是由个人自愿无偿贡献,但 FSF 有时还是会聘请 程序员帮助编写。当 GNU 计划开始逐渐获得成功时,一些商业公司开始介入开发和技术支持。当中最著名的就是之后被 Red Hat 兼并的 Cygnus Solutions。

GNU组织的建立,延续了当年Unix刚出现时的情形,并为这种情形建立了可靠的法律和财务保障。GNU 工程十几年以来, 已经成为一个对软件开 发主要的影响力量, 创造了无数的重要的工具。例如:强健的编译器,有力的文本编辑器,甚至一个全功能的操作系统。从那时开始,许多程序员聚集起来开始开 发一个自由的、高质量、易理解的软件,让这使得Unix社区生机勃勃,一派繁荣景象。

自90年代发起这个计划以来,GNU 开始大量的产生或收集各种系统所必备的组件,像是——函数库(libraries)、编译器 (compilers)、调式工具(debugs)、文本编辑器(text editors)、网站服务器(web server),以及一个Unix的使用者接口(Unix shell)等等,等等。但由于种种原因,GNU一直没有开发操作系统的kernel。正当Richard Stallman在为操作系统内核伤脑筋的时候,Linux出现了。

Linux横空出世

1990 年,Linus Torvalds还是芬兰赫尔辛基大学的一名学生,最初是用汇编语言写了一个在80386保护模式下处理多任务切换的程序,后来从Minix(Andy Tanenbaum教授所写的很小 的Unix操作系统,主要用于操作系统教学)得到灵感,进一步产生了自认为狂妄的想法——写一个比Minix更好的 Minix,于是开始写了一些硬件的设备驱动程序,一个小的文件系统。这样0.0.1版本的Linux就出来了,但是它只具有操作系统内核的勉强的雏形, 甚至不能运行,你必须在有Minix的机器上编译以后才能玩。这时候Linus已经完全着迷而不想停止,决定踢开Minix,于是在1991年10 月5 号发布Linux 0.0.2版本,在这个版本中已经可以运行bash 和gcc。

从一开始,Linus就决定自由扩散Linux,包括原代码,随即Linux引起黑客们(hacker)的注意,通过计算机网络加入了Linux的 内核开发。Linux倾向于成为一个黑客的系统——直到今天,在Linux社区里内核的开发被认为是真正的编程。由于一批高水平黑客的加入,使 Linux 发展迅猛,几乎一两个礼拜就有新版或修正版的出现,到1993年底94年初,Linux 1.0终于诞生了!Linux 1.0已经是一个功能完备的操作系统,而且内核写得紧凑高效,可以充分发挥硬件的性能,在4M内存的80386机器上也表现得非常好,至今人们还在津津乐 道。时至今日,kernel的版本已经出到2.6。Linux的发展不像传统的软件工程,它完全是透过网络,集合世界各地的高手而成的一套操作系统,在这 里我们也可以见识到网络快速传播的威力。Linux初次让整个世界感觉到了开源力量和网络力量的如此强大。(Linux 的标志和吉祥物是一只名字叫 做 Tux 的 企鹅,标志的由来是因为Linus在澳洲时曾被一只动物园里的企鹅咬了一口,便选择了企鹅作为Linux的标志。)

Linux 的历史是和GNU紧密联系在一起的。从1983年开始的GNU计划致力于开发一个自由并且完整的类Unix操作系统,包括软件开发工具 和各种应用程序。到1991年 Linux 内核发布的时候,GNU已经几乎完成了除了系统内核之外的各种必备软件的开发。在 Linus Torvalds 和其它开发人员的努力下,GNU组件可以运行于Linux内核之上。整个内核是基于 GNU 通用公共许可,也就是GPL(GNU General Public License,GNU通用公共许可证)的,但是Linux内核并不是GNU 计划的一部分。1994年3月,Linux1.0版正式发布,Marc Ewing成立了 Red Hat 软件公司,成为最著名的 Linux 分销商之一。

严格来讲,Linux这个词本身只表示Linux内核,但在实际上人们已经习惯了用Linux来形容整个基于Linux内核,并且使用GNU 工程 各种工具和应用程序的操作系统(也被称为GNU/Linux)。基于这些组件的Linux软件被称为Linux发行版。一般来讲,一个Linux发行套件 包含大量的软件,比如软件开发工具,数据库,Web服务器(例如Apache),X Window,桌面环境(比如GNOME和KDE),办公套件(比如OpenOffice.org),等等。

1991至1995年间,Linux从概念型的0.1版本内核原型,发展成为能够在性能和特性上均堪媲美专有Unix的操作系统,并且在连续正常工 作时间等重要统计数据上打败了这些Unix中的绝大部分。1995年,Linux找到了自己的杀手级应用——开源的web服务器Apache。就像 Linux,Apache出众地稳定和高效。很快,运行Apache的Linux机器成了全球ISP平台的首选。约60%的网站选用Apache,轻松击 败了另两个主要的专有型竞争对手。今天的LAMP(Linux , Apache, MySQL, PHP)已经成为了架构Web服务器的主要首选。

现如今的Linux不但可以装在几乎所有的主流服务器上,当然也包括桌面的X86系统中。其还常常被用于嵌入式系统,机顶盒、手机、交换机、游戏机、PDA、网络交换机、路由器、等等,都是因为Linux那精彩的内核。

Linux的出现,不仅仅给世界带来了一个免费的操作系统,也不仅仅是对Unix自由、共享的文化的延续,它的出现带给了计算机世界自Unix、GNU以来更为成熟的思想和文化。

Linux今天的领袖

Linux和GNU关系是比较微妙的。那时,自由软件基金会编写的用户软件工具包铺平了一条摆脱高成本专有软件开发工具的前进道路。意识服从经济, 而不是领导:一些新手加入了RMS的革命运动,高举GPL大旗,另一些人则更认同整体意义上的Unix传统,加入了反对GPL的阵营,但其他大部分人置身 事外,一心编码。

Linus Torvalds巧妙地跨越了GPL和反GPL的派别之争。他利用GNU工具包搭起了自创的Linux内核,用GPL的传染性质保护它,但拒绝认同 Richard Stallman的许可协议反映的思想体系计划。Linus Torvalds明确表示他认为自由软件一般情况下更好,但他偶尔也用专有软件。即使在他自己的事业中,他也拒绝成为狂热分子。这一点极大地吸引了大多数 黑客,他们虽然早就反感Richard Stallman的言辞,但他们的怀疑论一直缺个有影响力或者令人信服的代言人。而Linus Torvalds正好充当了这一角色。

Linus Torvalds令人愉快的实用主义及灵活而低调的行事风格,促使黑客文化在1993至1997年间取得了一连串令人惊奇的胜利,不仅仅在技术上的成功, 还让围绕Linux操作系统的发行、服务和支持产业有了坚实的开端。结果,他的名望和影响也一飞冲天。Torvalds成为了互联网时代的英雄;到 1995年为止,他只用了四年时间就在整个黑客文化界声名显赫,而Richard Stallman为此花了十五年,而且他还远远超过了Stallman向外界贩卖“自由软件”的记录。与Torvalds相比,Richard Stallman的言辞渐渐显得既刺耳又无力。(参看《Linus Torvalds 语录 Top 10》)

今天,我们也说不清楚是GNU Linux还是Linux GNU。Linux既不排斥开源,也不排斥商业化,Linus认为好的软件是需要免费和商业化共同推进的。正是这种革命性的想法,造就了今天的Linux火红的局面(参看《谁写了Linux》、《Linux基金会的广告》、《Linux Distribution Timeline》)。Linux就像一股清泉流入了所有人的心中,引发了很多的启迪和思考。

Unix与黑客文化

黑客的文化和Unix的商业化存在着必然的联系。自从Unix出现,黑客文化就与之而来。

1993初,一个悲观的观察家撰文指出,已经有理由认为Unix的传奇故事连同他带有黑客文明将一同破产。许多人预测,从那时起Unix将在六月内 死亡。他们很清楚,十年的Unix商业化,使自由跨平台的Unix梦以失败告终。Unix允诺的跨平台可移植性,在一打大公司专有的Unix版本之间不停 地斗嘴中丢失,一个完美的操作系统最终沦为多种版本的一团乱麻,这应该说是人类文明史上的一个重大悲剧。

在专有软件社会中,只有像微软一样的“集权制,大教堂”生产方式才能成功。那个时代的人悲观地相信,技术世界的个人英雄主义时代已经结束,软件工业 和发展中的互联网络将逐渐地由像微软一样的巨型企业支配,再也没有“佐罗”,世界是恺撒大帝的世界,计算机文明将进入黑暗的帝国时代。黑客已经死了,自由 不付存在。

自从Unix出现以来,第一代的Unix黑客似乎垂垂老矣,衣食不饱( Berkeley计算机科学研究组在1994丢失了自己基金)。这是一个抑压的时代。专有的商业Unix的结果证明那么沉重、那么盲目、那么不适当,以致 微软能够用那次等技术的Windows抢走他们生存的空间,拿走他们的干粮。黑客世界的残余力量被逼到了世界上的角落里,苟延残喘。

就在黑客文化日渐衰落之时,美国新闻周刊的资深记者Steven Levy完成了著名的《黑客列传》一书,书中着力介绍了一个人物:Richard M. Stallman的故事,他是麻省理工学院(MIT)人工智能实验室领袖人物,坚决反对实验室的研究成果商业化。他是商业软件社会中坚强的一员,决不随波 逐流,建立了全新的黑客文化。

Richard M. Stallman(他的登陆名RMS更为人熟知)早在1970年代晚期就已经证明他是当时最有能力的程序员之一。Emacs编辑器就是他众多发明中的一 项。RMS的目标是将后1980的松散黑客社群变成一台有组织的社会化机器以达到一个单纯的革命目标。也许他未意识到,他的言行与当年卡尔·马克思号召产 业无产阶级反抗工作的努力如出一辙。RMS宣言引发的争论至今仍存于黑客文化中。他的纲要远不止于维护一个代码库,已经暗含了废除软件知识产权主张的精 髓。RMS通过“自由软件(free software)”让黑客文化更加有自我意识。当然,这个充满魅力又具争议的人物本身已经成为了一个黑客文化英雄。

只有痴迷的“黑客”和具有创造力的怪人结成的反叛联盟才能把我们从愚蠢中拯救出来——他们接着教导我们,真正的专业和奉献精神,正是我们在屈服于世俗观念的“合理商业做法”之前的所作所为。 ——The Art of Unix Programming

RMS让世界上所有的人都知道,入侵电脑系统只是低级不入流的黑客干的事,真正的黑客,是为了自由,为了软件的自由,为了挑战计算机世界中的霸权主 义而斗争。他们不是街头小混混,他们更像是绿林好汉,更像是罗宾汉,更像是佐罗。就像渴望民主的人民同专制的政府斗争一样。RMS领导着许多的黑客通过互 联网向专有软件发出宣战。

X Windows是首批由服务于全球各地不同组织的许多个人以团队形式开发的大规模开源项目之一。电子邮件使创意得以在这个群体中快速传播,问题由此得以快 速解决,而开发者可以人尽其才。软件更新可以在数小时之内发送到位,使得每个节点在整个开发过程中步调一致。网络改变了软件的开发模式。

另一方面,RMS的理论体系有许多东西非常有争议,他的GPL被认为是一种“病毒式”的协议,BSD的fans和老牌Unix黑客们认为,他们编写 Unix的年头都比GPL声明要长得多,GPL依然有太多的限制,而BSD协议则比GPL更加的自由。另一方面,RMS走向了另一个极端,他是完全反版权 的,反商业化的。把软件产品从强制收费推向了强制免费、共享和开源,这也为他带来了许多许多的争议。

在RMS组织黑客闹革命的年代里,没有多少黑客认同于RMS的理论体系,更多的他们参与GNU只是为了体现那种在互联网上协同工作,令人激动的工作模式。自从GNU设立以来,争议不断,而黑客文化却从未有统一在他的理想体系之下。

自从Linux出现以后,一个新的黑客领袖出现了,Linus Torvalds的中庸态度网聚了世界上顶尖的黑客,其绕过了GPL和反GPL的派系之争,他使用GNU的工具从而以GPL的“传染性”保护了 Linux,但他同时也不承认RMS的理论思想体系,他即开源,又支持商业化。虽然,他没有带给黑客们什么重要的思想体系或统一的价值观,但他整合了全世 界黑客的阵营,让所有的黑客的行为都围绕着Linux这一事物进行。他以“用自由软件是因为它运行得更好”轻而易举地盖过了“用自由软件是因为所有软件都 该是自由的”。

1998年初,这种新思潮促使网景公司(Netscape Communications)公布了其Mozilla浏览器的源码。媒体对此事件的关注促成了Linux在华尔街的上市,推动了1999-2001年间 科技股的繁荣。事实证明,此事无论对黑客文化的历史还是对Unix的历史都是一个转折点。

Unix的历史教训

下面的文字出自《The Art of Unix Programming》(Unix编程艺术)。令今天我们所有人所反思。

在Unix历史中,最大的规律就是: (看看《谁写了Linux》你就会知道这一规律)

距开源越近就越繁荣。任何将Unix专有化的企图,只能陷入停滞和衰败。

回顾过去,我们早该认识到这一点。1984年至今,我们浪费了十年时间才学到这个教训。如果我们日后不思悔改,可能还得大吃苦头。

虽然我们在软件设计这个重要但狭窄的领域比其他人聪明,但这不能使我们摆脱对技术与经济相互作用影响的茫然,而这些就发生在我们的眼皮底下。即使Unix社区中最具洞察力、最具远见卓识的思想家,他们的眼光终究有限。对今后的教训就是:过度依赖任何一种技术或者商业模式都是错误的——相反,保持软件及其设计传统的的灵活性才是长存之道。

另一个教训是:别和低价而灵活的方案较劲。或者,换句话说,低档的硬件只要数量足够,就能爬上性能曲线而最终获 胜。经济学家Clayton Christensen称之为“破坏性技术”,他在《创新者窘境》(The Innovator’s Dilemma)[Christensen]一书中以磁盘驱动器、蒸汽挖土机和摩托车为例阐明了这种现象的发生。当小型机取代大型机、工作站和服务器取代 小型机以及日用Intel机器又取代工作站和服务器时,我们也看到了这种现象。开源运动获得成功正是由于软件的大众化。Unix要繁荣,就必须继续采用吸 纳低价而灵活的方案的诀窍,而不是去反对它们。

最后,旧学派的Unix社区因采用了传统的公司组织、财务和市场等命令机制而最终未能实现“职业化”。只有痴迷的“黑客”和具有创造力的怪人结成的 反叛联盟才能把我们从愚蠢中拯救出来——他们接着教导我们,真正的专业和奉献精神,正是我们在屈服于世俗观念的“合理商业做法”之前的所作所为。

Unix族谱

Unix的故事仍旧延续着……,许多网站也为这段历史留下记录。一个详细记录Unix历史的网站(http://www.levenez.com /unix/),这个网站忠实记载着1969~2005 年Unix发展的大事,而且还有 PDF 档案可供下载,上面有一个庞大的UNIX家族版本树, 让人叹为观止。网站的首页陈列每个时期Unix的历史,也代表着无数工程师的心血与努力。

下面是一个简单的Unix的族谱:

     |--AT&T (1969)-----\
     |                  |
     |              V6 (1976)
     |                  |
     |              V7 (1979)
     |                  |
     |   Novell owns AT&T's Unix (by 1994)
     |     _____________|____________________
     |     |       |      |        |         |
     |    AIX    IRIX    SCO   HP-UX   Solaris 2.X
     |   (IBM)   (SGI)          (HP)     (Sun)
     |
     |
     |--Berkley (1977)-----\
     |                     |
     |                  1BSD (1977)
UNIX-|                     |
     |                4.4BSD (1993)
     |                     |
     |                   Net/2
     |                     |
     |               4.4BSD-Lite (by 1995)
     |     ________________|____________________________________
     |     |       |          |         |          |            |
     |   SunOS   Ultrix   NetBSD    OSF/1   NeXTSTEP   Mac OS X
     |   (Sun)   (DEC)   (Various)  (DEC)    (NeXT)    (Apple)
     |                   (FreeBSD)
     |
     |
     |--Hybrids----\
                   |
                Linux (Various)
                   |
                   |____________________________________________
                   |    |      |          |              |      |
                   | RedHat  Debian  Mandrake   Slackware    S.u.S.E.
                   |                          (Walnut Creek)
                   |
                   |_____________________________________________
                       |        |           |          |        |
                    MkLinux  LinuxPPC  TurboLinux  OpenLinux  CorelLinux
                    (Apple)                        (Caldera)   (Corel)

点些查看《Linux 分发包族谱

Unix的特点

现在的文献中提到Unix基本上是说,由Ken Thompson和Dennis Ritchie共同开发的。而通过历史我们也能发现,Unix的主要是由Ken Thompson写下的。但在学术界,Dennis Ritchie的名字往往被排在了Ken Thompson前面的。这就是因为,Dennis Ritchie不但发明了C语言,而且当时他设计Unix操作系统的设计思想,影响了整个世界,直到今天。

当时,他们开发UNIX,没有正式立项,是Ken Thompson和Dennis Ritchie等少数几个人偷偷干的,如果一切都要从头从新设计,那几乎是不可能的。所以,Unix吸取与借鉴了Multics的经验,如内核,进程,层 次式目录,面向流的I/O,把设备当作文件,……等等。但是Unix在继承中又有创新,比如Unix采用一种无格式的文件结构,文件由字节串加\0组成。 这带来两大好处:一是在说明文件时不必加进许多无关的“填充物”,二是任何程序的输出可直接用作其他任何程序的输入,不必经过转换。后面这一点叫做“管 道”(piping),这就是Unix首创的。此外,像把设备当作文件,从而简化了设备管理这一操作系统设计中的难题,虽然不是UNIX的发明,但是实现 上它采用了一些新方法,比Multics更高明一些。

下面是Unix的特点:(30多年过去了,这些东西早已变成经典)

  • Everything (including hardware) is a file
    所有的事物(甚至硬件本身)都是一个的文件。
  • Configuration data stored in text
    以文本形式储存配置数据。
  • Small, single-purpose program
    程序尽量朝向小而单一的目标设计
  • Avoid captive user interfaces
    尽量避免令人困惑的用户接口
  • Ability to chain program together to perform complex tasks
    将几个程序连结起来,处理大而复杂的工作。

Unix的影响和哲学

Unix是第三次工业革命中计算机软件领域最具代表性的产物。在这近40年中,由Unix造成的影响是最有深远意义的。就我看来,Unix为软件领域带来了至少以下有积极的东西,由这些东西所引发的直接或间接的事物更是举不胜数。

  1. 软件开发的若干哲学和思想。
  2. 全民参与推动软件,代码共享的模式。
  3. 开启了黑客文化和开源项目。
  4. 免费和商业的完美结合的Linux。
  5. C语言,而后发展的C++,Java等等类C的语言和脚本。(参看《C语言的演变史》)
  6. TCP/IP,其的Socket编程已成为今天通用的网络编程主流。(参看《到处都是Unix的胎记》)

不能不说,AT&T虽然发展了Unix,但今天Unix的混乱的局面也和AT&T 有着直接原因。但反过来说,如果没有 AT&T的反面教材,今天的GNU/Linux很有可能也不会出现。AT&T究竟是限制了Unix的发展,还是以反面示例促进了Unix 社区,已不好评说。今天,软件是商业化好还是开源好的争论还在继续,纵观这几十年来Unix的历史,Linux的划时代地出现。相信你会得出自己的结论。 不管怎么样,Unix的经历对计算机领域贡献的不单单是技术,他给我们提供了丰富而生动的教材。特别是Unix引发的哲学,让今天的我们依然受益不浅。

说到Unix为我们所带来的软件开发的哲学,我必需要说一说。Unix遵循的原则是KISS(Keep it simple, stupid)。在http://en.wikipedia.org/wiki/Unix_philosophy 上有很多的基本上大同小异的Unix哲学,都是很经典的。

Doug McIlroy 是认为UNIX的哲学是这样的:三条哲学,简明扼要,就是这三条哲学贯穿着整个Unix世界。尤其是第一条“do one thing and do it well”真是相当精彩!

  • Write programs that do one thing and do it well.
  • Write programs to work together.
  • Write programs to handle text streams, because that is a universal interface.

只要是Unix的程序员,他们会比别的程序员在任何时候都会不停地强调着这三条哲学。

而《The Art of Unix Programming》总结了下面这些哲学,都是至理名言啊。

  • Rule of Modularity: Write simple parts connected by clean interfaces.
  • Rule of Clarity: Clarity is better than cleverness.
  • Rule of Composition: Design programs to be connected to other programs.
  • Rule of Separation: Separate policy from mechanism; separate interfaces from engines.
  • Rule of Simplicity: Design for simplicity; add complexity only where you must.
  • Rule of Parsimony: Write a big program only when it is clear by demonstration that nothing else will do.
  • Rule of Transparency: Design for visibility to make inspection and debugging easier.
  • Rule of Robustness: Robustness is the child of transparency and simplicity.
  • Rule of Representation: Fold knowledge into data so program logic can be stupid and robust.
  • Rule of Least Surprise: In interface design, always do the least surprising thing.
  • Rule of Silence: When a program has nothing surprising to say, it should say nothing.
  • Rule of Repair: When you must fail, fail noisily and as soon as possible.
  • Rule of Economy: Programmer time is expensive; conserve it in preference to machine time.
  • Rule of Generation: Avoid hand-hacking; write programs to write programs when you can.
  • Rule of Optimization: Prototype before polishing. Get it working before you optimize it.
  • Rule of Diversity: Distrust all claims for “one true way”.
  • Rule of Extensibility: Design for the future, because it will be here sooner than you think.

X Windows 的设计者 Mike Gancarz 给出了下面九条哲学思想

  1. Small is beautiful.
  2. Make each program do one thing well.
  3. Build a prototype as soon as possible.
  4. Choose portability over efficiency.
  5. Store data in flat text files.
  6. Use software leverage to your advantage.
  7. Use shell scripts to increase leverage and portability.
  8. Avoid captive user interfaces.
  9. Make every program a filter.

在今天,这种思想依然被传承着,在影响着世界上各个角落的每一个程序员。

Unix痛恨者手册

这里还需要值得一提的是一本叫《The Unix-Haters Handbook》,中文译做《Unix痛恨者手册》。可以在这里下载:http://research.microsoft.com/~daniel/uhh-download.html。 其中以调侃的语气声讨了Unix的种种不是。虽然这是十年前的一本书了,但还是值得一读。这本书指出了许多Unix的设计错误,指出了种种看起来很合理的 设计走向了荒谬,还这样调侃了C语言——“如果说C语言给足了让你上吊的绳子,那么,C++在给了你足够的绳子把你的邻居全部捆起来之后,还给了你足够的 绳子让你为一艘小帆船装上帆,最后你还有足够的绳子把自己吊死在帆船的桅杆上”。呵呵,相当的尖酸刻薄吧。里面有一句对操作系统的评价是这样的:“The fundamental difference between Unix and the Macintosh operating system is that Unix was designed to please programmers, whereas the Mac was designed to please users. (Windows, on the other hand, was designed to please accountants.”(Windows设计给会计人员?!连计算机用户都不是了,呵呵)

不过,我可以感觉得到这本书的作者在书中对Unix的感情是比较复杂的,爱恨交加,在书的最后有这样一句话“would anyone have spent this much time and effort writing about how much they hated Unix if they didn’t secretly love it? I’ll leave that to the readers to judge, but in the end, it really doesn’t matter: If this book doesn’t kill Unix, nothing will”。是的,如果Unix能够存活这么长的时间,那么,不会有什么东西可以把他消灭了。

从《Unix痛恨者手册》这本书,再加上Unix的历史,我们可以感到Unix的经历的风风雨雨,在Unix上面出现有种种教训,近40年的历 程,Unix历经磨难,几近夭折,一路走来的确很不容易,让人由衷感叹。今天的Unix,今天的软件工业和以前相比已是不可同日而语。很大程度上,这些都 要归功于这个充满苍桑的Unix。

后记

在中国我们开始学习计算机的时候,我们被Microsoft所创造的文化所笼罩里。就在Unix出现革命性的转变,在Unix影响计算机世界文化的 那几年里,科班出生专业开发人员学习的是MS-DOS和微软的文化,我们犹如一个井底之蛙一样,对外面的翻天覆地的变化无动于衷。微软创造的文化在我们这 里尤其地根深蒂固,我们几乎忘记了另外一边的Unix(参看《Unix 40年:Unix年鉴》、《Unix 40年:昨天,今天和明天》)。

在那充满激情的Unix的岁月里,大伙为了科研目的或个人兴趣在Unix上进行各种开发,并且不计较金钱利益,将这些源码公开,互相共享。在那里, 开发和自由成为主题,正因为如此,当今的世界才如此丰富多采。在40年Unix文化和技术积淀的里面,蕴涵着比较纯正的计算机文化和思想。

纵观整个Unix的历史过程中,许许多多的程序员、工程师前辈们在Unix中所摸爬滚打,他们的辛勤地、他们呕心沥血地跟随Unix,努力建立一个 繁荣的计算机世界的文明。Unix不是一个简简单单的操作系统。有人说,Unix是程序员设计给程序员的,一点没错。Unix的近40年历史造就了它的博 大精深,它给程序员们带来的绝不仅仅只是技术上的知识。它的失误,它的无奈,它的精神,它的荣耀,它从技术和思想上都启迪着我们。对于程序员来说,学习 Unix就等同于向前辈程序学习。无论你是什么样的程序员,你都应该了解Unix,这是开发人员的根,前面的开发者造就了它,而它又在引领后面的开发人 员,它是前辈程序员们交给我们的一份礼物,一个接力棒,它是开发人员赖以生存的土壤,是上一辈程序员留给我们这一代程序员开启未来的钥匙。Unix就像一 个程序员教父一样,理当受到我们的尊敬和崇拜。

参考资料

无觅相关文章插件,快速提升流量