当前位置: 首页 > 编程日记 > 正文

开源的 6 条社会契约

作者 | Brett Cannon

译者 | 弯月   责编 | 欧阳姝黎

出品 | CSDN(ID:CSDNnews)

以下为译文:

本文探讨一下关于开源用户权利的问题。我想指出一点,开源维护者不欠用户什么,而粗鲁地对待他们是一种不道德的行为。在我看来,这是开源的基本社会契约。

法律契约

首先,我们来说一说什么是开源软件。在我看来,

开源软件就是允许我免费使用的源代码。

提供了开源代码的开源项目是否需要担负超出该范围的责任吗?我并不觉得,开源软件的责任范围完全由软件本身及其许可决定。但是,如果你希望开源项目参与更多社交,而且用户也希望通过某种方式与维护者取得联系,该怎么办?我认为,在这种情况下,双方的交流会产生更多期望,而且主要是人与人之间的交流。

维护者和用户之间是什么关系?

首先,我认为我们必须确立维护者与用户之间的关系。我常常通过下面的例子来比喻这种关系:

开源代码就像我在自家草坪上放了一堆U盘,上面保存着我的开源代码,而且还挂着“免费”的牌子,当用户想要最新版的代码时,就可以过来拿走一个U盘。

实际上,我与大多数用户之间关系也是这样:我推出一个新的提交,用户可以随意使用,但是我们之间从不互相交谈。

继续上面的比喻,假设你不喜欢从我家前院免费拿走的软件,你可以理直气壮地走到我家门口,敲门,然后大声对我嚷嚷吗?或者在我的邮箱中扔下一封愤怒的信件?甚至向我家门口扔臭鸡蛋?或者站在街道中央,大喊你讨厌我的软件?你觉得这样做合适吗?

实际上,确实有人给我发邮件骂我,愤怒地填写议题,或者在互联网上大声抱怨。你觉着这样真的合适吗?在我看来,这些行为非常粗鲁,不道德。

请不要忘记,又不是我强迫你使用我的软件。你使用我的软件完全是自愿的,你免费拿了我的东西,还冲我乱发脾气?这完全是你个人的问题,与我何干。你完全可以使用其他的免费东西,并停止使用我的源代码。这就好像我给了你一个免费的冰淇淋,你咬了一口,发现不喜欢这个口味,然后就大喊大叫说这个免费的冰激凌怎么这么难吃,你不喜欢。这样对待免费试吃的产品,你觉得合适吗?

我不是说你不能提出建设性的批评,也不是说你不能说明哪些功能不能用。但是,如果你看到有人走到我身边,因为免费的冰激凌对我大加指责,你觉得这像话吗?

定言令式

我之前就说了,粗鲁地对待维护者的人都没有道德。

哲学家 Immanuel Kant 提出了一种道德哲学体系,名叫定言令式。他曾在著作《道德形而上学基础》中阐述道:

行动时对待人类的方式是,不论是自己或任何一个他人,绝对不能当成只是手段,而永远要同时当成是目的。

让我们梳理一下这里的“当成手段”和“当成目的”的含义。“当成手段”的意思是说,通过手段(即通过某种行动)获得一些特定的东西。

而“当成目的”则指的是,你始终应当把人当成目的,而不把他当成工具。即不能利用别人的人性,来达成自己的目的。比如,生活中的朋友,你交朋友并不是希望利用他们来获取某些东西,而是因为你喜欢他们以及他们的为人,你并不会期望从他们身上获得什么。

回过头,再来看看开源。如果你将维护者视为从其软件中获取收益的一种手段,那么从道德上来说就是,你把他们当成了工具,没有将他们视为人。但是,如果你将维护者视为可以帮助自己的志愿者同伴,那么就可以与他们建立正确的关系,而且你也不会利用维护者获取特定的东西。

举个例子

我们继续以免费 U 盘为例进行说明。假设我的一段 C 代码可以很好地集成在芯片 A 上。你使用了我的软件,而且很喜欢,然后就一直使用。突然有一天,我无意中停止了对芯片 A 的支持,因为我想通过 Rust 来提高生产力和安全性,而且我更加喜欢编写这样的低级代码。

于是,你大发雷霆,就因为我修改了软件,你不能再使用了,这样合适吗?不要忘记,每次我修改代码,都是你自己来我家前院拿走 U 盘,我又没求着你使用我的软件。我千辛万苦提供了这些开源代码,如今我发现无法再支持芯片 A 了,我就放弃了,你至于冲我发火吗?

对我来说,感觉就像你把我当成了获取某个平台支持的手段和工具,一旦不支持这个平台了,你就冲我发脾气。如果你把我当成人类看待,你就会问问我是否可以重新考虑一下,如果我说不行,你也应该心平气和地接受。

害人害己

真正令我难过的是,这些人的这种不把维护者当人看的行为害人害己,不仅会伤害到维护者,对用户自身也没好处。开源维护人员保守身体与心理的双重压力是一个很现实的问题。如果有人不停地写信给你,说讨厌你放在前院的那些U盘,那么我肯定会说算了,何必呢,我不在前院放U盘不就得了吗?

每一次用户对着开源维护者大喊大叫,都只会让情况越变越遭。整个恶化的过程可以分好几步。首先,既然开源代码由维护者来实现,那么也理应由他们来决定需求的主次。当然,有时确实会出现维护者固执己见,只考虑自己的需求,而对他人需求的考虑不足的状况,但这也无可厚非。

第二步,如果你对着维护者大喊大叫,伤透了他们的心,他们就会退而求其次,选择开放源代码,但不允许别人公开参与。在这种情况下,维护人员仍然愿意分享开源代码,但根本不希望处理 PR 请求之类的麻烦事儿。

第三步,进一步恶化,维护人员会放弃项目。在这样的项目中,问题跟踪器仍然处于打开状态,人们也可以收集与开源代码相关的问题,甚至可以打补丁或建立分叉,但是维护人员已经走了,所有代码提交都已停止。

下一步是项目关闭,只剩下一个项目的存档。

最后就是完全删除项目,整个代码库都不见了。如果你没有保留开源代码的副本,那么就再也见不到它了。

将每次提交都视为礼物

每次提交开源代码都应被视为来自维护者的一份礼物。维护者将礼物放在前院,与其他愿意使用的人享用。但如果你将它们当作获取其开源代码的手段,那就属于不道德的行为。

如果你意识到开源维护者真的不欠你任何东西,那么就不会要求下一次提交,或下一次发布。如果从这种角度看待开源代码,那么你就会将其视为礼物。因此,即便开源代码没有按照你期望的方向发展,你也不会感到失望,因为从一开始它就是一件礼物。

原文链接:https://snarky.ca/the-social-contract-of-open-source/

声明:本文由CSDN翻译,转载请注明来源。

更多精彩推荐  美国燃油“动脉”被黑客切断,网络安全走向哪里?专访山石网科IBM 能靠 2nm 芯片翻身吗?无人机、IoT 设备都有漏洞?专访以色列老牌安全企业Check Point用 Python 实现隐身,我可以 | 文末福利AI 3D 传感器市场竞争白热化,中国掌握自主可控核心技术时不我待!小心!你家的 IoT 设备可能已成为僵尸网络“肉鸡”
点分享点收藏点点赞点在看

相关文章:

理解linux tr命令

2019独角兽企业重金招聘Python工程师标准>>> 1. tr 命令的功能 tr命名是简化了的sed命令。其主要的功能包括: a. 用一个字符来替换另外一个字符。 b. 删除字符串中的指定子串。 c. 合并字符串中重复串。 2. 常见的命令格式: tr -c -d -s [&qu…

Lambda中的常用sql方法

1、Groupby 对集合进行分组,如: var dllList _menuMan.Load(c > c.TXT_ASSEMBLYNAME ! null).GroupBy(c>c.TXT_ASSEMBLYNAME).OrderByDescending(c>c.Count()).Select(c>c.Key).ToList(); 这里Goupby后面的OrderByDescending表示对每组数量…

刚发现的 Wi-Fi 安全漏洞,可能危及全球所有设备!

作者 | Carol出品 | CSDN(ID:CSDNnews)近日,纽约大学阿布扎比分校的安全研究员 Mathy Vanhoef (马蒂范霍夫)发现了一组可能会影响到数百万设备的 Wi-Fi漏洞。可怕的是,其中部分漏洞甚至可以追溯…

linux + ffmpeg + eclipse 调试

使用linux ffmpeg eclipse调试步骤OS : ubuntu 12.04Eclipse : 3.7.2 为Eclipse安装cdt插件,使其支持c/c导入ffmpeg项目File —-> Import —-> c / c —-> Existing Code as Makefile Project 输入 Project Name, 选择ffmpeg所在目录, Toolchain选择Linu…

在ASP.NET 2.0中使用样式、主题和皮肤

ASP.NET 2.0的主题和皮肤特性使你能够把样式和布局信息存放到一组独立的文件中,总称为主题(Theme)。接下来我们可以把这个主题应用到任何站点,用于改变该站点内的页面和控件的外观和感觉。通过改变主题的内容,而不用改…

C# 引用类型和值类型

1、引用类型 FCL(Framework)中的大多数类型都是引用类型,引用类型总是在托管堆中分配的,C#的new操作符会返回对象的内存地址,也就是指对象数据的内存地址。在使用引用类型时,存在以下性能问题,这是我们在开发中必须要注意的: a、内存必须从托管堆上分配(也就是说每new一个对象,…

dom4j读写xml文件

dom4j读写xml文件首先我们给出一段示例程序:import java.io.File;import java.io.FileWriter;import java.util.Iterator;import org.dom4j.Document;import org.dom4j.DocumentHelper;import org.dom4j.Element;import org.dom4j.io.OutputFormat;import org.dom4j…

图片、文件防盗链

关于图片盗链这个问题,毕竟是自己的劳动成功,很多人不希望别人就那么轻易地偷走了。 这个功能在很多的论坛上都具有,可能是因为盗链的行为太多了吧反盗链的程序其实很简单,熟悉ASP.NET 应用程序生命周期的话很容易就可以写一个&am…

脚本征集大赛开启啦!100%有奖!

对一个程序爱好者来说,最酷的事情莫非就是用你喜欢的语言一步步实现你的idea, 现在用 CSDN 浏览器助手插件, 不仅能提升浏览器效率,还能在上面开发黑科技脚本,帮助你实现各种 idea~

深入理解javascript中的立即执行函数(function(){…})()

2019独角兽企业重金招聘Python工程师标准>>> javascript和其他编程语言相比比较随意,所以javascript代码中充满各种奇葩的写法,有时雾里看花,当然,能理解各型各色的写法也是对javascript语言特性更进一步的深入理解。 …

Javascript学习7 - 脚本化浏览器窗口

原文:Javascript学习7 - 脚本化浏览器窗口本节讨论了文档对象模型、客户端Javascript下Window中的各项属性,包括计时器、Location对象、Histroy对象、窗口、浏览器等相关属性的讨论。 具体详细Window属性介绍可以参见:http://www.w3school.com.cn/htm…

ASP.Net 2.0 发送邮件的代码

这两天因为要做一个可以收集用户提交信息,然后发送邮件到指定邮箱的网页。在 asp.net 2.0 里面发送邮件可以使用 System.Net.Mail 下面的类。http://www.systemnetmail.com/faq/2.1.aspx 这个地址有 System.Net.Mail 的作者写的仿佛是 MSDN 类似的 Faq,看…

腾讯To B业务架构再升级,汤道生任云与智慧产业事业群CEO

5月14日,腾讯云与智慧产业事业群(CSIG)宣布新一轮架构升级,这是继2018年“930变革”后,腾讯To B业务的又一次重大进化。 在本轮战略升级中,腾讯公司高级执行副总裁汤道生担任云与智慧产业事业群CEO&#x…

一篇文章读懂阿里云负载均衡性能保障型实例

1. 什么是负载均衡性能保障型实例?2. 性能保障型实例如何收费?3. 性能保障型实例规格费的定价4. 如何选择性能保障型实例?5. 性能保障型实例的变配操作限制6. 性能保障型实例何时收费?7. 收费后性能共享型实例会收费吗?8. 为何有…

POJ 2135 Farm Tour 最小费用流

两条路不能有重边&#xff0c;既每条边的容量是1。求流量为2的最小费用即可。 //#pragma comment(linker, "/STACK:1024000000,1024000000") #include<cstdio> #include<cstring> #include<cstdlib> #include<algorithm> #include<iostre…

Linux动态库和静态库比较

Linux动态库和静态库比较文件预览 文件目录树如下&#xff0c;如你所见&#xff0c;非常简单。 1. libtest/ 2. |-- lt.c 3. |-- lt.h 4. -- test.c #lt.c 1. 4. 5. #include 6. 7. void myprint(void) 8. { 9. printf("Linux librar…

“一键”部署分布式训练,微软“群策MARO”上新集群管理助手

作者 | 李开琪、王金予 编者按&#xff1a;2020年&#xff0c;微软亚洲研究院发布并开源了多智能体资源优化平台“群策MARO”。为了帮助不同需求的用户进行更加便捷、高效的集群管理&#xff0c;也希望用户可以方便快捷地部署分布式训练任务&#xff0c;微软亚洲研究院的研究员…

1968年12月9日,恩格尔巴特公开演示了世界上第一个鼠标盒子

鼠标之父”道格拉斯恩格尔巴特 腾讯科技讯&#xff0c;肖华2013年12月19日编译 计算机的几次革命和大规模普及都是始于人机交互的改变&#xff0c;今年7月2日&#xff0c;“鼠标之父”道格拉斯恩格尔巴特溘然辞世。人们才发现&#xff0c;他的发明远不止鼠标。作为人机交互的先…

GPT-3模型为何难以复现?这也许是分布式AI框架的最优设计

作者 | 成诚头图 | 下载于视觉中国2020 年&#xff0c;最轰动的 AI 新闻莫过于 OpenAI 发布的 GPT-3 了。它的1750亿参数量及其在众多NLP任务上超过人类的出众表现让大家坚信&#xff1a;大模型才是未来。但与之带来的问题是&#xff0c;训练超大模型所需的算力、存储已不再是单…

c#中什么情况下用(int)什么情况下用Convert.ToInt32

1.c#中什么情况下用(int)什么情况下用Convert.ToInt32 ? 比如说有一个string型的3 ,要给它转换成int型的是用(int)3 ,还是用Convert.ToInt32(3); 还是两个都可以用&#xff0c;为什么&#xff1f; 解答&#xff1a;这两个都是转换成整型的&#xff0c;只是它们的长度不同。…

困扰多日的C#调用Haskell问题竟然是Windows的一个坑

最近一直被C#调用Haskell时的“尝试读取或写入受保护的内存”问题所困扰&#xff08;详见C#调用haskell遭遇Attempted to read or write protected memory&#xff0c;C#调用haskell时的“尝试读取或写入受保护的内存”问题&#xff09;&#xff0c;而且困在其中&#xff0c;越…

“移花接木”偷换广告:HTTPS劫匪木马每天打劫200万次网络访问

本文讲的是“移花接木”偷换广告&#xff1a;HTTPS劫匪木马每天打劫200万次网络访问&#xff0c;近年来&#xff0c;国内各大网站逐渐升级为HTTPS加密连接&#xff0c;以防止网站内容被篡改、用户数据被监听。但是一向被认为“安全可靠”的HTTPS加密传输&#xff0c;其实也可以…

Oracle之sqlpluse显示格式

SQL> show linesize; #设置每行显示的字符数 linesize 10000 SQL> show pagesize; #设置每页显示的行数 pagesize 1000 SQL> set linesize 100; SQL> set pagesize 300; SQL> show linesize; linesize 100 SQL> show pagesize; pagesize 300 col 列名 for …

ASP.Net中利用CSS实现多界面两法

通过使页面动态加载不同CSS实现多界面 方法一: <%page language"C#"%> <%import namespace"System.Data"%> <script language"c#" runat"server"> public void page_load(Object obj,EventArgs e) { //创建服务器…

面试90%都会翻车的高可用+高并发+负载均衡架构设计 !

很多人面试的时候被问到一个让人特别手足无措的问题&#xff1a;你的系统如何支撑高并发&#xff1f;对于一个公司而言&#xff0c;“为什么要高可用”关于负载均衡架构设计你了解多少&#xff1f;大多数同学被问到这个问题压根儿没什么思路去回答&#xff0c;不知道从什么地方…

Linux 如何通过命令查看一个文件的某几行(中间几行或最后几行)

linux 如何显示一个文件的某几行(中间几行) 【一】从第3000行开始&#xff0c;显示1000行。即显示3000~3999行 cat filename | tail -n 3000 | head -n 1000 【二】显示1000行到3000行 cat filename | head -n 3000 | tail -n 1000 *注意两种方法的顺序 分解&#xff1a; tail …

PHP更新数据库记录

//更新记录$query"insert into chinachaodai (name,theindex)values (公司,1)";$result$mysqli->query($query);if($result){ echo ("返回行数:".$mysqli->affected_rows);}else{ echo("失败了");}$mysqli->close();

MySQL 用户与授权管理详解

大纲一、前言二、创建用户并授权三、GRANT语句的种类四、撤权并删除用户一、前言做为Mysql数据库管理员管理用户账户&#xff0c;是一件很重要的事&#xff0c;指出哪个用户可以连接服务器&#xff0c;从哪里连接&#xff0c;连接后能做什么。Mysql从3.22.11开始引入两个语句来…

聚焦联机交易分析一体化,巨杉数据库湖仓一体云产品全线升级

2021年5月15日&#xff0c;领先的金融级分布式数据库厂商 SequoiaDB巨杉数据库 举行了2021年春季发布会。在本次发布会中&#xff0c;巨杉数据库基于「湖仓一体」架构&#xff0c;针对不同的业务需求场景细分出全新的产品线。同时进行了最新的SequoiaDB Cloud数据库云平台操作演…

css :after或:before写小三角形

2019独角兽企业重金招聘Python工程师标准>>> .type_form_tab:after {content: ;position: relative;border: 0.3rem solid #d8d8d8;border-color: #d8d8d8 transparent transparent;width: 0;height: 0;top: 0.7rem;left: 0.3rem; }转载于:https://my.oschina.net/d…