一个开源工作者对开源与赚钱的一些想法

摘要:本文作者长期以来一直定期为开源世界贡献代码,最近重新思索了一下开源软件的意义,在开发者中引起了强烈共鸣。

15年来,我一直定期地贡献开源代码,但是现在我停下来思考这对我自己究竟意味着什么,也许仅仅是因为我喜欢写代码,也许是我消遣时间的方式:写代码而非思考其中的意义……但是最近我开始反复思考开源、它与IT行业的关系,以及对我——一个开发者来说,OSS(开源软件)究竟是什么。

首先,开源对我来说与自由软件运动无关,而是为了对全人类做贡献。这意味着很多,比如我从不关心别人是如何对待我的代码,也不关心别人是否会发布自己的修改版本,我只希望他们愿意使用我的代码,而不论是以哪种方式。

我还非常希望别人能从中获得乐趣、学习新的知识,甚至挣钱。别人使用我的代码挣钱,并不意味着我失去了什么,恰恰相反,我从中获得了我所想要的:

  1. 如果别人使用我的代码挣到钱,意味着我对世界产生了更大的影响。
  2. 如果有N个项目使用了我的代码并从中受益,他们很有可能会愿意与我分享其所得收入,或者直接雇佣我。
  3. 我也可以使用自己和他人的开源代码,并获得收益。

出于以上原因,我选择了BSD这个几乎等同于“做你所愿”的开源协议。

但是,很明显并非所有人都这样想,很多开源代码贡献者并不希望别人将其想法用于商业产品,他们只希望继续发布同样许可的作品。

对我来说,使用GPL协议所需要遵守的众多规则如同枷锁,限制了人们使用开源代码的自由。但是,接收的回报跟协议本身没有多大关系:如果它真的有用,那么人们会愿意以某种方式进行回馈,而非维护一个分支。发展才是真正的价值的。同样,不能进化的代码库也没有意义。如果你贡献的开源代码很有价值,相信其他同行也愿意把自己的修改合并进去。

无论如何,作为一个用户,我喜欢更少的补丁集和更多的自由。这没有什么可多说的。

在我看来,开源最缺乏的回报在于金钱,而非补丁。创业公司,以及众多低成本运营的IT企业都强烈依赖于众多开源程序。企业应当向他们所使用的核心开源软件的开发者捐赠一部分收入,因为他们的成功离不开这些软件,我认为更理智的方式是雇佣这帮人专门负责开源软件的开发(就像VMware和我的关系一样),或者直接捐款。

很多开发者的工作仅仅是因为一时的激情,只有很少一部分从中受益。如果能分配些捐款,相信人们会更关心他们一时激情的开源作品,因此带来的经济价值可能比日常薪水工作更多。很可惜,你无法pull request不会付款,虽然通过提交源代码来帮助源代码很有意义,但在我看来还不够完美。

也许你的视角完全不一样,但在我看来,当今IT行业很多的价值都是由开源软件所驱动的,其中很多又是在业余或工作间隙时间努力完成,当然,前提是有个允许允许你这样做的雇主。

从经济角度来看,我觉得这样做还不够好:如果聪明的程序员有机会自由地做自己所喜欢之事、为流行的开源应用贡献代码,一定可以创造更多的商业价值。

各位网友,你们是如何看待开源与赚钱的?
原文链接:Antirez weblog

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/449650.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Chapter 5 Blood Type——33

We were near the parking lot now. 我们现在离停车场不远。 I veered left, toward my truck. Something caught my jacket, yanking me back. 我转向左边,面对我的车。有人抓住了我的夹克让我回过神来。 "Where do you think youre going?" he asked,…

CentOS上安装Docker (图解)

更简单的办法:三分钟装好 Docker ( 图解) 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到教程。 // 用上面那个办法吧,简单多了,下面这个方法看看…

Uber提出有创造力的POET:自行开发更困难环境和解决方案

近日,Uber 发文介绍了一种开放式方法 POET(Paired Open-Ended Trailblazer),可自行开发难度递增的环境及其解决方案,还可以实现不同环境中的智能体迁移,促进进化。Uber AI 实验室注重开放性(ope…

spring boot 报错:Your ApplicationContext is unlikely to start due to a @ComponentScan of the default p

前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到教程。 ** WARNING ** : Your ApplicationContext is unlikely to start due to a ComponentScan of the default package. Your ApplicationCo…

jl1.如何设置元素的宽高包含元素的边框和内边距

jl1.如何设置元素的宽高包含元素的边框和内边距 方法一: 文档地址:http://www.w3school.com.cn/cssref/pr_box-sizing.asp CSS3 box-sizing属性: box-sizing: border-box; 抱歉,由于我的粗心,导致之前标题中的错误。目…

C语言编译过程总结详解

源文:http://bbs.dzsc.com/space/viewspacepost.aspx?postid76976 C语言的编译链接过程要把我们编写的一个c程序(源代码)转换成可以在硬件上运行的程序(可执行代码),需要进行编译和链接。编译就是把文本形…

DataFrame合并

获取数据后,需要对数据进行合并,通常是日期,也有对相同公司进行合并 下面就研究数据合并的常用方法: 目录 append merge concat 首先创建几个DataFrame,作为样本材料进行练习: df1 pd.DataFrame(np…

回顾小程序2018年三足鼎立历程,2019年BAT火力全开

从 2018 年开年,小程序就成为了互联网巨头加紧布局的开始。微信小程序先发制人,且拥有 10 亿月活跃用户,如此巨大的流量往往使众多后来者望而却步。 但这里不包括阿里和百度。其实蚂蚁金服团队早在 2017 年 9 月便开始筹划小程序,…

promise之我见

在我们平时的方法中有很多方法是promise封装的, 有些函数后边跟的then和catch 就是promise的方法,先看一下pormise的特点 (1)对象的状态不受外界影响。Promise对象代表一个异步操作,有三种状态:pending&…

2020-11-26

import datetime last[date] last[date].apply(lambda x:datetime.datetime.strptime(str(x),%Y%m%d).strftime(%Y/%m/%d)) cu.rename(columns{"Unnamed: 0":"date"},inplaceTrue) traindatapd.DataFrame(traindata,dtypenp.float) list 转化Data Frame …

CPP虚析构函数

#include<iostream> using namespace std;class base {public:base(){};virtual ~base(){}; };// 在类声明中声明纯虚析构函数 //base::~base() {}class father: public base {public:~father(){cout << "father" << endl;} };int main() {base* a…

学习过程中的一些想法

2019.01.18 问题描述&#xff1a;在学习响应式布局视频教程的时候&#xff0c;遇到了一些不是特别明白的知识点&#xff0c;比如&#xff1a;媒体查询、视口&#xff0c;视频中会讲解使用的那一部分东西&#xff0c;不太影响我继续看视频&#xff08;能大概理解&#xff09;&am…

idea 新建springboot 的 web 项目

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 IDAE中新建web项目见&#xff1a;IntelliJ IDEA中新建JAVA WEB项目、maven项目 默认已有一个 maven 的 web 项目&#xff1a;gentle --…

PHP工程师需要掌握的知识(转载)

掌握PHP基础、文件操作、面向对象编程、CURL扩展。掌握Linux环境下面LAMP环境搭建、LNMP环境搭建。了解基本的HTTP协议和计算机网络知识。熟悉常用的算法与数据结构知识&#xff0c;队列、栈、队、图、树、排序算法等。熟悉前端HTML、CSS、jQuery、BootStarp等知识。熟悉常用的…

读码,解码,转换

import chardet f open(ff2.csv,rb) data f.read() chardet.detect(data){encoding: GB2312, confidence: 0.99, language: Chinese}

从全栈式解决方案到情感化,揭秘问众智能切入车载语音市场的最佳姿势...

*问众智能CEO张亚 如果说语音交互是车载场景的最佳方式&#xff0c;未来谁掌握车内语音交互“话语权”&#xff0c;谁就将主宰车辆智能网联的新时代。 经过多年的渐进式发展&#xff0c;语音交互的价值正逐步走出单纯“控制方式”的狭隘理解&#xff0c;向业内人眼中的“智能…

浮想——我和CSDN走过了3个时代(长文,无耐心读完者勿入)

上周末公司年会&#xff0c;董事长蒋涛同学分享了他13年的创业经历。 算起来&#xff0c;这已经是我第1、2、3、4、5、6、7年参加CSDN的年会了。场面上&#xff0c;这也是最大的一次&#xff0c;也是蒋涛同学讲话时间最长的一次。下午时光&#xff0c;宝贝正在我怀里沉沉的睡着…

CentOS7的yum安装mysql

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 一、mariadb 查看CentOS7中是否已经安装了mariadb数据库,若安装了mariadb数据库&#xff0c;先卸载mariadb数据再安装MySQL。若没有安装m…

3530: [Sdoi2014]数数

3530: [Sdoi2014]数数 链接 分析&#xff1a; 对给定的串建立AC自动机&#xff0c;然后数位dp。数位dp的过程中&#xff0c;记录当前在AC自动机的哪个点上&#xff0c;保证不能走到出现了给定串的点。 代码&#xff1a; #include<cstdio> #include<algorithm> #inc…

阿里云日志添加要查询字段

第一步&#xff1a;在API基控制器&#xff08;base文件下&#xff09;下面 $arr 就是我要接受的所有参数值&#xff0c;而 msg_id就是我以后要在阿里云日志中查询的字段&#xff0c;以此字段统计某些数据 $arr 是前台API接口传过来的数据 &#xff0c;这里我需要使用 $arr[id] …