在百度里面搜“斯托曼 GPL”,第一条就是“GPL协议大剖析—GPL就是给软件开发者们准备的坑”( http://www.stallman.cn/38 ),这是一篇猛烈抨击GPL和斯托曼的文章,该网站名为“斯托曼与GNU运动评论”,域名居然是stallman.cn,这可真是太有趣了,略扫一眼,便极大地激发了我的辩论欲。

该网站明目张胆声称:“理查德·马修·斯托曼(RMS),自由软件运动(GNU)发起人、自由软件基金会(FSF)前主席、与知识产权为敌的斗士、XX派、对XXX、XXX等XXXXX也要送温暖的极端左翼分子,被人尊称为顶级黑客、精神领袖,不过是明日黄花。开办此站的目的是正本清源、破除对RMS的迷信、揭露GNU运动的本质、最大程度地清除GNU带毒意识形态。”

这种文风的话语,给我就一个感觉:太嚣张了。

必须得怼回去!

文章没有直接标明作者,但看了一下网站页面底部,作者应该是一个叫“小衲”的人(他似乎还有个网站叫linux.zone)。

小衲在该文中,以标注的形式,对GPLv3全文进行大肆抨击,选用的翻译版本是阮坤良版1

GPL本身比较难懂,虽然阮版已经翻译的很不错了,但小衲在很多地方还是没有看明白,有很多自称看不懂的地方,也有很多完全理解错误的地方。这些地方我就不说了,直接无视。

我就说说一些可能还有点市场的论点,这些观点多少反映了一些人的困惑。

注1:本文中的GPL,不特指某个版本,虽然主要是说v3。

注2:本文中举的一些开源软件的例子,很多并不是GPL软件,但就是个例子而已,不用太纠结。正如小衲貌似批判GPL,很多地方更多是批判开源精神。

注3:本文所说“GPL软件”,是指按照GPL许可证发布的软件。

图片来自《The Dig》(右边那人像不像stallman?)

下面列出该文的主要谬误和迷思,并一一点评。

纵观该文,小衲的困惑主要是以下五点:

一、为什么只为用户着想,而欺负开发者?

小衲说:“近来细读了一下GPL协议中文版,发现它满是针对开发者的霸王条款,分不清开源的主方(开发者)和客方(用户),一个劲的强调用户自由自由自由,浅一看,挺美好,挺蛊惑人心,但只要仔细想想,这个只为用户着想的协议,本身前提就搞错了。没有开发者的代码,哪里来用户的自由?”

此人可能没有搞清楚开源软件的“用户”是什么概念,据我所知,凡是对源代码感兴趣的,都是程序员,都是软件公司,君不见,那些互联网大厂,哪个不是开源软件和开源代码的重度用户?!那些混迹在各个软件公司、各个甲方、乙方的所谓软件工程师、架构师,哪个不是高度受益于开源软件和开源代码?

从Linux到Android,从MySQL到Postgres,从Hadoop到Elasticsearch,从Apache到Nginx,从Docker到Kubernetes,哪家大厂没有用过?哪个代码是给最终用户看的?

所以,开源代码,最大的受益者是开发者、是软件公司、是互联网公司。

所以,GPL所给的自由,是开发者享受了最多!

不过,今后的世界将进入软件的世界,人人都将成为程序员。自由软件最终造福的,是所有人。

二、GPL自相矛盾,到底免费还是收费?

小衲说“GPL通篇都是一小撮人的一厢情愿,充满自相矛盾的表述,一会儿说所谓自由非免费,一会儿又说开源必须免费,真不知道经历了多少次内斗才形成这么一个文本!”

小衲看来对GPL允许收费的若干处描述没有完全看明白,尤其是他对第10条的理解完全错误(小衲错误以为“一旦第一次对自由软件进行收费,就不能重复收费”,完全不是那么回事嘛,有空可以看看我的“人话解读GPLv3”)。

其实,斯托曼也是人,也知道程序员要吃饭,他当年也曾靠卖Emacs过活,所以并不排斥收费。

下面是我整理的GPL关于收费的部分,给小衲以及不了解这块的看客解个惑。

GPL认为可以收费的有这么几种:

1、你可以卖别人写的开源代码。

比如你可以卖Linux内核源代码,虽然你没有写过一行Linux代码,你都可以卖,而且你收多少钱都可以。

但这里面的逻辑在于:你会下载,别人也会下载,别人为什么要从你这里买?除非他不知道这是开源的。

或者,除非是你整理得很好,包装得很漂亮,弄得很方便,收费也不贵,那是有人乐意花钱买的。(就好比有些收费的Linux发行版)

去年有人在“咸鱼”上买一个开源程序“新蜂商城”,他卖30元,也确实有人买,因为他还手把手教人怎么搭建呢!

“新蜂商城”作者可没兴趣干这事。

2、你可以卖你修改过的别人的代码。

你收多少钱都可以。你觉得有人买就行。

你不要太高估了别人买你修改过代码的兴趣。

就好比你把Vim的源码改了改,你卖,你说能卖多少呢?所以不用给你限价。

3、你可以卖目标码。

所谓目标码,可以简单理解为可执行文件这类。

通常,所有商业软件卖的其实都是目标码。

目标码你卖多少钱都行,但你要免费或者以不高于成本价提供源码。

由于你提供了源码,这样一来,别人也可以做出目标码,别人也可以卖,所以竞价就开始了。

由于作者(可以是公司、团队等)毕竟比较正宗、权威一些,所以可以卖的贵一点,毕竟大家都认他嘛!

为什么说要给源码限价(免费或者不高于成本价)?

我想到的一个原因是,对于一个GPL软件,如果你是作者或者衍生品作者,软件你收10万元,源码你收1000万(如果不限价),由于源码只在你手里,那几乎就是不开源了,因为一般人也买不起。除非有人花1000万买下来挂网上,大家才能免费获得。

4、你可以收维保费。

就是说,你帮着安装软件、帮着解决问题和故障、帮着升级打补丁、帮着定期来看看有没有异常啥的,这种收费我觉得很正常,这就是一种服务费,也是一种典型的商业盈利模式(如红帽订阅)。

大多数有点钱的甲方,都会买大量的维保服务,以免出了事没人托底。

5、其他并不在GPL关注范围之内的情况。

你可以用一切不违反GPL或者与GPL无关的方式赚钱,比如你用GPL软件提供云服务来赚钱(用这种的太多了);你可以利用自己的名声赚钱;原创作者可以通过双许可证赚钱(下面会提到);原创作者还可以弄一个多一些功能的企业版(就是专有软件)来赚钱。

注意,上面说的是可以收费的情况。GPLv3里面还有一条(第10条)是明令禁止收费的:

你不能收GPL软件的版权费、专利费、许可费、版税等等这类授权费。授权都只能是免费的。

三、写代码这么辛苦,为什么让我们免费!

小衲说:“码代码是非常辛苦的活动,有时甚至可以用呕心沥血、鞠躬尽瘁来形容,在这种情况下正当权益还要被GPL剥夺,不是作死吗?”

本人评论:如果你是一个软件的原创作者,没人逼着你开源你的代码,没人逼着你用GPL。

用不用GPL,对原创作者而言,是一个心甘情愿自主选择的事。

而如果你只是拿了别人的GPL源码,做了一些改动,你再呕心沥血,你也要贡献出源码。

道理是很浅显的,你免费用了我的代码,你也要回馈一些,对不对,这很公平吧!

不服你就当原创作者。

当原创作者是有很多好处的,你可以选择不用GPL,而且,即便你用了GPL,你仍然可以再用另一个许可证专门卖给企业。

有人会感到奇怪,一个已经用了GPL的软件,同时可以再以其他商业许可证出售?

是的,因为你是原创作者。你是版权人,你可以给一部分人用GPL授权,给另一部分人用其他许可证授权。

有人会说,那既然有开源的,为什么还会有人去买你其他许可证的呢?

有这么一种情况:企业想用某个开源软件,但又不想把自己的修改版开源,这时就可以花钱请作者授权,许可让自己的修改版无需开源。

说白了,就是“花钱免传染”。

GPL第5条说:“本许可证不允许你以其他形式授权该衍生作品。但如果你得到有权人的允许,那你就可以。”

MiniGUI采用这种双许可证模式,仅在2007至2012年,就获得几千万元的软件许可收费。2

四、为什么开发者只有虚名,没有权利!

小衲说:“GPL协议长篇大论,目的就一个:“确保用户的自由”,而且这个自由是绝对的自由。至于开发者的权利呢?就一条:申明版权,然而这个版权只是个虚名而已。”

本人评论:我活这么大,发现就是有些人,死活也不相信,这个世界真有能做无私贡献的人。

依我这么多年对人性的了解,做无私奉献的人,光他获得的成就感、优越感、声望感,早就把他满足若干遍了,还要啥自行车!

五、开放了源码,怎么挣钱?

GPL第6条说目标码可以收费,源码要免费(或不高于成本)。小衲评论说:“这是为同行(英文counterpart冤家)大开方便之门啊。有了免费的源码,二进制包继续收费有什么意义?”

本人评论:没错,有了源码,理论上大家都可以做出目标码。

所以开源代码的目标码通常也不收费。我下载过很多开源软件的目标码,几乎没见到有收费的。

但GPL的初心,本来就不是赚大钱的。

就好比你不能埋怨一个慈善组织,说他赚钱太少。

想赚钱,你要靠其他方法,你不能靠建立或加入慈善组织来赚钱。

结语

怎么说呢,一个很现实很狭隘的人,理解不了有理想有情怀的人。

一个满脑子资本主义的人,理解不了共产主义。

图片来自《The dig》

文 |卫剑钒


  1. 阮版GPLv3翻译(https://jxself.org/translations/gpl-3.zh.shtml)

  2. 开源软件及国内发展现状(https://www.oschina.net/news/33260/china-opensource-status)

论“GPL就是给软件开发者们准备的坑”相关推荐

  1. 软件开发者的“比天之翼”

     "在天愿做比翼鸟,在地愿为连理枝".关于爱情的这句古今绝唱,如果能够有一天用来形容开发者和营运商之间的关系,我想大概是很多人的愿望. 飞翔一定要有翅膀,就象航海一定要有风帆.对于 ...

  2. 软件开发者的最佳实践

    近期在一个站点上看到一篇写关于软件开发者应该有的几项实践,感觉写的很的好.以下将列举下文章中提到的几个方面. 首先文章中提出,软件开发者须要不断的练习,什么是练习,为什么要练习,练习意味着什么?文章中 ...

  3. 优秀软件开发者必须具备的能力

    选择从事软件开发,就选择了与挑战为伍.时下这个年代的软件开发已经不再是上个世纪的软件开发了,那时候基本上你选择一种开发语言和一个开发环境,就可以吃饱饭,而且还可以吃得很好.然而在软件行业发展到今天,我 ...

  4. 软件开发者升职加薪的 8 项技能

    私下里,经常有一些读者问我:"作为一名软件开发者,我应该掌握哪些技能,才能被领导赏识给我呢?"说实话,我心目中很多选项,不少于 20 个,但我斟酌再三,只挑选了其中最能让你受益的 ...

  5. 改变软件开发者的形象,增加多样性

    Birgitta Böckeler认为,我们必须放弃一次又一次招聘非常类似于我们自己的人才,以实现软件产业更高水平的多样性.她说,事情已经在慢慢地发生变化,各个组织越来越注重于多样性和包容性.有许多能 ...

  6. 提升软件开发者效率的10个提示

    Ilias Tsagklis是电信领域的一位资深软件工程师,以软件开发者的身份参与了多个应用与服务的开发工作.目前,Ilias是PCRF解决方案的技术领导者.他感兴趣的领域包括多层架构.中间件服务及移 ...

  7. 软件开发者如何准备未来?

    摘要:现今,科技领域技术更新非常迅速,作为该领域幕后勤恳劳作的软件开发者要想在其中永远保持领先,跟得上时代,就需要时刻面向未来做好准备.但面对各种技术各种开发语言,软件开发者该如何做? 软件开发领域有 ...

  8. 软件开发者最重要的四大技能

    摘要:现如今,可供选择的技术.语言及平台可谓五花八门,因此要弄明白哪里是花时间训练的最佳投资点也就难上加难-- 现如今,可供选择的技术.语言及平台可谓五花八门,因此作为软件开发者,要弄明白哪里是花时间 ...

  9. 软件开发者面试百问答案,老紫竹研究室出品(已经有64个)

    当然,全部是我个人的答案,不代表别人.地址 www.laozizhu.com/program.jsp?typeId=104 老紫竹研究室,分享软件开发的快乐与收获 ' 我这里贴上已经写好的答案连接. ...

最新文章

  1. [数据库]简单SQL语句总结
  2. 【.NET】Repeater控件简单的数据绑定(有bool,日期,序号)
  3. php 交换函数,php用于反转/交换数组中的键名和对应关联的键值的函数array_flip()...
  4. mysql中 REPLACE INTO 和 INSERT INTO 的区别
  5. IE9 表格错位bug
  6. OpenGL网络资源
  7. Captin for mac(大小写切换悬浮窗提示)
  8. 【翻译】steam离线时通过局域网游玩L4D2(求生之路2)
  9. 微信公众号、企业服务号如何配置运营管理人员
  10. 2020微信对话截图一件生成神器
  11. Quartz 2.4.0 源码解析
  12. java在linux转化mp3,linux下微信/qq的aud、silk音频文件格式与mp3格式互转,获取音频时长的方法,附问题分析和java代码。...
  13. 步进电机驱动控制总结(一)
  14. offsetLeft理解以及MouseEvent接口中的screenX,clientX,pageX,offsetX区别.
  15. 基于android的旅游app毕设,安卓157旅游记忆(app+server)
  16. 安卓13:Android Studio Button组件默认样式为蓝紫色,无法更改
  17. c语言窗口插件,C语言使用ActiveX控件
  18. 有效管理自己知识,多总结和分享——2018七月份的尾巴
  19. Spring AOP 中的切点是什么?如何定义切点?
  20. 分数换算小数补0法_数学 | 循环小数的循环节以及永远追不上的乌龟

热门文章

  1. 给discuz x增加后台菜单管理功能
  2. DNS是什么?怎样设置DNS?
  3. PLC可编程控制器控制热水供暖循环系统实训
  4. 关于电子邮件客户端设计中QQ邮箱授权码问题。(运行提示535错误,说授权码error。)
  5. 在美国的电子工程师眼中的中国电子行业!
  6. 无法通过终端(远程桌面)服务启动MATLAB的解决办法
  7. 客制化踩坑记——我的第一把40%序列键盘
  8. 外媒分析:为何说苹果一定没造车!
  9. 【容器】kubectl|K8S常用命令总结|crictl管理命令
  10. sd/mmc驱动框架-(三)mmc子系统的数据结构