当前位置: 首页 > news >正文

开源,不代表你的线上产品可以免费试用

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

先简单的讲下两个引子:

  1. 机器学习,神经学习今年讲的特别厉害,培训机构更是各种贩卖焦虑,贩卖诱惑,什么只要你有简单的高中数学知识,然后再学下线代,py语法和图像处理框架等,四个月的培训就让你工资直接15k,20k起步!是不是感觉很心动。没办法,有人卖,就有人买,我当时也是看到了百度ai平台的一个身份证识别的api就可以当做一个产品来卖,感觉这玩意儿就可以来赚钱,心想自己写一个这种功能,什么识别身份证,火车票,发票,简单的印刷体字体的图片也搞一个api平台,要是有企业公司会用,赚个烟钱岂不乐哉,说罢即可着手展开搞起来,搜了几个图像识别的框架,然后就给一个简单的识别功能做好了,但是识别效率太低,这不又请教了几个大神,效率太低,客户不买账的。最后又知道这玩意要处理的,用户手机拍照,照片有可能是倾斜的或者有其他东西干扰图片的字体信息,又给我的项目加了一个图片校正倾斜,去燥,图片切割。最后效果不错,正确率已经百分之九十了,完美!是不是可以上线赚钱发财了,是不是感觉很简单(其实中间也有卡住的时候),然后开始写订单,授权相关的项目了,这些java项目更是简单(因为本身就是搞javaweb项目的),感觉自己也要腾达了,一天比一天高兴。偶尔一次一个大佬聊天,聊到这个项目,大佬笑了,你要拿这个赚钱?你从中付出了什么?别人开源了框架,你就可以拿着去搞赚钱项目?我说,我没有抄别人的代码,用的都是开源的框架,对方:“哈哈哈,不要只学技术,没事看看人家项目的readme,issure,看看是不是跟你一个想法的人很多呢”这事就停着了。。。。。

  2. 最近我们官网要上一些我们自己产品的视频教程,前端同事(简称:小茗同学)找了一个开源的h5 js框架,然后周六,就昨天,我问小茗:“小茗,你让你找的那个框架让我看下,别咱们写好了又不能用了”,小茗端起了他的茶杯,喝了口热茶,然后道:“哈,这个是开源的框架 ,人家都给代码开源出来了,有啥不能用的”

引子1,2是否真实不必深究,只是举个栗子,只是最近确实遇到了相关问题,又看了有博主讲了开源相关的知识就转述下。

正题:

Ant Design 事件之时,作为看热度的吃瓜群体。我偶尔也会随意地皮一下,虽然没有这么大胆。过程中,大抵发现一些人呐,对于开源的态度并不是那么友善——仿佛作为一个开源贡献者,这些都是我等的义务,应尽的天职一样。我在最初也并没有那么友好,经贺老提醒之后,我发现自己的态度似乎也是不太对。但是,这种利用道德上的压迫感,让人觉得甚是不爽,便想写一篇文章顺带吐槽一番。

开源,并不意味着免费

我们开源了一个软件,并不意味着你可以免费使用。我们花了几天、几个月、几年的时间,打造出来的开源软件,就好像自己的孩子一样。我们会为之搭配一个满足自己利益的协议,它可以是 GPL、Apache,也可以是 WTF 协议。它还可以针对个人免费,但是商业使用收费的软件。你可以直接看到项目的代码,并不意味着你直接商用。

这个基本的原则,也是许多大公司所不懂的,腾讯的 QQ 语音 FFmpeg 耻辱名单事件,华为的 ServiceComb 抄袭事件,小米的 Linux 内核不开源事件……。

而即使是我给予了你免费使用这个库、软件的权利,也不代表我会向你免费提供支持服务。收费软件,收费的其实并不只是软件本身,还有相当一部分是服务的费用。而帮助你使用这个开源软件,也是服务的一部分。在大部分的情况下,这个服务可以由作者自愿提供的,但是不代表它是免费的。

选择开源,能帮你省掉大量的时间和金钱,但是这些并不意味着开源是免费的。开源反而是最贵的,没有人会 7x24 地为你提供售后服务,没有人会向你保证软件背后没有漏洞,没有人会向你提供新功能的支持——你需要自己承担这一切的风险。

开源,是权利而非义务

我从 StackOverflow/Google 复制了一堆代码,作为一种回应,我写有一个对应的博客,上面有一系列的博客;我从 GitHub 上复制代码,作为一种回应,我编写了大量的开源软件。

但是这些都只是我的权利,我可以选择不开源这些软件——随着时间的流逝,让它们在我的电脑上腐烂。而不是将代码提交到网上、GitHub,再除去一些条件限制、环境限制、专利限制等相关的代码,配套上相应的 README、使用文档、Demo,以让其他/她人可以顺利地使用它们。

然而,从法律、道理上来说,我并没有义务这样做。我可以只上传代码到 GitHub 上,你爱用不用。开源是一种权利,我可以使用这个权利,也可以放弃这个权利。不过,对于这个权利不得不提及的一点是,在工作时间、使用公司设备开发的开源软件,从原则上来说,并不属于个人。公司有权利,收回以这种形式开发的开源软件。

“贡献的没有几个,嫌弃的却有一堆”。在 GitHub 上遇到一个问题,帮助某开发者解决了问题。每次都会写 comment 希望他/她能把解决方案放到 issue 里,可多数时候并不会得到解决方案。明明它对于别人是有帮助的,却有人总也不会去做。如果是你,那你还谈论什么开源的权利与义务?

若是不开源,亏欠的是那些开源的人。开源吧,又对那些不开源的人太好了。

开源,不是我们的工作

对于绝大部分的开源工作者来说,开源并不是他/她的日常工作。作为一个 Geek,我们都向往一个更好的世界,一个我们愿意为之奋斗的世界——虚拟世界。我们愿意在这个世界里,创造美好、引以为傲的事物。我们喜欢创造,喜欢和热爱创造的人一起工作,我们喜欢分享,愿意分享东西给喜欢分享的人。

所以呀,解决你的问题,不是我的工作。哪怕你十万火急,我也没有理由、义务去帮助你。白天,我也需要忙于工作,我也有一堆的问题希望有人能帮我解决。可这些问题,往往只能由自己来解决。在工作的时间里,帮助你解决你的问题,对我来说太难了。

我有自己的工作,我需要解决工作中的问题。回到家里,还需要吃饭,还需要刷动漫,还需要洗澡,还需要浪漫的时间,这样一来,所剩的时间就更少了。有限的时间,我还想投入到自己的爱好中,投入到写作中,投入到绘画中。哪怕是不能为我带来收入,但是我很开心。

可我们还是会抽出时间,去解决 GitHub 上的问题。这些问题我们有自己的优先级分类:

  • 出 bug 了。修好它,是你应该做的,也是我应该做的。但是什么时候修好,就得看时间。

  • 新的功能。我可以考虑,但是也可以不考虑。

  • 使用不当。可以适时考虑,帮你解决。

  • 与项目结合有问题。若是你能找到了问题,还有相应的答案,还可以协同解决。若是找不到问题,我也没有源码、分析不出问题,你只能听天由命了。

  • 不按文档使用。不好意思,请再把文档看一遍,再来提问。

可总有人,会去烦作者,说为什么不回答他/她的问题。有时候,还会配上各种难听的话。若是这样的事情多了,怕是作者本人也会放弃开源。

正因为如此,我讨厌在 IM 上添加好友,讨厌邮箱、社交媒体以外的联系方式。我有我的工作,我有我的生活

开源,不是道德绑架

谈及开源来说,我怕得是一个 “自私” 的人。我有自己的生活,出于性生活考虑,我拒绝造基础的轮子,如 UI 组件库、模式库 等等。所有的这些基础设施,都在无时无刻地蚕食生活的角角落落。任何一点鸡毛蒜皮的小问题,都会在 issue 列表中出现:

  • 明明是你不看 README,却在说文档上没写清楚。

  • 明明是你不看示例代码,却在说项目没有 DEMO。

  • 明明写的是给 Angular 用的框架,却在说在 Vue 上不能使用。

  • 明明是你的能力不足,却在说框架有问题,不能工作。

  • 明明是你的能力不足,却在说作者不帮助你。

开心了,我就给解决方案;不开心或者工作累的时候,打开 GitHub issue 的想法都没有。

总有人会以道理的高点,来谴责一个开源软件的作者,直到这个作者关闭了 issues,关闭了项目。甚至是到各种社交媒体上,对这个作者进行轰炸。而点开这个人 GitHub 上的头像,都是一个个 contributions 空白的人,在道德上和别人说义务。拜托,只有有道德的人,才有资格谈义务。不走向开源的人,哪里有什么资格,和开源人的谈开源的义务。

和坏人讲道理,哪是在电影里才有的情节。主角们有主角光环,而键盘侠才是有主角光环的人,而开源软件作者,才是所谓的 “坏人”。键盘侠是个超级英雄,他/她们来无影,去无踪,却又存在于世界的任何一个角落。他/她们可以以任何的角度来抨击一个人,哪怕是一个完美的人,他/她们也会以这个人太完美为理由进行抨击。

没有人强求你为开源做贡献。你也不应该强求其它人为开源做贡献。

不开源,不足以谈开源

当今世界最可怕的是,总有些自媒体,总有人会拼拼凑凑写出一些可怕的文章——拥有大量的阅读,带领一堆吃瓜的群体,开始了舆论的批评。这种文章吧,说是抄袭,倒也不是那么赤裸裸,说是洗稿吧,倒也没有稿可洗。而这些乱七八糟的文章,却在不断地为开源世界带来骂名。就我而言,写一篇像本文一样的技术文章,需要一天。而抄袭,却只需要 10 分钟。

**不开源的人,不足以谈论开源。**不开源的人,怎么可能知道开源的世界是怎样的。不开源的人,怎么会知道开源世界没有英雄。不开源的人,一切的信息来源,都是道听途说的。即是道听途说的,哪来的准确性,又有什么资格谈论古今呢?

开源软件,谋利太难了,谋名还是可以。以开源为名为自己的开源软件宣传,这种行为无可厚非。可要是以开源为名,去宣传一个非开源的组织,怕就是在谋取私利。可总有人借开源之名,宣传自己。虽说我是半吊子——经常造坑到一半,但是至少能拿出一系列的作品。两者间的区别在于,开源贡献者,会为自己的软件作宣传。开源利用者,则是以组织名和开源来为自己背书,却拿不出作品。

不走向开源,你怎么知道开源是怎样的?不开源,你哪来的资格谈开源?!……

转载于:https://my.oschina.net/jsonyang/blog/3000872

相关文章:

  • Docker(三)安装Mysql
  • 线程的两种创建方式
  • H5弹窗后原窗口不会被滑动
  • ZendStudio 常用快捷键大全
  • Diffie-hellman 密匙交换
  • 一段话系列-Spring cloud gateway都有哪些内置filter
  • 中俄蒙三国六方签订白鹤研究与保护合作备忘录
  • jS获取子、父、兄节点方法小结
  • quartz详细介绍
  • 回顾小程序2018年三足鼎立历程,2019年BAT火力全开
  • oschina
  • 深度学习入门:10门免费线上课程推荐
  • CF712E Memory and Casinos
  • 研究:印度气候变暖速度加剧 2040年或面临重灾
  • ImageLoader的优化写法
  • 自己简单写的 事件订阅机制
  • [rust! #004] [译] Rust 的内置 Traits, 使用场景, 方式, 和原因
  • extract-text-webpack-plugin用法
  • GDB 调试 Mysql 实战(三)优先队列排序算法中的行记录长度统计是怎么来的(上)...
  • Intervention/image 图片处理扩展包的安装和使用
  • Javascript Math对象和Date对象常用方法详解
  • python_bomb----数据类型总结
  • spring security oauth2 password授权模式
  • 不用申请服务号就可以开发微信支付/支付宝/QQ钱包支付!附:直接可用的代码+demo...
  • 构造函数(constructor)与原型链(prototype)关系
  • 力扣(LeetCode)965
  • 前端学习笔记之原型——一张图说明`prototype`和`__proto__`的区别
  • 数据可视化之 Sankey 桑基图的实现
  • 基于django的视频点播网站开发-step3-注册登录功能 ...
  • # 飞书APP集成平台-数字化落地
  • #13 yum、编译安装与sed命令的使用
  • #Ubuntu(修改root信息)
  • (MATLAB)第五章-矩阵运算
  • (二)PySpark3:SparkSQL编程
  • (二十三)Flask之高频面试点
  • (分布式缓存)Redis哨兵
  • .babyk勒索病毒解析:恶意更新如何威胁您的数据安全
  • .NET Core IdentityServer4实战-开篇介绍与规划
  • .NET Core 将实体类转换为 SQL(ORM 映射)
  • .Net CoreRabbitMQ消息存储可靠机制
  • .NET MVC第三章、三种传值方式
  • .NET 反射的使用
  • .NET/C# 判断某个类是否是泛型类型或泛型接口的子类型
  • .Net6 Api Swagger配置
  • .NetCore实践篇:分布式监控Zipkin持久化之殇
  • .NET牛人应该知道些什么(2):中级.NET开发人员
  • .net最好用的JSON类Newtonsoft.Json获取多级数据SelectToken
  • @hook扩展分析
  • @transaction 提交事务_【读源码】剖析TCCTransaction事务提交实现细节
  • [ C++ ] STL_list 使用及其模拟实现
  • [ C++ ] STL_stack(栈)queue(队列)使用及其重要接口模拟实现
  • [ 云计算 | AWS 实践 ] Java 如何重命名 Amazon S3 中的文件和文件夹
  • [AIGC] Nacos:一个简单 yet powerful 的配置中心和服务注册中心
  • [C/C++]数据结构 栈和队列()
  • [C++]四种方式求解最大子序列求和问题