程序员都应该懂一点开源协议

简介:

让雷军倍感压力的00后CEO,携手300名最小年龄仅为10岁出头的员工们,竟豪言:一些三四十岁的老前辈已经看不懂互联网。可就在被采访的短视频刚刚传递开来的时候,剧情突然三百六十度大反转。GitHub 开源项目 AndroidTvLauncher 的作者有理有据、义愤填膺地痛斥这位令人羡慕的00后CEO原封不动地抄袭他的作品。

互联网之事貌似永远有着猜不透的剧情。外行看热闹,内行看门道。这里,咱们不聊长江后浪推前浪的励志故事,也不聊孰是孰非的后续剧情发展,咱就聊点与我们有关系的事情,开源协议。

说到开源协议,必须先简单介绍一下 自由软件 这个词。根据百科的解释,自由软件是一种可以不受限制地自由使用、复制、研究、修改和分发的软件。注意,自由并不代表着免费。正是这种开放、开源的精神,计算机软件才得以如此飞快地发展。

而 开源协议 ,或者叫开源许可证,就是为保护自由软件原作者的相关知识产权,在作者与用户之间设立的一种虚拟合同,或者称之为授权方式。其中的条款内容,就是用来限制软件使用者的使用方式等。他人如有违反协议,作者有权利发起诉讼,维护自身权益。

开源届定义有几百种不同的开源协议,宽松程度不一,用以满足开源项目的各种使用场景。比如,是否允许商用,是否允许修改,修改后是否需要继续开源,开源是否必须继续使用相同协议授权等。

不过,作为普通用户,无论你是作为开源作者造轮子,还是作为普通用户借轮子,我们只需要知道比较流行的那几种,并能够加以区分即可。否则,上百种协议真要细分的话,绝非易事。

早期一名乌克兰程序员画有一张分析图,简单明了地描述出六种流行开源协议的使用区分。 阮一峰老师 翻译如下:

更简单点的话,也可以参考来自 GcsSloop 博文的这张图,更加通俗易懂:

更多的开源协议,我们还可以参考这张图(目前只发现英文版):

至于使用的话,不妨借助 GcsSloop 制作的开源协议网站:

http://choosealicense.online

如图所示:

选择所需要的协议,一键复制即可。

说完这些,回过头来想想,估计很多人都会有疑惑:开源协议与我何干?但是,作为一名程序员,开源协议还真与你我关系紧密。

如果你是 GitHub 重度依赖者,如果你稍作留意,不难发现,基本上出名的开源项目根目录中都有一个协议文件: LICENSE.txt ,而在 README.me 说明文件底部伴随着 License 内容。这就是你需要留意的地方,使用任意开源项目之前,记得阅读一下该项目的开源协议。

市场上部分 App 也会在应用中增加第三方开源项目时的使用版权说明,比如支付宝安卓版。这也是一种查看优秀 App 都使用哪些开源项目的途径之一。

如果你也是一个作者,准备开源自己的项目时,那就更得注意,想想自己需要选择哪一个开源协议更加合适。比如,大名鼎鼎的 Linux 系统采用便是 GPL 协议;作为安卓程序员,我们当然知道,我们赖以生存的 Android 开源系统,其内核采用的就是 Linux 内核。那么 Android 系统到底属于哪种开源协议呢,说来真的话长,感兴趣的话,推荐你阅读这两篇文章:

所以,以后不要再说开源协议与你我无关啦,还不信的话,你可以阅读我微信公众号这次的第二篇推文:别总说这事与你没关系。


作者:亦枫

来源:51CTO

相关文章
|
5月前
|
网络协议 Java Shell
必知的技术知识:GoogleJavaStyle中文版
必知的技术知识:GoogleJavaStyle中文版
|
供应链 安全 IDE
墨菲安全正式发布 murphysec 开源项目!让开发者更安全的使用开源代码
墨菲安全正式发布 murphysec 开源项目!让开发者更安全的使用开源代码
515 0
墨菲安全正式发布 murphysec 开源项目!让开发者更安全的使用开源代码
|
Unix Linux Apache
开发人员必须知道的5种开源协议
开发人员必须知道的5种开源协议
269 0
|
Web App开发 搜索推荐 Linux
20 年的 Debian 开发者被排挤出项目;操作系统 “火龙” 被质疑抄袭;Swift 5.6 发布 | 思否周刊
20 年的 Debian 开发者被排挤出项目;操作系统 “火龙” 被质疑抄袭;Swift 5.6 发布 | 思否周刊
211 0
|
Unix Linux 程序员
一文详解常见开源协议
日常从Github拷贝代码过程中,也要抽空了解一下,我们拷贝的代码在商用上是否存在风险。版权保护方面,虽然相关法规尚有待完善,但在研发商用软件过程中,作为软件开发者还是很有必要了解一下,我们平时使用的`开源组件/框架`都涉及到了哪些开源协议,以避免今后的法律风险。
1025 0
|
JSON 前端开发 JavaScript
和Ruby On Rail 创始人讨论软件开发
  如果您要总结软件开发的整个过程,您会说:"该项目迟到了,它被取消了"。   我们已经到了《困难的计算机》的结尾。 在讨论了各个软件组件的组成方式(从打印机驱动程序到密码哈希)后,我想总结一下构建软件产品的原理。   也许有些尴尬,但是即使经过了几年的行业发展,我仍然不明白为什么高科技公司如此着迷于速度。 这种迷恋被融入软件的语言中,其中工作周期称为冲刺,进度的度量称为速度。 但是,快速交付软件真的那么重要吗? 我不知道。 我不是自己开发软件,而是每天都对它进行故障排除,还是有时候,我希望工程师的工作速度稍慢一些。   我将有关构建软件方法论的问题带给了一个对该主题进行过激烈辩论的人。
93 0
|
测试技术 uml 开发者
|
Web App开发 监控 测试技术
C++开源代码项目汇总
Google的C++开源代码项目 v8  -  V8 JavaScript EngineV8 是 Google 的开源 JavaScript 引擎。V8 采用 C++ 编写,可在谷歌浏览器(来自 Google 的开源浏览器)中使用。
2587 0