开源的概念(狭义定义和广义定义)
定义
狭义定义:即软件的源代码是可以看到的。
可以理解为只能看到软件的源代码,即除了可以看到源代码以外,基本上没有任何其它权利:不能向第三方透露源代码,也不能修改再发布源代码,更不可以销售源代码,而且必须花钱购买软件才可以看到源代码等等。
在此定义范围下,软件是否免费是不确定的。
广义定义:开源的广义定义包括下面几个要素:
开放源代码
开源协议
开放标准
开放文档格式
这四个要素加在一起,导致了开源的快速发展。
通过开源软件所附带的开源协议,软件的开发者赋予大众更多的权利,而且权利十分明确。比如可以无条件取得源代码,可以修改源代码,可以将源代码用于商业环境和商业目的等等。
不同的开源协议,赋予了使用者不同的权利。比如商业友好且自由度高的BSD协议,或者使用广泛的GPL协议等。通过开源协议明确权利以后,开源软件开始蓬勃发展。我们今天所使用的开源软件,主要得益于开源协议,它从法律角度明确了权利与责任的界线,让所有人都有章可循。
开放标准和开放文档格式,使开发者可以更高效的利用不同的开源产品,构成开源发展的生态。(后面会详细阐述)
驿窗注:
开源不仅限于软件,还延伸到硬件领域,例如RISC-V开源指令集架构。
所以,开放标准这个要素有时在硬件上的意义更明显一些。
是否免费的纠结
很多人会听到这样一个说法:开源不等于免费。其实,这个解释本身没有任何问题,因为它是对外来词开源(open source)的拷贝式翻译。但由于我们的思维与老外有一些差异,所以我们更关心是否免费的问题。
软件这东西,是纯粹的外来词,因为计算机是老外发明的,软件也是老外发明的,中国人很长一段时间都是在翻译和引进。而2000年以前,中国很多人心中只有正版软件和盗版软件的概念,没有开源软件的概念:正版软件要花钱买,盗版软件基本不需要花钱。这个时代的特点导致很多人会以是否免费为标准来定义开源软件。但事实是,那个时候在国外已经有开源软件和开源协议了,只不过在中国并没有流行起来,不像现在,在很多地方尤其是服务器领域,到处都是开源软件的身影。
实际上,我们可以更深入的思考开源在中国的环境中可能需要承担的意义,然后再做解读,甚至可以进一步为开源概念赋予更多的意义。
例如,免费的技术文档共享,这也是一种开源,或者叫开源共享,这在某种程度上甚至超过了广义上的开源概念。
如果想让中国本土的开源项目能够可持续发展,那么在对开源项目进行设计时,着重考虑一下免费的角度,可能也是一个途径。
国外有一个很流行的GNU项目,它推崇的是自由软件。自由软件与开源软件在很多地方是相同的。从层次上来说,自由软件的含义在某些方向的级别比开源软件更高,从而为用户提供的自由度也更宽。有兴趣的话,可以参考下面的内容:
驿窗注:
自由软件一定是开源软件,但开源软件不一定是自由软件。换句话说,开源软件的定义要更宽泛一些。