首先,必须澄清的一点是,有着二十年历史的只不过是“开源软件(open source software)”这个说法或者说定义,而不是开放源代码这种做法本身——这就好像在“全面屏”这个词被发明之前,业界其实就已经出现了采用窄边框、大屏占比的手机一样。开源软件从计算机诞生的最初期就已经存在了,只是当时的人们对这种做法并没有明确的意识与约束。
而真正促成整个业界去思考,总结“开源软件”定义的事件,则是一篇发布于1997年的论文《《大教堂与市集》(The Cathedral and the Bazaar)》。在这篇论文中,作者埃里克·斯蒂芬·雷蒙(Eric Steven Raymond)提出了两种“开放源代码”的软件开发方法论:一种称之为“大教堂模式”,即软件在发布之后才公开源代码,并且由一个团队管控每个版本的开发;而另一种则称之为“市集模式”,即软件在开发过程中即公开源代码,允许其他人检查以及进行修改。

在论文中,作者盛赞了“市集模式”的软件开发思路,这引发了当时主流开发团体对于“何谓真正的开源”的讨论。1998年2月3日,Christine Peterson发表文章,首次提出“开源软件”的概念,这一概念在两天后的一次软件开发者大讨论中得到多数人承认和支持,并由此促成了“开放源代码促进会”的成立。
对于何谓“开源”,目前公认的定义来源于其早期支持者Bruce Perens(Debian的创始人之一),他将开源总结为以下几个特征:
自由再散布:允许获得源代码的人可自由再将此源代码散布。
源代码:程序的可执行档在散布时,必需以随附完整源代码或是可让人方便的事后获取源代码。
派生著作:让人可依此源代码修改后,在依照同一许可协议的情形下再散布。
原创作者程序源代码的完整性:意即修改后的版本,需以不同的版本号码以与原始的代码做分别,保障原始的代码完整性。
不得对任何人或团体有差别待遇:开放源代码软件不得因性别、团体、国家、族群等设置限制,但若是因为法律规定的情形则为例外
对程序在任何领域内的利用不得有差别待遇:意即不得限制商业使用。
散布许可协议:若软件再散布,必需以同一条款散布之。
许可协议不得专属于特定产品:若多个程序组合成一套软件,则当某一开放源代码的程序单独散布时,也必需要匹配开放源代码的条件。
许可协议不得限制其他软件:当某一开放源代码软件与其他非开放源代码软件一起散布时(例如放在同一光盘),不得限制其他软件的授权条件也要遵照开放源代码的授权。
许可协议必须技术中立:意即许可协议不得限制为电子格式才有效,若是纸本的许可协议也应视为有效。
看过定义之后,是不是有点晕?而且如果大家更细心一点的话,或许已经发现,真正的“开源软件”定义和我们一般以为的常识,其实是存在着相当大的差异的。比如说开源软件并不限制商业使用,开源软件在经过他人修改代码后,必须修改软件版本号以示和原版本的区别等等。
