网上有很多开源协议的介绍,但是很少有说明如何在你自己开发的软件中使用开源协议,保护自己的代码;以及当你使用别人开源项目时,如何遵守开源协议里面约定的行为。文本从github上找了些项目举例描述下这2个问题。至于各个协议的具体说明网上一搜一大堆,本文不再描述。
如何定义自己软件的开源协议
假如你要开源自己写的一个软件,那你需要进行2步来实施开源协议:
第1步: 在项目的根目录放置一个LICENSE
或者COPYING
文件,这个文件里面是你所使用的开源协议的具体细则,比如你用的是MIT License
协议,你只需要到网上拷贝一个MIT License
协议正文进来就可以了,比如vsa这个项目,使用的是Apache License 2.0
开源协议,协议的正文在这里。
第2步: .在你项目的每个源文件中加入版权声明,比如vsa项目中的这个文件加入了如下的版权声明。
#!/usr/bin/env python # vim: tabstop=4 shiftwidth=4 softtabstop=4 # # Copyright 2013 Mellanox Technologies, Ltd # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or # implied. # See the License for the specific language governing permissions and # limitations under the License. from twisted.web import xmlrpc, server from vsa.client.gui.vsaxmlrpc import VsaXmlRpc ...
上面的2步中,第一步是必须的,实施起来比较简单,拷贝一个对应的协议正文即可。第二步不是特别必须,而且没有严格约定如何描述,甚至有些项目里面没有在源码中写版权信息,当然规范的操作应该是每个源文件中都加。
因为第二步比较灵活,导致很多coder有点搞不清该怎么写,下面我举几个例子描述下。
GPL协议 open-iscsi(c语言) 他是将协议全文贴上
GPL协议 pciutils(c语言) 他仅描述了下使用的协议
MIT协议 python-markdown2(python语言) 他是给出了license的链接地址
MIT协议 utils(php语言) 他是给出了license的链接地址
MIT协议 uuid(php语言) 比较详细的版权描述
MIT协议 docker-volume-ipfs(go语言) 代码中没有描述版权信息
所以第二步在源码中描述版权,其实是比较随意的,只要能描述清楚作者信息以及使用的开源协议类型即可。
补充说明:
有一些开源协议描述了如何在代码中使用该协议,所以当使用这样的协议时,应按照协议规定的方式在代码中描述版权信息。比如上面的vsa项目中使用了Apache License 2.0
这个协议,这个协议的正文的最后部分描述了如何在源码中使用协议声明,参见APPENDIX: How to apply the Apache License to your work
的描述.
使用别人开源的代码
描述完了如何通过开源协议保护自己的代码,下面描述下如何尊重别人的开源项目。
大部分开源协议都描述了在引用开源代码时,应保留源作者的版权信息,这也就是说如果你引用了开源代码,应保留代码中原来的版权描述,就是上述第二步中,开源作者加到源码里面的版权说明。比如vsa项目中这个(iscsi_discovery)文件,是别人开源的代码,vsa将这个代码放入自己项目中时,保留了iscsi_discovery源作者Voltaire Ltd. Author: Dan Bar Dov <danb@voltaire.com>
的版权信息,这就是对开源协议的遵守。
链接别人开源项目编译后的二进制文件
在你自己的项目中,可能是以动态链接库的形式引用开源项目,此时一般的做法是在你的软件的某个地方描述下你引用的这个开源项目即可,一般是在自己软件的帮助或者关于里面介绍下所引用的开源项目,以表尊重。比如点开chrome浏览器里面的"关于",在最下面chrome有一句话Google Chrome is made possible by the Chromium open source project and other open source software.
,点击open source software这个链接就可以看到其所引用的开源项目。
总结
此文仅是抛砖引玉,大部分开源协议按照上面的步骤实施即可,有部分开源协议还有一些细节,具体的细节要看各个协议的描述,这个页面汇总了目前比较常见的开源协议。
原文引用: http://maming.org/post/1502696239