文档章节

别以为把你的代码上传到开源中国就算是开源了!先选择一个合适的 License 吧

justjavac
 justjavac
发布于 2016/12/27 21:54
字数 1911
阅读 7924
收藏 240

【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>>

很早之前我就已经开始使用开源中国的 git 代码托管服务,那时“码云”还不叫“码云”。最近遇到 github 总是时不时抽风,相比之下码云的服务也是越来越给力,这几天打算把 github 的开源项目迁移到码云

不管是 github 还是开源中国的码云,在创建项目(仓库)的时候,都会有一个选项那就是让我们选择一个开源许可证,如下图:

什么是开源许可证呢?码云的帮助文档写的很清楚,可以查看 License 相关章节。

细心的开发者应该很容易发现,码云相比 github 多了一个许可协议——WTFPL。如果你想把自己的代码毫无保留的奉献给公共领域,可以选择这个许可证。那么 WTFPL 到底是什么呢?

维基百科词条的解释如下:

WTFPLDo What The Fuck You Want To Public License,中文译名:你他妈的想干嘛就干嘛公共许可证)是一种不太常用的、极度放任的自由软件许可证。它的条款基本等同于贡献到公有领域。它允许根据任何条款修改和再发布软件——许可证鼓励他们“想干嘛就干嘛”。

提到开源许可证,这几天同事 LeoAshin 折腾了一个自己的博客,问我选择什么协议。让我想起了之前发生的 2 件事。

第一件事发生在知乎,当时有人邀请我回答一个问题:开源 App 被人抄袭到 iOS App Store 怎么办?

事情的经过大概是,一名 ID 为 coderyi 的程序员开发了一款开源播放器 ElevenPlayer,并于去年 9 月 21 日在 App Store 上架,没想到被 7 个人“抄袭”,功能与视觉上几乎一样,一个总榜 70 名,还一个是付费分类榜 21 名。

对于此种情况,大多数同学都是声援的态度。由于之前我也在各大网络平台声讨过种种抄袭盗版事件,这次自然也要去支援一下。但是当我去看了作者在 github 开源的代码后,又有些犯难了。

于是我在知乎写道:

说点作者不爱听的。

代码最初使用了 MIT License,这应该是对使用者限制最少的协议了吧。使用者可以闭源分发,可以将代码商用。前提是只需要附带一份原协议。

但是别人如果推广的好,或者修改的好,原作者有可能不会从中收益。

我看了作者的代码库,也看了代码提交历史,其中好几条注释为:“由于某些原因作品从 MIT 协议改变成采用 CC Attribution-NonCommercial 中文:署名-非商业性使用协议”。看来作者也意识到问题了,临时修改了协议,然而并没有什么卵用了,因为开发者依然可以在之前代码基础上进行二次开发。

所以啊:选择开源协议要谨慎。

大家还记得 MacOS 和 BSD 的历史吗?

苹果公司看到 BSD 这么优秀的开源系统后,眼前一亮:

源码可以改。

可以闭源。
好,那我就闭源。

可以商用。
哇,正合我意。

最气人的是,改完的 MacOS 比 BSD 还漂亮、还好用。

这 TM 就尴尬了。
这 TM 就尴尬了。
这 TM 就尴尬了。

那让我们回过头来再看看作者开发的这款软件,是百分之百原创吗?很显然不是,作者使用了 ffmpeg、kxmovie、YiRefresh 等开源代码,由于我没有下载安装作者的这个 APP,也就不评价作者有没有按照开源协议去使用这些开源代码。但是从作者文中体现出来的开源认知水平来看,作者应该“违规”使用了这些开源代码。

那我在上文中提到的 MIT License 到底是什么呢?

License 就是版权许可证,里面详尽表述了你获得代码后拥有的权利,可以对别人的作品进行何种操作,何种操作又是被禁止的。我们常用的开源软件协议大致有GPL、BSD、MIT、Mozilla、Apache 和 LGPL。

那么到底该选择哪一个 License 呢?乌克兰程序员 Paul Bagwell 画了一张分析图(下图为阮一峰汉化版)

还有一张更全面并略带恶搞性质的图片,由 diycode 社区的 flniu 进行汉化:

第二件事发生在 v2ex 社区,帖子标题为:竟然有人直接复制我代码,而不 fork 的!

看到这个标题我就懵了——难道不可以吗!!??(黑人问号.jpg)

之前开发的亲戚关系计算器竟然让人直接拷走…… 简直无语了,开源就可以随便来么?直接代码拷走,放自己仓库就成自己的了。。。。

????

难道不是吗?!

关键是!为什么唯一的一个提交显示的是我提交的?可界面显示确实不是 fork 我的,难道 github 出错了,fork 会断掉关系吗?

作者开发的“亲戚关系计算器”确实不错,我也用过。对于这种开发者我们应该敬佩。但是作者的言论却暴露了自己根本不懂开源。诚然,作者选择把自己的代码放到 github 或者其他开源社区,当别人 star 或者 fork 了自己的代码,作者也会为自己的努力感到欣慰。

哪个所谓的“抄袭者”到底错在哪里了?答案是,没有任何错误。

“抄袭者”并没有篡改原作者的任何 commit 记录,LICENSE 和版权信息也丝毫没动。

很多人以为在 github 上开源代码就是在推广自己了,当发现别人用自己的代码做的事情比自己还好,就又心里不平衡了。他们把自己的代码放到 github 等待别人 star,等待别人 fork,但是当别人使用了代码却没有 fork 时,心里又不平衡了。

所以做开源,先摆好心态

如果你也有上面的那种心态,我给你推荐一个开源许可证——SATA。这个许可证的全称是The Star And Thank Author License。协议的具体内容在 zTrix/sata-license,你可以对软件进行任意地修改、发行、使用、复制、出售等。只需要给作者点赞并在许可证里面感谢作者。此许可证还建议你,给作者发送电子邮件并和作者交朋友、想你的朋友们宣传此软件、感谢作者(只需要心里默默感谢就像,不需要让全世界都知道)。

如果一个项目没有使用上面的开源许可证,我们怎么去使用这个项目的代码呢?最简单的方式就是直接询问作者。比如之前有个帖子,开源中国的网友非常喜欢开源中国网站的风格,于是发帖问:红薯大哥,感觉你网站的风格好,特别我正要准备做的一个食品相关的产品,呵呵,我要抄袭。所以嘛,脸皮一定要厚。最后的结果是,不仅仅获得了 @红薯 的同意,就连红薯蜀黍都给他出谋划策。

每周推送原创高质量文章,欢迎关注我的公众号

© 著作权归作者所有

justjavac

justjavac

粉丝 325
博文 149
码字总数 189426
作品 3
南开
私信 提问
加载中

评论(38)

不是不想开
简单易懂,感谢分享!!
轻歌
轻歌
关于 macOS 和 BSD 这段,补充一下:macOS的内核,即 Apple Darwin ,是开源的。
knightuniverse
knightuniverse
总结的好。Licensing 感觉也是有点复杂呀。
清风_
清风_
写的通俗易懂,赞~
呐喊还是咆哮
涨姿势了
祥_venux
祥_venux
赞,多谢分享·
鱼米三香
鱼米三香
建议码云添加 Public domain (公共领域)授权,很多很多的想法和代码片段其实都是这个授权下的。@红薯
IceRainYWC
IceRainYWC
博主辛苦!受教了!
我就是要用这个ID
我就是要用这个ID
厉害厉害,涨姿势了。
金拱门
金拱门
先有GPLV2 后有天。哼哼
动手开发自己的第一个 composer 包

动手开发自己的第一个 composer 包 composer 是 PHP 的依赖管理工具,本篇文章就来说明如何构建一个包,并提交到 Packagist ,这样别人就可以方便地通过 composer 使用你的包了。 开发 comp...

蜗牛奔跑
2016/11/24
25
0
2018-06-05 java大文件上传踩坑

需求:上传70多个视频文件,最大1.6G,共40G+ 限制:不能断点续传,本地没有权限上传 解决: 1.首先获取文件夹下所有文件 2.遍历文件,连接vpn上传(为啥不用代理,因为xshell连一会就断,但...

江江江123
2018/06/05
0
0
一个在校大学生的开源之路:从0到1024

自我介绍 我,一个热爱iOS开发的大三学生! 为何要走向开源之路? 大一学完C语言的我,大一暑假就泡在实验室开始我的 iOS 开发之旅。至今接触 iOS 开发已经一年多了,然而不甘于当码农的我,...

iphone5solo
2016/11/09
1K
6
实战做项目如何选择开源许可协议(二)- 开放代码

通过《实战做项目如何选择开源许可协议(一)-了解协议》大概知道了有哪些开源协议和各个协议的作用和区别。我们准备把代码开放出去时,需要了解各个代码托管平台如何设置开源协议。目前常用...

观澜而索源
2013/07/27
122
0
实战做项目如何选择开源许可协议(二)- 开放代码

下面分别列一下这些平台如何设置开源协议: 1、googlecode,google推出的代码托管平台,整体可用还是比较强的,如果不是经常被墙用这个也可以。支持svn、git协议。要在这个上面共享代码, 首...

hanfeng
2014/06/23
103
0

没有更多内容

加载失败,请刷新页面

加载更多

密码加密与微服务鉴权JWT详细使用教程

[TOC] 1.1、了解微服务状态 微服务集群中的每个服务,对外提供的都是Rest风格的接口,而Rest风格的一个最重要的规范就是:服务的无状态性。 什么是无状态? 1.服务端不保存任何客户端请求者信...

庭前云落
19分钟前
6
0
Xamarin.FormsShell基础教程(9)Shell相关类体系

Xamarin.FormsShell基础教程(9)Shell相关类体系 在Shell中,最为主要的类是Shell类。Shell类实现了大多数应用程序所需的基本UI功能的页面。除此以外,常用的类还有ShellContent、Tab、Fly...

大学霸
21分钟前
4
0
聊聊MVC、MVP、MVVM吧

先来介绍下本文结构: 三种框架的具体概念 在安卓开发上的写法、优缺点 1.概念 1.1 MVC MVC模式(Model–view–controller)是软件工程中的一种软件架构模式,把软件系统分为三个基本部分:模...

二营长的意大利炮手
38分钟前
4
0
如果解释Python,什么是.pyc文件?

我已经了解Python是一种解释型语言......但是,当我查看我的Python源代码时,我看到.pyc文件,Windows将其识别为“编译的Python文件”。 这些来自哪里? #1楼 Python代码经历了两个阶段。 第...

javail
43分钟前
4
0
.NET Core初览

初览的应用场景为游戏服务器开发。所以测试在侧重点上更强于IO和密集型计算 TODO

梦想游戏人
46分钟前
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部