要想弄清楚开源是什么,首先要明确“开源”的“源”指的是什么?“源”指的是“源代码”。
那么,什么是源代码?
当计算机在执行程序时,计算机使用机器语言理解并执行程序中的内容,但是很多机器语言是很难理解的,因此,人们就使用他们容易理解的编程语言来编写程序,当程序执行时,它被翻译成机器语言,源代码是指编程语言编写的程序,因为它是由编程语言编写的,所以我们来通过查看其内容来了解是什么类型的程序。
明确了源代码的概念,由此我们可以来回答开源及一系列开源相关概念的定义。
开源( Open Source):顾名思义是指“开放源代码”,代表着share和use,源代码或源设计因此可以被大众审查、修改和增强,最终达到分享和使用双向促进的目的。
开源软件:字面意思是公开源代码的软件,但开源软件的发布还需要遵循开源许可证,允许任何人使用、拷贝、修改以及重新发布。
开源项目(Open Source Project):开放式源代码项目,指的是开发者将自己的项目源码上传到互联网,并遵循社区规范维护,供公众使用。
开源社区:又称开放源代码社区,一般由拥有共同兴趣爱好的人所组成,根据相应的开源软件许可证协议公布软件源代码的网络平台,同时也为网络成员提供一个自由学习交流的空间。
开源协议:是指开源软件所遵循的许可协议,获得了开源软件的用户,需要在该协议的允许范围内对软件的源代码进行使用、修改和发行(包括以盈利为目的商业发行)。
进一步了解开源的历史,能帮助我们更好地理解什么是开源。
开源的历史
讲述开源的起源,需要从软件和计算机的起源谈起。
1949年5月6日,世界第一台完整的冯•诺依曼结构计算机在剑桥大学开始运行,因此这一天后被认为是现代计算机的诞生日。
1951年,IBM开始决定开发商用电脑,聘请冯•诺依曼担任公司的科学顾问,1952年12月研制出IBM第一台存储程序计算机IBM701,这是通常意义上的电脑。此事件成为IT发展史上的一个重要里程碑。
自计算机诞生至70年代中后期,计算机主要形式是大型机,软件并不作为单独产品提供,这一时期软件的传播依附于硬件的绑定附送。在这段时间Unix源码曾向公众开放,因此开源的起源与Unix的发展息息相关。
1969年AT&T贝尔实验室研究员Ken Thompson开始编写Unix, Unix是1970年定名的,因此1970年定为Unix元年(Unix名字的由来:Uniplexed Information and Computing System,即UNICS=Unix)。
1969-1977年Unix相继推出V1-V6版本,这段时间的Unix向社会开放源代码(早于1998年在加州Palo Alto会议上首先提出开源这个概念出现之前),此时的Unix叫“前Unix”。从Unix的发展历史看:
Unix可分为“前Unix”和“后Unix”两个不同的发展阶段。“前Unix”,1969-1976年,这时Unix或叫AT&T-Unix,向社会开放源代码,是开源的;“后Unix”,1977年至今,1977年AT&T公司将Unix私有化,这时的Unix(或AT&T-Unix)是闭源的,即其源代码是不开放的。
自1977年始(即自AT&T-Unix实行私有化开始),Unix开始分支,分为AT&T-Unix和BSD-Unix,前者是闭源的,后者是开源的;1990年美国法院将Unix的商标权判给AT&T公司,从此AT&T-Unix商业版成为Unix主流,而由加州大学伯克利分校推出的BSD-Unix版本变成Unix的非主流版本,即此时伯克利推出不包括任何AT&T-Unix源代码的BSD版本(自4.4BSD-Unix版本开始);此时Unix区分为Unix(即AT&T-Unix)和BSD(即BSD-Unix,从此时开始只叫BSD,不再叫BSD-Unix)两种,前者是私有、闭源、商业化的,后者是共享、开源的;目前流行的BSD操作系统主要有6个,其中386BSD、FreeBSD、NetBSD、OpenBSD是开源的,BSD/OS和macOS是商业产品。
自1997-1983年后各家Unix商业公司先后推出各种Unix变种,如SUNOS、IBM AIX、HP-UX、DEC Ultrix、Windows与SCO Xenix、Sun Solaris等,这些Unix变种均基于“前Unix”(开源)派生发展的,而Unix变种大多是闭源的商业版。
1987年出于教学目的,Andrew S. Tanenbaum编写了一个基于“前Unix”(开源)和4.3BSD(开源)的开放源代码操作系统Minix,Linux是基于Minix发展起来的(1991年Linus Torvalds开发并发布了开放源代码操作系统Linux0.01,Richard Stallman也称之为GNU Linux)。苹果公司的iOS源自BSD及“前Unix”(BSD也源自“前Unix”),但iOS是闭源的。
1971年,Intel 4004微处理器的出现,1974年第一台个人电脑Altair8800的上市,以及1976年乔布斯的第一代苹果电脑上市,计算机发展已经开始进入PC时代,这一时期内软件业态发生了大幅变化。早期的软件不仅随硬件免费发售,且向当时的政府科研机构和高校等专业用户提供源代码,以便用户根据自己的需求来进行修改,但随着用户和使用场景的快速增加,硬件附带的软件无法满足用户日益扩大的需求,一些专业开发通用软件的公司出现了,他们需要通过软件来收费,且不愿继续向用户提供软件源代码,微软公司就是其中的典型代表。
在1974年到1980年之间,在第一代软件公司的推动下,美国逐步通过一系列法律,确定了用著作权法保护软件的路径。
并且在1981年,美国最高院通过一个判例确定了软件也可以受专利法保护。
到1983年,几乎所有的软件公司都不再对外开放软件源代码。
然而,软件这种从免费且开源到收费且闭源的转变,令当时许多软件开发者感到愤怒和不满,其中最著名的就是Richard Stallman,他随即发起了自由软件运动,在全世界引起巨大反响。
Richard秉成所有软件都应该对所有人公开的共享哲学。对上述闭源事件感到不满的他认为解决问题的手段就是编写一个完全自由的且与Unix(当时最流行的闭源操作系统)兼容的操作系统,并将其命名为GNU(GNU’s not Unix的递归缩写)。于是Richard于1983年辞职并投入到GNU操作系统的开发当中,并于1985年在美国波士顿成立了自由软件基金会(Free Software Foundation,FSF),发表了《GNU宣言》。1989年,代表其哲学的GPL(General Pubulic License)许可证第一版发布。
该许可证是使用最广泛的自由软件许可证,其特征为:适用该许可证的代码的所有衍生代码都必须开源并且基于相同的许可证发布,具有鲜明的著佐权(copyleft)性质。此外,Richard还牵头开发了GCC编译器 、GNU Emacs文字编辑器等自由软件,吸引越来越多的Unix开发者转向自GNU软件,可以说,GNU、Linux、iOS、Open Source均源自“前Unix”。
显然,以GNU Linux为代表的自由软件的发展壮大对闭源软件公司带来了巨大冲击,1998年微软公司在法国发布了反对Linux的臭名昭著的公开信,这也是微软“FUD”战略的开端。与此同时,经过多年的发展自由软件已经逐渐暴露出难以满足大生产、大流通的需求特点。大生产是指开发、复制、修改、发行、服务、维护、升级等各环节的规模化。大流通是指缺乏商业模式的市场流通的自由软件无法形成商业规模。没有大生产和大流通就不能形成大发展,自由软件的发展瓶颈问题亟待解决。
1998年,开放源码(Open Source)应运而生,开放源码首先是在1998年2月3日在美国加州Palo Alto 召开的一次会议上提出来的,随即著名黑客Bruce Perens为其起草了“自由软件指导方针”。1998年4月7日 由18位自由软件运动领袖召开的“自由软件高层会议”通过了传播开源(Open Source)的必要性。事实上,开源软件是对自由软件的继承和发扬,没有自由软件就没有开源软件,两者都很重要,两者都很成功,都推动了软件产业的发展,因此许多国家包括中国常常用Free Libre Open Source Software (FLOSS) 来表示两位一体的概念。
如果将开源软件和自由软件对立起来可能其效果会适得其反的。如果从开源软件的世界中删除了自由软件,就没有Linux,没有了GCC,没有了Gnome,没有了Blender等等。自由软件和开源软件均支持自由传播,开源软件的自由传播是有条件的,即 遵循不同开源许可证的开源软件具有不同的自由度,而自由软件具有最大的自由度。开源软件和自由 软件也是有差别的,主要表现在相对于自由软件开源软件更适于大规模的生产和商业流通的大发展 的需要,商业模式更适用于开源软件。
那么,我们为什么要开源?
开源最终的目的其实是反哺商业。开源与商业相辅相成,通过更多人的参与促进技术的革新,减少软件的缺陷,丰富软件的功能,也让商业公司为用户提供更好的产品。除此之外,开源还有以下优势:
1.让社区发展更蓬勃
针对企业的开源解决方案通常会围绕着它们诞生蓬勃发展的社区,受到共同驱动力的约束,解决方案也得以得到支持和改进,企业和社区也都会从中受益。围绕改进这些解决方案结合在一起的全球性社区与专有解决方案的内部团队相比,它更快、更好地引入新的概念和功能,并且更高效率。
2.更加开放共享
开源软件有数不清的开发者和用户改进性能,创新功能来不断的加强开源软件的可用性,更多人的参与能够提供更强大的结果。有才华的人聚集在一起工作产生的社区集体力量不仅提供了更多的奇思妙想,而且当出现问题时,可以更快的进行故障排除和开发。
3.更高的安全性
著名的Linux之父Linus Torvalds提出了“Linus法则”:“曝光足够,所有的Bug都是显而易见的。(Given enough eyeballs, all bugs are shallow.)”
他的意思是说,只要有足够多的人使用和测试代码,任何缺陷都会被找出来,并被很快解决掉。
在开源世界中,bug更容易被发现,而一旦发现,立刻就会被解决掉。因此,开源软件的代码通常更加安全,因为它经由社区进行了更为彻底的审查和检查(并且出现的任何问题往往会更加努力地进行修补)。
4.更多的自由度
开放的代码让一些拥有特殊需求的公司通过修改代码就可以实现想要的功能,经过定制来满足自己的需求,对软件拥有更高的自由度,遇到问题时还可以向庞大的开发者和用户的社区去寻求帮助。
5.更强的灵活性
开源软件一般来说都不是资源密集型的,因此什么时候更新、怎样更新,往往可以自主决定。
6.更低的成本
开源解决方案不仅仅是自由软件,事实上在计算部署解决方案的总成本时,不需要考虑许可费用仍然具备决定性的优势。
7.推向市场更快
由于开源代码的解决方案是公开可用的,而且可以自由开发,因此调查需求和落实可用的解决方案要快得多。
8.评估更准确
对于开源来说,公开透明的源代码有利于对软件或者项目做出更准确的评估。
9.产品更贴近使用者需求
使用开源代码,围绕解决方案的决策背后的唯一动机是使产生最好的、最有用的产品成为可能。一般来说,开源软件更加接近用户实际所需要的,因为他们自己亲自在改进它。
10、更容易成为行业规范
许多实施开源解决方案的大型企业,常常会指定政策来这样做 —— 正在将他们资源的优势带给支持开源解决方案的社区。
除了这些优势,开源软件具有长期的可行性,比专有软件的寿命更长。而且,由于有支持力强的社区在不断引进创新,开源软件始终处于技术发展的前列,并在企业未来发展的同时满足企业的需求。
总结:高度自主、安全可控、开放自由,和这个世界产生更多的交互、分享,拥抱更多未知和可能性,这就是开源的魅力。
(文章部分内容来自网络,侵删。)
原文链接:https://www.zhihu.com/question/343707546/answer/2732571787