“工作马马虎虎,只想在兴趣和游戏中寻觅快活,充其量只能获得一时的快感,绝不能尝到从心底涌出的惊喜和快乐,但来自工作 的喜悦并不像糖果那样一放进嘴就甜味十足,而是需要从苦劳与艰辛中渗出,因此当我们聚精会神,孜孜不倦,克服艰苦后的成就感,世上没有哪种喜悦可以对比”。
“更何况人类生活中工作占据了较大的比重,如果不能从劳动中,工作中获得充实感,那么即使从别的地方找到快乐,最终我们仍然会感到空虚和缺憾”。 ——稻盛和夫先生《活法》
开源产品不仅具有低风险、品质好、低成本及更透明的四大优势。用户具有使用自由、修改自由、重新发布自由以及创建衍生品的自由。
**低风险:**使用闭源软件无疑把命运交付给他人,一旦封闭的源代码没有人来维护,你将进退维谷;而且相较于商业软件公司,开源社区很少存在倒闭的问题。
**高品质:**相较于闭源软件产品,开源项目通常是由开源社区来研发及维护的,参与编写、维护、测试的用户量众多,一般的bug还没有等爆发就已经被修补。
**低成本:**开源工作者都是在幕后默默且无偿地付出劳动成果,为美好的世界贡献一份力量,因此使用开源社区推动的软件项目可以节省大量的人力、物力和财力。
**更透明:**没有哪个笨蛋会把木马、后门等放到开放的源代码中,这样无疑是把自己的罪行暴露在阳光之下。
GNU GPL(GNU General Public License,GNU通用公共许可证):只要软件中包含了遵循GPL协议的产品或代码,该软件就必须也遵循GPL许可协议且开源、免费,因此这个协议并不适合商用软件。遵循该协议的开源软件数量极其庞大,包括Linux系统在内的大多数的开源软件都是基于这个协议的。GPL开源许可协议最大的4个特点如下所示。
**使用自由:**允许用户根据需要自由使用这个软件。
**复制自由:**允许把软件复制到任何人的计算机中,并且不限制复制的数量。
**修改自由:**允许开发人员增加或删除软件的功能,但软件修改后必须依然基于GPL许可证。
**衍生自由:**允许用户深度定制化软件后,为软件注册自己的新商标,再发行衍生品的自由。
**收费自由:**允许在各种媒介上出售该软件,但必须提前让买家知道这个软件是可以免费获得的。因此,一般来讲,开源软件都是通过为用户提供有偿服务的形式来营利的。
BSD(Berkeley Software Distribution,伯克利软件发布版)许可协议:用户可以使用、修改和重新发布遵循该许可的软件,并且可以将软件作为商业软件发布和销售,前提是需要满足下面3个条件。
1:如果再发布的软件中包含源代码,则源代码必须继续遵循BSD许可协议。
2:如果再发布的软件中只有二进制程序,则需要在相关文档或版权文件中声明原始代码遵循了BSD协议。
3:不允许用原始软件的名字、作者名字或机构名称进行市场推广。
Apache许可证版本(Apache License Version)许可协议:在为开发人员提供版权及专利许可的同时,允许用户拥有修改代码及再发布的自由。该许可协议适用于商业软件,现在热门的Hadoop、Apache HTTP Server、MongoDB等项目都是基于该许可协议研发的,程序开发人员在开发遵循该协议的软件时,要严格遵守下面的4个条件。
1:该软件及其衍生品必须继续使用Apache许可协议。
2:如果修改了程序源代码,需要在文档中进行声明。
3:若软件是基于他人的源代码编写而成的,则需要保留原始代码的协议、商标、专利声明及其他原作者声明的内容信息。
4:如果再发布的软件中有声明文件,则需在此文件中标注Apache许可协议及其他许可协议。
MPL(Mozilla Public License,Mozilla公共许可) 许可协议 **:**相较于GPL许可协议,MPL更加注重对开发者的源代码需求和收益之间的平衡。
MIT(Massachusetts Institute of Technology **)许可协议:**目前限制最少的开源许可协议之一,只要程序的开发者在修改后的源代码中保留原作者的许可信息即可,因此普遍被商业软件所使用。
**Mozilla公共许可证(**Mozilla Public License,MPL):于1998年初由Netscape公司的Mozilla小组设计,原因是它们认为GPL和BSD许可证不能很好地解决开发人员对源代码的需求和收益之间的平衡关系,因此便将这两个协议进行融合,形成了MPL。2012年年初,Mozilla基金会发布了MPL 2.0版本(目前为止也是最新的版本),后续被用在Firefox、Thunderbird等诸多产品上。最新版的MPL公共许可证有以下特点。
在使用基于MPL许可证的源代码时,后续只需要继续开源这部分特定代码即可,新研发的软件不用完全被该许可证控制。
开发人员可以将基于MPL、GPL、BSD等多种许可证的代码一起混合使用。
开发人员在发布新软件时,必须附带一个专门用于说明该程序的文件,内容要有原始代码的修改时间和修改方式。
估计大家在看完上面琳琅满目的许可证后,会心生怨念:“这不都差不多吗?到底该选哪个呢?”写到这里时,刘遄老师也是一脸无助:“到底该怎么让大家进行选择呢?”搜肠刮肚之际突然眼前一亮,乌克兰程序员Paul Bagwell创作的一幅流程图正好对刚才讲过的这6款开源许可证进行了汇总归纳,具体如下图所示。
开源许可证的选择流程图
众所周知,绝大部分的开源软件在安装完毕之后即可使用,很难在软件界面中找到相关的收费信息。所以经常会有同学提问:“刘老师,开源社区的程序员总要吃饭的呀,他们是靠什么营利呢?”针对这个问题,网络上好像只有两种声音:
**情怀——**开源社区的程序员觉悟好,本领强,写代码纯粹是为了兴趣以及造福社会;
**服务——**先让用户把软件安装上,等用好、用习惯之后,再通过提供一些维护服务来营利。
这两种解释都各有道理,但是不够全面。读者也不要把开源软件和商业软件完全对立起来,因为好的项目也需要好的运营模式。就开源软件来讲,营利模式具体包括以下5种。
多条产品线:如MySQL数据库便有个人版和企业版两个版本,即个人版完全免费,起到了很好的推广作用;企业版则通过销售授权许可来营利。
技术服务型:JBoss应用服务器便是典型代表,JBoss软件可自由免费使用,软件提供方通过技术文档、培训课程以及定制开发服务来盈利。
软硬件结合:比如IBM公司在出售服务器时,一般会为用户捆绑销售AIX或Linux系统来确保硬件设施的营利。
技术出版物:比如O’Reilly既是一家开源公司,也是一家出版商,诸多优秀图书都是由O’Reilly出版的。
品牌和口碑:微软公司曾多次表示支持开源社区。大家对此可能会感到意外,但这是真的!Visual Studio Code、PowerShell、TypeScript等软件均已开源。大家是不是瞬间就对微软公司好感倍增了呢?买一份正版系统表示支持也就是人之常情了。
对普通用户来讲,开源共享精神仅具备锦上添花的效果,我们更加看重的是,Linux系统是一款优秀的软件产品,具备类似UNIX系统的程序界面,并继承了其良好的稳定性。而且,开源社区也在源源不断地提供高品质代码以及丰富的第三方软件支持,能够在高可用性、高性能等方面较好地满足工作需求。
当然,大多数读者应该都是从微软的Windows系统开始了解计算机和网络的,因此肯定会有这样的想法“Windows系统很好用啊,而且也满足日常工作需求呀”。客观来讲,Windows系统确实很优秀,但是在安全性、高可用性、高性能方面却难以让人满意。您应该见过下面这张图片。虽然蓝屏不是经常可以看到的,但若这样的“事故”发生在生产环境中则是绝对不敢想象的。
大家可以讨论一下,为什么要在需要长期稳定运行的网站服务器上、在处理大数据的集群系统中,以及需要协同工作的服务器环境中采用Linux系统呢?
还有一个更极端的应用场景—全球超级计算机竞赛。每年全球会评选出计算峰值速度最快的500台超级计算机,其中包括美国的Summit、Sierra和中国神威·太湖之光、天河二号等超级计算机。截至本书写作时,这些超级计算机无一例外采用的都是Linux操作系统。
为了能更清晰地比较Linux和Windows具体的差别,我们进行了简单归纳,如下图所示。这些差别是由刘遄老师凭借工作经验总结出来的,或许您现在不完全认同,但没关系,您可以在学习中慢慢感受。
坦白来讲,每位投身于Linux行业的技术人或者程序员只要听到开源项目就会由衷地感到自豪,这是一种从骨子里带有的独特情怀。开源企业不单纯是为了利益,而是互相扶持,努力服务好更多的客户。开源社区更是与全球用户唇齿相依,任何人都可以贡献自己的代码与灵感,任何人也都可以从开源社区中受益。如此良性循环下来,开源软件便具备了4大关键性优势。
低风险:使用闭源软件无疑把命运交付给他人,一旦封闭的源代码没有人来维护,您将进退维谷。而且相较于商业软件公司,开源社区很少存在倒闭的问题。并且,源代码一旦公布于世,任何人或组织都可以接手进行新的维护工作。
高品质:相较于闭源软件产品,开源项目通常是由开源社区来研发及维护的,参与编写、维护、测试的用户数量众多,一般的bug还没有等暴发就已经被修补。另外,在灵感不断碰撞、代码不断迭代的交流氛围中,程序员也不可能将“半成品”上传到开源社区中。
低成本:开源工作者大多都是在幕后默默且无偿地付出劳动成果,为美好的世界贡献一份力量,因此使用开源社区推动的软件项目可以节省大量的人力、物力和财力。
**更透明:**没有哪个笨蛋会把木马或后门代码放到开源项目中,这样无疑是把自己的罪行暴露在阳光之下,很容易被他人发现。
读到这里,相信大家已经基本熟悉了刘遄老师的写作特点(但不是讲课特点)—能用一句话讲清的事情,绝不会造出一段话。这样的好处非常明显:首先是找出重点逐个讲解,这样使得段落不再冗长;其次是配上了大量相关的图片,看起来非常有乐趣,并且能够让您一眼就找到最重要的知识和干货。接下来,我将用几段话来总结Linux系统的发展历程,不会赘述太多,请大家留心每个时间点即可。
我们从1965年开始讲起。当时,为了解决服务器的终端连接数量的限制和处理复杂计算的问题,贝尔(Bell)实验室、通用电气(GE)公司以及麻省理工学院(MIT)决定联手打造一款全新的操作系统—MULTICS(多任务信息与计算系统)。但由于开发过程不顺利,遇到了诸多阻碍,后期连资金也出现了短缺现象,最终在1969年,随着贝尔实验室的退出,MULTICS也终止了研发工作。而同年,MULTICS的开发人员Ken Thompson使用汇编语言编写出了一款新的系统内核,当时被同事戏称为UNICS(联合信息与计算系统),在贝尔实验室内广受欢迎。
1973年时,C语言之父Dennis M. Ritchie了解到UNICS系统并对其非常看好,但汇编语言有致命的缺点—需要针对每一台不同架构的服务器重新编写汇编语言代码,才能使其使用UNICS系统内核。这样不仅麻烦而且使用门槛极高。于是Dennis M. Ritchie便决定使用C语言重新编写一遍UNICS系统,让其具备更好的跨平台性,更适合被广泛普及。开源且免费的UNIX系统由此诞生。
但是在1979年,贝尔实验室的上级公司AT&T看到了UNIX系统的商业价值和潜力,不顾贝尔实验室的反对声音,依然坚决做出了对其商业化的决定,并在随后收回了版权,逐步限制UNIX系统源代码的自由传播,渴望将其转化成专利产品而大赚一笔。崇尚自由分享的黑客面对冷酷无情的资本力量心灰意冷,开源社区的技术分享热潮一度跌入谷底。此时,人们也不能再自由地享受科技成果了,一切都以商业为重。
面对如此封闭的软件创作环境,著名的黑客Richard Stallman在1983年发起了GNU源代码开放计划,并在1989年起草了著名的GPL许可证。他渴望建立起一个更加自由和开放的操作系统和社区。之所以称之为GNU,其实是有“GNU’s Not Unix!”的含义,这暗戳戳地鄙视了一下被商业化的UNIX系统。但是,想法和计划只停留在口头上是不够的,还需要落地才行,因此Richard便以当时现有的软件功能为蓝本,重新开发出了多款开源免费的好用工具。在1987年,GNU计划终于有了重大突破,Richard和社区共同编写出了一款能够运行C语言代码的编译器—gcc(GNU C Compiler)。这使得人们可以免费地使用gcc编译器将自己编写的C语言代码编译成可执行文件,供更多的用户使用,这进一步发展壮大了开源社区。随后的一段时间里,Emacs编辑器和bash解释器等重磅产品陆续亮相,一批批的技术爱好者也纷纷加入GNU源代码开放计划中来。
在1984年时,UNIX系统版权依然被AT&T公司死死地攥在手里,AT&T公司明确规定不允许将代码提供给学生使用。荷兰的一位大学教授Andrew(历史中被遗忘的大神)为了能给学生上课,竟然仿照UNIX系统编写出了一款名为Minix的操作系统。但当时他只是用于课堂教学,根本没有大规模商业化的打算,所以实际使用Minix操作系统的人数其实并不算多。
芬兰赫尔辛基大学的在校生Linus Torvalds便是其中一员,他在1991年10月使用bash解释器和gcc编译器等开源工具编写出了一个名为Linux的全新的系统内核,并且在技术论坛中低调地上传了该内核的0.02版本。该系统内核因其较高的代码质量且基于GNU GPL许可证的开放源代码特性,迅速得到了GNU源代码开放计划和一大批黑客程序员的支持,随后Linux正式进入如火如荼的发展阶段。Linus Torvalds最早发布的帖子内容的截图如下。
Hello everybody out there using minix - I'm doing a (free) operating system (just a hobby, won't be big and professional like gnu) for 386(486) AT clones. This has been brewing since april, and is starting to get ready. I'd like any feedback on things people like/dislike in minix, as my OS resembles it somewhat (same physical layout of the file-system (due to practical reasons) among other things). I've currently ported bash(1.08) and gcc(1.40), and things seem to work. This implies that I'll get something practical within a few months, and I'd like to know what features most people would want. Any suggestions are welcome, but I won't promise I'll implement them :-) Linus torvalds
Linux系统的吉祥物名为Tux,是一只呆萌的小企鹅。相传Linus Torvalds在童年时期去澳大利亚的动物园游玩时,不幸被一只企鹅咬伤,所以为了“报复”就选择了这个物种作为吉祥物。这个故事是否可信无从考证,但万幸是只企鹅,而不是老虎或者狮子,否则就不是换个Logo这么简单的事了。
1994年,红帽(Red Hat)公司创始人Bob Young在Linux系统内核的基础之上,集成了众多的常用源代码和程序软件,随后发布了红帽操作系统并开始出售技术服务,这进一步推动了Linux系统的普及。1998年以后,随着GNU源代码开放计划和Linux系统的继续火热,以IBM和Intel为首的多家IT巨头企业开始大力推动开放源代码软件的发展,很多人认为这是一个重要转折点。2012年,红帽公司成为全球第一家年收入10亿美元的开源公司,后来是20亿、30亿……不断刷新纪录。
时至今日,Linux内核已经发展到5.6版本,衍生系统也有数百个版本之多,它们使用的都是Linus Torvalds开发维护的Linux系统内核。红帽也成为开源行业及Linux系统的领头羊。
参考:《Linux就该怎么学》