转载自:http://blog.csdn.net/hsujouchen/article/details/7072050
如今,计算机开源软件项目如潮水般涌来,各个领域都有着出色的表现。这就让我对开源的含义产生了兴趣。
于是花了一些时间在网络上搜索相关的信息。在此过程中,还发现了与之相似的——自由软件的定义。不过国内很多消息都是相互拷贝,鲜有包含读者个人理解体会的。经过自己的吸收和融汇之后,谈谈自己的想法。
其实两者最大的相同点是:源代码的公开,但是两者的差别却比较难理解。有一句话总结的比较好:“前者最大表现是在开发模式上的,后者的最大表现是在精神上的”。
开源项目要求当项目发布时,使用者可以同时获得项目的源代码或者是能够很方便的获得其完整的源代码。完整的含义就是使用者在获得源代码之后,能够再次编译出和发布的项目具有相同作用的项目。而在开源项目基础上进行修改后发表的新的项目,也必须同时发布包括修改之后的源代码,并且还要明确的标出与其基础源代码之区别。所有的要求是当你使用项目的那一刻就默认执行的,如果不想执行相关的要求,那么就无法使用开源项目。开源项目是有版权的,相关的版权属于发布的人员或者组织。如一个项目A是由甲以开源方式发布的,那么甲就拥有A的版权;乙获得A之后,修改之后发布A+,那么乙就拥有修改部分的版权,而原来部分的版权依然归甲所有。
可以看出,开源项目最大的特点就在于对源代码的处理,但是却不包含其它的内容。也就是你可以以收费的方式发布开源项目,这与其本意不违背。而某些项目只公布,这里只是公布,而不允许使用者修改或再次发布其代码,这就不是开源项目了。
而自由软件的层次更高了。它允许使用者以任何方式获取项目,修改项目,再发布项目或者再发布修改之后的项目,至于具体的方式,不作任何强制性限制。所以,使用者可以免费或者收费的方式获得项目;使用者可以以公布或者不公布源代码方式发布项目;简单地说就是让使用者有完全的自由。但是可以发现,这里的自由还是有某种逻辑上的强制性:如果你以收费方式发布,对你来说是自由的,那么对使用者来说就是不自由了,因为他没有以任何可能的方式获得了,或者对他说想以免费的方式是不自由的。那么他就可以在之后不服从自由软件的限制。同样的,在再发布源代码的行为上,同样有着类似的情况。与开源软件相比,某些自由软件的定义更加苛刻,甚至只要发布的软件包含自由软件之部分,那么剩余非自由软件部分也必须以自由软件规则发布。因此,自由软件更像是一种精神层次上的东西。
此外,开源软件只是在发布方式上做了某些定义或者限制,对软件项目的各种权利本身没有做任何的定义。也就是说如著作权,专利权等法律意义上的东西还是服从各个地区的法律定义。这样就存在这种情况:也许甲获得了乙的开源软件并使用,除非乙声明放弃对软件的专利所有,否则乙可以在任何时候通过法律的方式来使得甲放弃或者以一定代价之后继续使用软件。所以,开源软件并不是完全美好的东西。这样看来,这些东西还真有不少语义和概念上的陷阱。
当然,在使用者和发布者都是同一个人或者组织的情况下,所有的条件都成了可有可无的东西了。但是软件本身的发展却被限制了,这恰恰与开源软件和自由软件初衷相违背。
以上只是个人的当前体会,如有谬误,实属不幸。