虽然挖坑不埋但依然忍不住要为 Linux 回答一个问题

645 查看

前些天发的一篇文章『Linux 挖坑不埋指南——甲篇』在这里被编辑推荐到了首页,引来一些关注并且被多处转载,这是我始料未及的。

有人读完此文,提出了这么一个问题:『对于一个软件来说,它的价值在于能为用户干什么。一般用户为什么会用 Linux 呢?这些用 Linux 的用户会干什么呢?希望写教程的人能够清楚。』

『Linux 挖坑不埋指南』本来是写给实验室里新来的同学看的,因为他们的工作环境是 Linux。我不希望他们面对这样一个他们以前从未用过甚至未曾听说过的操作系统而心生畏惧或误入『歧途』,所以想写几篇文章开导他们一下。也就是说,我在写这个指南的时候已经假定了受众是那些准备使用 Linux 的人,而非对 Linux 有些好奇但并不打算使用它的人,所以才会导致有人提出上面的那个问题。

这个问题也许是听说过 Linux 但从未用过 Linux 的人都想问的问题。这意味着也极有可能是我所在的实验室新来的同学都想问的问题,因为他们往往刚刚从机械工程专业毕业,他们所掌握的计算机知识也许只是 Windows、MS Office、UGNX 之类的应用软件。当他们来到实验室之后被『强迫』使用 Linux,他们应该也会问为什么不用 Windows?因此,于公于私,这个问题我都无法避免。

Linux 可以让『一般用户』更能理解与尊重『自由』

甲篇』原本发布于简书。额外的说一句,此文在简书上发了之后,可能除了实验室里的几个同学之外,它并没有读者,以至于我以为全天下人对 Linux 再无好奇之心了。后来我想在简书上建一个 Linux 专栏与 TeX 专栏,于是就新注册了一个帐号,然后发现这个新注册的帐号必须与自己的手机号码进行绑定,否则无法发表文章。

我给简书的工作人员发了一封信件,说我的手机号一般只告诉我的亲朋好友以及工作上有交集的人,不会透露给任何陌生人。简书以『建议用户绑定手机号』为名但以强制用户绑定手机号为实的方式来获取用户手机号,这是错误的做法。

简书的 CTO 是个非常负责的人,这一点我很欣赏,他回信说:非常抱歉必须绑定手机,但是请您放心,您的手机号绝不会被透露给第三方或是滥用。另外,手机版发文章可以不需要绑定手机,您可以试试看我们的 App。

于是我就放弃了简书,来到了这里。因为在这里,我拥有的自由要比在简书更多一些,至少目前是这样。

简书上的其他用户,包括那些经常在文章里追求自由憎恨枷锁的文艺青年们并不觉得自己的简书帐号与手机号的绑定是个多大的事,他们依然爱着简书。

Linux 为我提供的价值之一,就是对自由的一些认识。如果你使用一个软件,它给你带来一些对人生的思考,这也许比这个软件为你解决的问题更有价值。就像你很喜欢的那些影片,它们也是『软件』,是由剧本作者与导演编制的程序,你可曾想过这些影片能给你干什么?影片什么都不能干,但是它们却能非常好的在你的大脑中运行一遍又一遍,以至于在你的思想机器上产生各种各样的输出。

只是在你的思想上产生输出,这当然不是 Linux 的主要价值。因为在这方面,它甚至还不如『黑客帝国』。那下面来谈谈它让为这个现实的世界输出了什么,但是说来话长,请忍耐我的絮絮叨叨。

在枷锁中畸形的生长

2005 年,我们在 Windows 里做 UG(现在叫 UGNX,很有名的机械产品三维设计软件)的二次开发,给它增加一个具有逆向工程功能的模块。当时,我们想在 UG 中实现一个交互操作,用鼠标在屏幕上交互构件一组垂直于屏幕的平面去截取点云数据。这个操作需要一个最基本的功能,就是我们用鼠标点击一下屏幕,就生成一条垂直于屏幕的直线。当时,UG 没有提供相应的 API(现在有没有提供就不知道了)。

为了解决这个问题,我用了 WIN32 的 HOOK 机制捕捉鼠标在 UG 主窗口中的二维坐标,然后用 OpenGL 的 gluUnProject 函数将这个二维坐标转换为垂直与屏幕的直线与三维视景体前、后面的交点。这个功能的实现,对于当时从机械设计与制造专业毕业不久的我来说,是个莫大的挑战。即使现在来看,这也是个充满了奇技淫巧的诡异的二次开发工作。折腾了差不多有一个月,失败了很多次,最后终于成功了。当时我还是挺享受这个成功的,但同时也想到,如果我能看到 UG 的源码,也许就不需要我这样拐弯抹角的 hack 了,而且即使成功了,我依然担心 WIN32 的 HOOK + OpenGL 的 gluUnProject 函数之所以生效只是因为『碰巧它们能工作』。2005 年底,我们那个课题通过验收之后,我就开始摆弄 Linux,不想继续在 Windows 里做 CAD 的二次开发工作。

现实中的各种枷锁让你不得不选择一些奇技淫巧,而这些奇技淫巧也一直被很多业内人士认为是『高级技术』。我们生活在 GFW 的封锁中,翻墙技术也就成了某种奇技淫巧。我们生活在一个以考试成绩评价个人价值的环境里,所以就有了应对考试的各种技巧,就连程序猿去找工作,也有面试宝典什么的。我们生活在一个非常崇尚成功的社会里,也就有了乱七八糟的成功学……我们的智慧本来可以用来做更多更有价值的事,但是更多的时候我们努力将智慧用于让自己去适应枷锁。

很少有人敢于质疑这个世界是不是错了,因为这样似乎没有意义。一个人怎能与整个世界去抗衡?既然无法让这个世界变得正确,那么就干脆和它一起错下去,这样就再也感受不到这个世界的错误了。于是,有的人是装糊涂,而更多的人是真的糊涂。在这种情况下,有多少人真的能够明白自己所干的事情?先明白自己要干的事情,然后才能去判断工具的价值。如果你做的事情根本不需要自由,不需要直截了当、不需要源代码,不需要开放,不需要好玩……那么,Linux 对你而言可能的确是一点价值都没有的东西。

Linux 其实也是个挺大的枷锁,但是至少它现在还没让我感觉太局促。

这些用 Linux 的用户会干什么呢?

Windows 系统的用户多如繁星,而 Linux 用户数量也许仅仅是其 1%。所以,很多人认为 Windows 为世界创造了很大的价值,认为 Linux 只是打着自由/开源的旗号让程序猿饿着肚子搞革命。事实上,在信息世界里,Linux 已经像空气和水一样无处不在。你所访问的大部分网站都运行在 Linux 主机之上,你所用的智能手机往往运行着 Linux 内核,你所连接的 WIFI 路由也运行着 Linux 系统,你家里的机顶盒里面运行的也极有可能是 Linux……如果一个软件你已经用了,它已经替你完成了你要做的事,但是你却觉得自己没有用它,而且也不懂得怎么去用它,那么这个软件所创造的价值是你无法估量的。

那些用 Linux 的人似乎每天都在用一些看上去非常难用的东西。他们可以瞬间完成成百上千个文件的重新命名、格式转换、分类存放等任务,也能够举手之间将从成百上千个文本文件中对特定字符进行检索、删除以及替换。在局域网内,他们可以很轻易的从同事的机器上获取文件,或者调用他们的机器上所安装的软件来解决自己的问题。他们了解自己的系统,只要他们愿意去了解。他们对个人信息的安全颇为关注,熟悉数据签名与非对称加密工具的使用。他们可以根据自己的爱好选择自己喜欢的桌面,并且根据自己的需要进行定制。他们可能并非程序猿,但是他们也会用 Shell 脚本或一些编程语言编写一些小程序处理一些日常事务……总之,计算机在他们的手里变得更像是计算机,而不是退化为手机、电视机、影碟机、游戏机。

『一般的计算机用户』所能完成的事,Linux 用户是能够完成的。非一般的计算机用户想要做的事,纵然 Linux 现在难以完成,但是鉴于用户是『非一般用户』,他们或许有能力在 Linux 中创造一些东西来完成这些本来难以完成的任务。

创造东西的过程,可以让你掌握更多的知识。不是因为 Linux 没有这些东西所以去创造,而是出于自己的需要而创造。虽然我无法以个人之力在 Linux 的世界创造一个像 UGNX 这样庞大的三维设计软件,但是我有能力在 Linux 世界里调集我所掌握的资源去解决我要用 UGNX 所解决的那些问题。这就像渡江,若无渡轮可乘,你可以学会游泳,也可以学会制作木筏与独木舟……如果你很幸运,有很多同伴,创造一个庞大的渡轮也不是太困难的事。

很多人认为,自己动手丰衣足食,固然很好,但是重复发明轮子浪费太多时间似乎没有意义。这就像一个不太好笑的笑话。有人说,如果不抽烟不喝酒,就可以省下来好多好多钱。又抽烟又喝酒的人则反问道,你既不抽烟也不喝酒,但是也没见你很有钱啊。

任何东西的创造,都会有一个起点。即使你创造的是别的世界里已经存在的东西,但是起点相同,结果却未必相同,它有无数种可能。因为我们的世界是充满着不确定性的,至少目前是这样。Linux 内核本身就是对那时已经存在的 Unix 的一个『复制』,它不像各种 BSD 那样继承了 Unix 代码。但是,现在的 Linux 与 BSD 已经出现了非常多的不同。在自由与开源软件的世界里,由于源代码是公开的,所以很多软件被不同的人 fork,从而产生了各种各样的分支……人类这个完整的系统莫名其妙的这种行为,与非确定性图灵机非常像。既然这个世界充满着不确定性,那么任何创造都有它的意义。

Linux 用户们所作的事情,本质上就是继承与创造。他们不需要抄袭,因为没这个必要。这就是自由/开源生态环境的基本进化法则。造物主,假如的确有这种生物,他可曾立下法律禁止人类阅读与修改基因代码?

高校是最应该使用 Linux 的地方

我工作的地方是某所高校的实验室。2006 年,我以请实验室里的同学吃一顿烧烤为代价,成功的让他们站到了我这边,然后给『老板』提交了一份将实验室的软件开发环境换成 Linux 的论证报告,就这样成功的发动了我的『Linux 政变』,以后再也不用憋屈的去折腾 UG 的 API,去用需要读完《深入浅出 MFC》才会用的 MFC,也不需要自己去写很多没必要写的代码。我们可以很灵活的利用许多自由/开源项目去快速验证我们的一些想法是否可行,比如 CGAL、OpenSceneGraph、PCL、OpenCASCADE 之类的库,可以用 TeX、gnuplot、asymotote 等工具撰写文档,可以用 ssh、git、rsync、nginx 之类工具进行内部协作。这些工具,大部分也可以在 Windows 环境中运行,但是以前我们用了 Windows 很多年也未曾听说过它们……

高校的实验室里的科研人员的工资是国家发的,科研项目经费是国家财政拨的,为世人探索未知的领域应该是他们的本职工作,因此研究成果应该是向世人公开的。他们不存在商业利益上的技术保密与垄断,我觉得高校科研人员甚至都不应该去申请发明专利!在这样的一个本来就应该坚持学术自由与开放的环境里,大部分实验室却将自己的开发环境限定在一个闭源的系统中,用着 MS Office,用着 PS,用着 Matlab,用着科研经费所能买到的任何商业的闭源的专业软件,于是他们有些人可能到现在依然干着我在 2005 年干的那类事情……去年还有个北航的博士生托我师姐问我当初在 UG 里写的代码是否还有……事实上,他们本来是可以在一些自由/开源软件上更快速的实现他们的想法,同时这些想法的实现也可以进一步促进自由/开源软件的发展的。然而这个国家最不担心饭碗的这群人只会输出大量的论文,而我们看不到他们的实现。很多教授觉得用 Linux 属于浪费时间……一群精致的利己主义者培养出来了一群只会袖着双手漫不经心的问『这么难用的东西为何要用?它对于我这样的一般用户有何价值?』此类问题的学生……我觉得他们浪费了太多纳税人的钱,浪费了学生交的学费,浪费了自己的智慧,甚至对不起自己的科学家身份。

一个科学家,首先应该是一个黑客。他对自己所研究的方向保持着探求真相的强烈兴趣。国内我只熟悉计算机辅助设计与制造方向的情况,这个方向上的很多专家,他们懂得一大堆概念,会使用 AutoCAD、UGNX、PRO/E、Catia 之类的软件,充其量可以在这些软件上做一些修修补补的二次开发,他们对于那些自由/开源的几何引擎与 CAD 软件却近乎一无所知。很难想象他们能够在那些闭源软件上能够创造与发展新的计算机辅助设计与制造技术。Linux 世界里有很多经典的软件以及程序设计语言是科学家的贡献,Linux 的源头 Unix 也是科学家发明的。这些科学家是真正的科学家,因为他们首先是黑客,他们在学术自由的高校氛围里对自己感兴趣的东西给予孜孜不倦的探索与实践,他们将自己所得的成果毫无保留的公布于世,并且培养出来大批的好学生。

后记

很多年前,王垠也为 Linux 回答了这样的问题,很多人说他是偏激的。10 年之后的王垠也说自己当时是偏激的。其实这种文章,写出来就必定存在偏激之处。然而我不觉得偏激有什么不好。与其说是偏激,毋宁说是偏执。我总觉得只有偏执的人能够在某个方向走得比常人更远。与其说是偏执,毋宁说是有着坚定的信仰。

要做到不偏激,那只能是说 Windows 好,Linux 好,Mac OS X 好,FreeBSD 好……都很好,然后它们也都存在着缺点……所以我们应当根据自己的需要去选择。既然如此,那么『应当根据自己的需要去选择』只不过是『偏激』的代名词而已,而且这句话还容易抹杀一个前提,即本文中所说的『你明白自己所做的事』么,你明白自己的需要么?

如果你严肃认真的将问题逐渐上溯,到达原点,也许你会发现原点也很模糊。不一定是你选择了它们,也有可能是它们选择了你。如果想让原点保持确定,那唯一的办法就是坚定某种『信仰』。

这篇文章并非劝慰世人去使用 Linux,我只希望有耐心读完此文的人能够确定自己的选择是正确的。这个时代,Linux 其实已经不需要布道与传教,它的价值所在已经浑然天成。