diff --git "a/\347\254\2541\351\203\250\345\210\206\342\200\224\342\200\224\345\210\235\350\257\206\345\274\200\346\272\220/\347\254\254 5 \345\260\217\350\212\202\357\274\232\346\234\211\345\205\263\345\274\200\346\272\220\347\232\204\345\270\270\350\247\201\350\257\257\345\214\272.md" "b/\347\254\2541\351\203\250\345\210\206\342\200\224\342\200\224\345\210\235\350\257\206\345\274\200\346\272\220/\347\254\254 5 \345\260\217\350\212\202\357\274\232\346\234\211\345\205\263\345\274\200\346\272\220\347\232\204\345\270\270\350\247\201\350\257\257\345\214\272.md" index fbbac934344d1731cc443abef3ea7c6e4634942c..43a51ef936b0cae3916d0117741c720662280d1f 100644 --- "a/\347\254\2541\351\203\250\345\210\206\342\200\224\342\200\224\345\210\235\350\257\206\345\274\200\346\272\220/\347\254\254 5 \345\260\217\350\212\202\357\274\232\346\234\211\345\205\263\345\274\200\346\272\220\347\232\204\345\270\270\350\247\201\350\257\257\345\214\272.md" +++ "b/\347\254\2541\351\203\250\345\210\206\342\200\224\342\200\224\345\210\235\350\257\206\345\274\200\346\272\220/\347\254\254 5 \345\260\217\350\212\202\357\274\232\346\234\211\345\205\263\345\274\200\346\272\220\347\232\204\345\270\270\350\247\201\350\257\257\345\214\272.md" @@ -21,11 +21,19 @@ 所以开源**并不意味着**完全免费和随意使用源代码! +### OSI 组织与 OSI网络体系结构 + +OSI 组织一般指的是开放源代码促进会(Open Source Initiative),于1998年2月创建,是一个旨在推动开源软件发展的非盈利组织。 + +OSI网络体系结构(Open Systems Interconnection)是由国际标准化组织(ISO)提出和定义的计算机网络的分层、各层协议和层间接口的集合。这个模型把网络通信的工作分为7层,分别是物理层、数据链路层、网络层、传输层、会话层,表示层和应用层。也就是我们平时常说的 OSI 7 层网络模型。 + +在各个行业领域,缩写重复是很常见的事情,如果不加以区分,很容易造成理解上的误会。因此,请注意:OSI 组织与 OSI 网络体系结构,两者的关系就像是 Java 和 JavaScript 、蔺相如与司马相如一样,并没有太大关系。 + ### 开源是好的,闭源是不好的 开源与闭源各有优劣,一般是根据个人需求来选择采用哪种方式。 -开源项目因为开放源代码,参与人数较多,在快速促进项目成长,为良好的行业发展起到了重要的作用。与此同时,也正是因为参与人较多,这就导致开源社区的维护需要投入更多的精力,如果维护者精力不足,很容易导致项目停止维护,这也是开源项目不稳定的原因。 +开源项目因为开放源代码,参与人数较多,在快速促进项目成长,对行业的良性发展起到了重要的作用。与此同时,也正是因为参与人较多,这就导致开源社区的维护需要投入更多的精力,如果维护者精力不足,很容易导致项目停止维护,这也是开源项目不稳定的原因。 而闭源项目参与人数较少,在项目迭代和项目质量的管理较为明确,如果是商用软件,还会为客户提供长期的运维服务,更加标准和稳定。也正是因为参与人数较少,闭源软件的迭代周期会比较慢,在项目成长曲线上略显不足,这也是闭源软件有时会被开源软件弯道超车的原因。 @@ -50,20 +58,23 @@ > 参考:[如何选择开源许可证?](http://www.ruanyifeng.com/blog/2011/05/how_to_choose_free_software_licenses.html) -### “半开源”和“伪开源”也是开源 +### “半开源”和“伪开源”不是开源 -这个问题其实是有争议的,一部分人认为不属于开源,而另一部分人认为属于开源。在这里,我们认为开源可以分为两种开源:广义的开源、狭义的开源。 +这个问题其实是有争议的,一部分人认为不属于开源,而另一部分人认为属于开源。在这里,我们认为开源可以分为两种开源:广义的开源、狭义的开源。下面,我们从项目规范性和完整性两个方面来探讨这两者区别。 -从规范性看,只要开放源代码就可以认为是广义的开源,而狭义的开源在广义的开源基础上,增加了一定限制——需要符合国际社区公认的规范和定义。 +从项目规范性来看,只要开放源代码就可以认为是广义的开源,而狭义的开源在广义的开源基础上,增加了一定限制——需要符合国际社区公认的规范和定义。 - 广义的开源,使用非国际社区公认的开源许可证,或者没有采用任何开源许可证,**只要开放源代码**就属于开源项目。 - 狭义的开源,除了开放源代码以外,还需要**符合一些国际社区公认的定义**(比如:采用 OSI 批准的开源许可证),满足开源的一些条件才是真正意义的开源。我们平时说开源社区,一般指的是狭义的开源。 -“半开源”和“伪开源”都违反了狭义上开源的其中某些条款,因此,不算标准的开源形式。但从广义上来讲,贡献出源码也属于开源项目,但并非符合开源规范的开源项目。 +从项目完整性来看,狭义的开源一般对项目完整性有严格的要求。而广义的开源,对项目的完整性要求较为宽松。 + +- 狭义的开源,**对项目完整性有严格的要求**,比如:公开代码完整、可以编译和再发行、符合国际开源规范、拥有开源许可证、维护和治理开源社区,以及接受贡献(允许外部贡献)等。 +- 广义的开源,不严格要求狭义的开源中提及的一系列约束,**完整性要求较为宽松**,可以忽略上述提到的各类要求,按照自己的想法来维护项目。 -广义和狭义的区分是看它们项目的整体程度,如符合国际开源规范,拥有开源许可证、有一个组织社区和治理,公开代码完整,可以编译和在发行,以及接受贡献(允许外部贡献)。 +此外,需要明确的一点是:**OSI 批准的许可证并不是划分是不是开源项目的唯一标准**。 OSI 只是国际开源许可证的一个组织机构,由于被其认可的开源许可证较为清晰严谨,所以一般国际认可的许可证都需要经过 OSI 批准。但并不是说只有 OSI 才能制定和批准开源许可证,一个本地的开源项目也可以使用或者定义自己的开源许可证。比如:我国第一个被 OSI 批准的**木兰许可证**,在被批准前也只是木兰本地的开源协议。**虽然木兰许可证在此之前并没有被 OSI 批准,但是基于其规范性和完整性而言,都具备狭义上开源的标准。因此,采用木兰许可证的项目不管是在被批准前还是批准后,都属于狭义上的开源。** -此外,要确定一点的是:**OSI 批准的许可证并不是划分是不是开源项目的标准**。 OSI只是国际开源许可证的一个组织机构,一般国际认可的许可证都要经过OSI批准是没错,但不代表一个本地的开源项目不能使用或者附加自己定义的开源许可证。比如:我国第一个被 OSI 批准的**木兰许可证**被批准前,也只是木兰本地的开源协议,采用木兰协议的项目在木兰许可证批准前,也算是广义上的开源项目。 +最后总结一下,“半开源”和“伪开源”都违反了狭义上开源的其中某些条款,因此,不算标准的开源形式。但因为贡献出源码,所以也可以认为属于广义的开源。广义的开源和狭义的开源只是概念上的区分,而广义的开源项目如果符合狭义的开源标准,也可以转变为狭义的开源。在秉承“吃水不忘挖井人”的优良传统下,哪怕“井”挖的不够好不够深,也要吃水怀恩,因此,“半开源”和“伪开源”可以被认为广义的开源。 ### 开源项目只需要开放源代码就可以了