作者 | 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 设备可能已成为僵尸网络“肉鸡”
点分享点收藏点点赞点在看

开源的 6 条社会契约相关推荐

  1. android契约类是什么_为什么需要社会契约

    android契约类是什么 Software is usually built from lots of small pieces, each with a particular job to do. ...

  2. 智能合约重构社会契约 (5)比特犬模型实现智能合约

    1. 设计思想 针对法律.司法执法应用场景,将智能合约的许多问题简化, 在智能合约的自然语言处理.形式化方法.软件测试方面,突出智能合约的核心功能,降低使用智能合约的门槛,使其可靠且高效. 2.模型驱 ...

  3. 智能合约重构社会契约 (2)雅阁项目智能合约

    1. 雅阁项目有三个主要思想 文本合同到可计算合同:主要目的是从静态的文本合同,以自然语言和文件为主,到动态,数字化,电子文档和证据集成的系统.电子签名仅仅是向本合同迈进的开始. 合同高科技:雅阁项目 ...

  4. 智能合约重构社会契约 (1)李嘉图合约

    1. 定义 智能合约是机器可读的指令集,而李嘉图合约是指明智能合约所遵循的指令意图的文件. 1.1 李嘉图合约前面的部分看起来像普通的软件合同. 1.2 由于加密签名,李嘉图合约极其安全.每个李嘉图合 ...

  5. 最佳 开源 人脸识别算法_开源项目的最佳社会结构是什么?

    最佳 开源 人脸识别算法 代码审查是一种实践,可促进开源项目中的快速协作,知识共享和最高质量. 代码审查的社会结构是项目的定义特征. 开源项目的最佳社会结构是什么? 在本文中,我们通过分析三个常见模型 ...

  6. 政史系列:《社会契约论》读书笔记

    1,进行战争的目的是摧毁敌对国家,当它的防卫者握有武器时,另一方有权杀戮他们.但是,只要这些防卫者放下武器投降,他们就不再是敌人,或者敌人手中的工具.他们立即变回了人--人的生命是任何人都不能剥夺的. ...

  7. 儒家的礼与分配及社会契约

    方才翻完林觥顺先生的<论语我读>,虽所悟有限,但对儒家所说的"礼"也有些认知.正如林先生在"欲而不贪"的注解中所引<史记·礼书>云&qu ...

  8. 卢梭《社会契约论》之论原始社会

    第一章 第一卷的宗旨 核心问题:社会秩序是建立在什么的约定基础之上? 第二章 论原始社会 1.家庭是最简单的社会,是政治社会的原始模型. 2."家庭"与"政治社会&quo ...

  9. 《社会契约论》读后感

    让•雅克•卢梭(1712-1778)是18世纪法国杰出的启蒙思想家.古典自然法学派中最激进的民主主义者.他的法律思想在西方法律思想史上占有十分重要的地位.他信奉天赋人权说,认为人类最初处于" ...

最新文章

  1. springMVC4(9)属性编辑器剖析入参类型转换原理
  2. MySQL innodb_flush_method 【转载】
  3. 清除应用程序所有缓存
  4. 白帽渗透测试的36条军规
  5. 【java开发系列】—— spring简单入门示例
  6. php/ajax/mysql
  7. mysql安装教程8.0.22_mysql 8.0.22 安装配置方法图文教程
  8. 查询oracle历史scn,ORACLE中的各种SCN查询
  9. 5分钟带你入门vuex(vue状态管理)
  10. phpstorm常用功能快捷键(mac)
  11. 红米Note刷机包 移动版 开发版4.9.23 蝰蛇音效 CRT锁屏动画 最流畅的ROM
  12. 网页上腾讯视频下载mp4格式到本地
  13. 阿拉伯数字转换英文,适用于英文合同和国际贸易单证
  14. 什么是软件设计中的上游和下游?
  15. 网络安全实验室|网络信息安全攻防学习平台(脚本关)
  16. chatgpt智能提效职场办公-ppt怎么转pdf文件
  17. (20191231)免费下载论文的方法汇总
  18. 艾伟_转载:VS 2010 和 .NET 4.0 系列之《自动启动ASP.NET应用》篇
  19. itutorgroup:在线教育与传统线下教育的七大区别你知多少?
  20. 历史和诗——相信未来 (食指)

热门文章

  1. 广东“基因编辑婴儿事件”调查组:将对贺建奎依法依规严肃处理
  2. WSFC2016 SMB多通道与网络调校
  3. 程序猿面试什么最重要?
  4. bitset HDU6515 Coding Problem
  5. 暑期集训5:并查集 线段树 练习题F:  HDU - 1166 ​​​​​​​
  6. springboot 学习笔记(三)
  7. zTree实现节点修改的实时刷新
  8. lvs+keepalived+nginx+tomcat
  9. linux oracle修改编码utf8
  10. 机器学习算法基础知识