转载

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

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

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

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

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

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

『甲篇』原本发布于简书。额外的说一句,此文在简书上发了之后,可能除了实验室里的几个同学之外,它并没有读者,以至于我以为全天下人对 Linux 再无好奇之心了。后来我想在简书上建立一个 Linux 专栏与 TeX 专栏,于是就新注册了一个帐号,然后发现这个新注册的帐号必须与自己的手机号码进行绑定,否则无法发表文章。于是我就放弃了简书,来到了这里,而简书上的其他用户,包括那些经常在文章里追求自由憎恨枷锁的人气文艺青年并不觉得自己的简书帐号与手机号的绑定是个多大的事,他们依然爱着简书。

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

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

2005 年,我们在 Windows 里做 UG(现在叫 UGNX,很有名的机械产品三维设计软件)的二次开发,给它增加一个具有逆向工程功能的模块。当时,我们想在 UG 中实现一个交互操作,如下图所示,用鼠标绘制一些垂直于屏幕的平面去截取点云数据。这个操作需要一个最基本的功能,就是我们用鼠标点击一下屏幕,就生成一条垂直于屏幕的直线。当时,UG 没有提供相应的 API(现在有没有提供就不知道了),我当时是用了 WIN32 的 HOOK 机制捕捉鼠标在 UG 主窗口中的二维坐标,然后用 OpenGL 的 gluUnProject 函数将这个二维坐标转换为垂直与屏幕的直线与三维视景体前、后面的交点。这个功能的实现,对于当时从机械设计与制造专业毕业不久的我来说,是个莫大的挑战。即使现在来看,这也是个充满了奇技淫巧的诡异的二次开发工作。折腾了差不多有一个月,失败了很多次,最后终于成功了。当时我还是挺享受这个成功的,但同时也想到,如果我能看到 UG 的源码,也许就不需要我这样拐弯抹角的 hack 了,而且即使成功了,我依然担心 WIN32 的 HOOK + OpenGL 的 gluUnProject 函数之所以生效只是因为『碰巧它们能工作』。

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

明白自己所做的事

2005 年底,我们那个课题通过验收之后,我就开始摆弄 Linux,不想在 Windows 里做项目了,也不想再去做 CAD 的二次开发。因为各种桎梏让你不得不选择一些奇技淫巧,而这些奇技淫巧也一直被很多业内人士认为是『高级技术』。这就像因为我们生活在 GFW 的封锁中,翻墙技术也就成了某种奇技淫巧;因为我们活在一个非常看重考试的社会里,所以就有了应对考试的各种技巧。就连程序猿去找工作,现在也有了面试宝典什么的。

很少有人敢于质疑这个世界是不是错了,因为这样似乎没有意义。一个人怎能与整个世界去抗衡?既然无法让这个世界变得正确,那么就干脆和它一起错下去,这样就再也感受不到这个世界的错误了。于是,有的人是装糊涂,而更多的人是真的糊涂。在这种情况下,我不相信有多少人是否真的能够明白自己所干的事情。如果连自己所干的事情都谈不上明白,那么『对于一个软件来说,它的价值在于能为用户干什么』这样的问题也就不好回答了。

当我明白了所谓的 UG 二次开发,本质上就是利用 UG 提供给我的 API 来开发它不具备的功能,但是 2005 年的 UG 没有提供那个我必须要用到的 API,那么对我而言, UG 就是没有价值的,我应该换一个提供了这个 API 的三维 CAD 软件去搞二次开发。如果我像看一下 UG 的源代码,但是 UG 公司不给我看,那么对于我而言,UG 是没价值的,所以我应该选择一个可以让我看看它的源代码的 CAD 软件来搞二次开发。我需要一个可以有很多源代码供我查看、学习以及使用的环境,但是 MS 公司说那是不可能的,那么对我而言,Windows 就是没价值的。

也就是说,你得先明白自己要干的事情,然后才能去判断软件的价值。如果你做的事情根本不需要自由,不需要直截了当、不需要源代码,不需要开放……那么,Linux 对你而言可能的确是一点价值都没有的东西。

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

『一般的计算机用户』所能完成的事,这些用 Linux 的用户都能完成。非一般的计算机用户所能完成的事,Linux 即使完不成,但是既然这些用户已经是『非一般』的用户了,他们也许有能力创造一些东西让 Linux 能完成。

这些用 Linux 的用户似乎每天都在用一些看上去非常难用的东西,但是他们可以瞬间完成成百上千个文件的重新命名、格式转换、分类存放等任务,也能够举手之间将从成百上千个文本文件中对特定字符进行检索、删除以及替换。在局域网内,他们可以很轻易的从同事的机器上获取文件,或者调用他们的机器上所安装的软件。他们对自己的系统非常了解,熟悉系统的启动过程,可以最大化的控制那些程序会被系统自动加载。他们对个人信息的安全也颇为关注,熟悉数据签名与非对称加密工具的使用。他们可以根据自己的爱好选择自己喜欢的桌面,并且根据自己的需要进行定制。

很多人认为,用 Linux 太折腾,专业软件太少,浪费那么多时间学习它没有意义。然而,那些用着更『友好』、专业软件更多的 Windows 系统的人,他们可曾比 Linux 用户创造出来更多的价值?

Windows 系统的用户多如繁星,而 Linux 用户数量也许仅仅是其 1%。所以,很多人认为 Windows 为世界创造了很大的价值,认为 Linux 只是打着自由/开源的旗号让程序猿饿着肚子搞革命。

然而,事实上,这些『一般的计算机用户』每天都在用着 Linux 而不自知。你所访问的大部分网站都运行在 Linux 主机之上,你所用的智能手机往往运行着 Linux 内核,你所连接的 WIFI 路由也运行着 Linux 系统,你家里的机顶盒里面运行的也极有可能是 Linux……如果现在还有谁说他从未用过 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,用着科研经费所能买到的任何商业的闭源的专业软件,然后告诉自己的学生,要学会这些软件,要精通这些软件……于是,他们带领着自己的学生们与各种商业软件的菜单、快捷键与对话框而战斗着……

事实上,他们本来是可以在一些自由/开源软件上实现他们的想法,同时这些想法的实现也可以进一步促进自由/开源软件的发展的。然而我们这个国家最不担心饭碗的一群人只会输出大量的论文,而我们看不到他们的实现。我觉得他们浪费了太多纳税人的钱,浪费了学生交的学费,浪费了自己的智慧,甚至对不起自己的科学家身份。因为科学家,首先是应该黑客,保持着对自己不了解的领域的强烈兴趣。例如一个研究计算机辅助设计与制造方向的人,懂得一大堆概念,会使用 AutoCAD、UGNX、PRO/E、Catia 这样的软件,充其量可以在这些软件上做一些修修补补的二次开发,他们对于那些自由/开源的几何引擎与 CAD 程序中却近乎一无所知,很难想象他们能够在那些闭源软件上能够创造与发展新的计算机辅助设计与制造技术!

Linux 世界里有很多经典的软件以及程序设计语言是科学家的贡献,Linux 的源头 Unix 也是科学家发明的。这些科学家是真正的科学家,因为他们首先是黑客,他们在学术自由的高校氛围里对自己感兴趣的东西给予孜孜不倦的探索与实践,他们将自己所得的成果毫无保留的公布于世,并且培养出大批的好学生。我国的高校,很多高校有那么多经费,它们却连一个只需要很少的钱就可以建立起来的 Linux 资源镜象站点都不资助,大一学生所接受的《计算机文化基础》课程里面似乎依然没有 Linux 的任何内容,很多教授与他们的学生们却觉得用 Linux 非常的麻烦……一群精致的利己主义者培养出来了一群只会问这个东西对我来说有什么价值此类问题的学生……

正文到此结束
Loading...