一提到开源,人们首先想到的是,把代码公开出去,例如放到 http://Github.com 上。但是开源真的只是这么简单吗?下面咱们详细来聊聊开源这个概念的内含和外延,通过通俗的语言让大家很快把握要点,关于开源的最权威解释可以参考 https://opensource.org ,这个网站是开源思想诞生的地方。
开源的定义
先来给开源一个定义,一个软件是开源的,最基本的含义是代码是公开的,任何人都可以去查看,修改以及使用。
首先,开源代码和闭源代码非常不同。闭源代码就是普通的商业版权软件,代码是封闭的,只有作者才能看到,出了问题也只有他能修改。而开源代码,任何人都可以查看和修改。关于开源思想的诞生,有一个很有意思的故事。Richard Stallman 是有史以来最伟大的几名黑客之一,也是世界上写代码最多的人之一,他曾经买过一个商业软件,结果有一点小问题,于是他去找软件公司,问他们能不能帮忙修复一下,软件公司说不行,Richard 于是说,那能不能把代码给我,我来修复一下,公司也说不行。于是 Richard Stallman 很生气,创立了自由软件基金会,发布了大名鼎鼎的 GPL 协议,GPL 至今为止依然是最著名的开源协议。
第二点需要特别注意的是,开源不等于免费。软件代码虽然可以免费给别人,但是软件相关的服务,例如编译维护升级等,一样可以赚钱,例如 Redhat 就是家开源软件公司,不仅仅赚钱,而且很赚钱。同时,很多公司有把越来越多的开发者投入到公司的开源项目中,这些软件可以有力的支撑起公司的生态,所以如果你是一个开源软件开发者,也不用担心找不到工作。
总之,开源意味着代码可以让任何人直接获取到。
开源协议
开源代码既然源码都是开放的,所以直接拿来免费使用基本都是没有问题的,但是这并不意味着使用开源软件是完全没限制的。每个开源软件都对应自己的开源协议,具体的使用限制在开源协议里面都详细的规定。开源协议有很多,这里有一个列表:https://opensource.org/licenses 。
很多开源协议属于 Copyleft 类型的协议,最著名的例子就是 GPL 。Copyleft 是跟 Copyright 相对的。Copyleft 类型的协议规定,如果基于软件做过修改,那么修改后的版本也必须要开源,并且依旧要基于 Copyleft 的协议来发布,也就是说 Copyleft 是带有传染性的协议。Copyleft 对商业不太友好,但是充分的保证了开源项目的迅速生长。Linux 内核项目就是基于 GPL 发布的。
还有一类协议属于 DOWHATTHEFUCKYOUWANTTO 协议,也就是完全无限制协议。 还真有一个协议就要这个名字 https://choosealicense.com/licenses/wtfpl/ ,但是这一类协议中最著名的是 MIT 协议。MIT 的详细条款可以看这里,https://opensource.org/licenses/MIT ,内容概括起来就是,协议保护你任意使用这个软件的权力,你可以修改后闭源,也可以售卖这个软件,怎么都可以,但是要是因为使用软件出现任何损失,作者概不负责。
其他的开源协议还有很多,条款也是千差万别。
为何要选择开源软件
人们越来越喜欢开源软件了,大致上是出于以下几个原因。
第一,开源给使用者更多的控制权。由于代码是开放的,大家可以查看每一行代码来确保软件没有做任何我们不想要让它做的事情。甚至,我们还可以按照自己的要求修改一下代码。同时,从协议上来讲,开源协议也不像商业软件协议那么多限制,基本上我们可以任意的使用我们的软件。
第二,开源让学习变得容易。有了源码,我们就可以很快了解软件的工作原理了。新手可以通过读源码,快速成长为代码高手。学校里面可以用某个开源软件,例如 Linux ,来教学,而学习者多了,企业招聘的时候也就更容易招聘到擅长这个软件的人才了。企业使用开源软件也有好处,因为一个企业遇到的问题可以分享出来,这样其他企业就不必重复犯错了。
第三,开源才有真正的安全。代码开放意味着所有人都可以去查看代码,这样如果代码中有任何问题就很容易被人发现并修复了。闭源软件不同了,有没有问题,没有人知道,有没有后门,没有人知道,如果使用过程出了问题,必须要等原作者去修改。同时,如果一个商业软件对我非常的重要,然后开发这个软件的公司却突然倒闭了,后果就不堪设想了。而如果是开源软件,即使官方不维护这个项目了,我也可以自己去修改代码升级软件,继续使用。
总之,开源的好处很多,以至于现在开源软件在软件行业的变得越来越主流了。
总结
关于什么是开源,我们就聊到这里。总结一下:开源就是源码开放,但是不意味着使用没有限制,具体规定要根据软件的开源协议来决定。开源协议着重保护的是大众对源码的阅读的权力,其中有些对大公司很不友好,例如 GPL ,因为协议要求对软件如果做了修改,那么修改后的代码也必须开源。而有些开源协议就没有太多限制,例如 MIT 。开源软件让用户拥有更多控制权,更便利的学习机会,更高的安全性,所以目前已经变得越来越主流。