【外评】开源既不是社区,也不是民主
使用开源软件并不意味着你有权对项目的方向进行投票。你得到的礼物是软件本身和许可证赋予的使用自由。就是这样,这应该是一目了然的,但我一再发现并非如此(无论如何重复)。我认为问题源于 “社区 “一词,它意味着一种民主决策过程,而这在开源世界中从未真正存在过。
首先,”社区 “意味着我们所有人都在某种程度上平等地参与工作,以促进整个团体的福利。但大多数开源项目并不是这样运行的。它们通常是由一小群核心贡献者管理的,他们负责推进项目、审核补丁、维护愿景的完整性。这种分工甚至都谈不上平等。它几乎总是明显的精英主义。
这很好!是的,就开源而言,精英主义是好事。你绝对希望项目是由那些来做工作的人推动的,他们展示了自己卓越的奉献精神和能力,并因此负责让礼品工厂不断推出新的更新、功能和版本。生产性努力是这些项目权力的正确道德基础。
但这种精英主义也是权利紧张的根源。你凭什么认为你比我/我们/社区更有资格为这个项目确定方向?如果我们在民主共识的基础上运行这个项目,不是更公平吗?要想礼貌地回答这些问题,既不加剧紧张关系,又不冒犯自由主义者的感情(从这个词的广泛历史意义上讲,而不是现在的政治派别),是很难的。
因此,我们通常会绕开事实。在开源项目中,并非所有参与者的贡献在数量和价值上都是一样的,而这种差异正是大多数项目等级森严的基础。它不是,也永远不会是,一个用户一票。也就是说,它永远不会民主。这是好事!
开放源代码是自由的,充满了各种选择,这就实现了民主的理想。不喜欢某个项目的运行方式?那就用其他无数的替代方案吧。或者创建自己的项目!在这里,你甚至可以利用无数个项目的成果作为基础,开展新的工作。
但这并不能解决紧张局势的原因在于,它仍然依赖于出现并完成工作。而愿意并有能力这样做的人,恰好远远少于希望对自己喜欢的软件的发展方向有发言权的人。
你无法解决这种紧张关系,只能承认它。二十年来,我在 Rails 和其他无数开源项目中都遇到过这种情况。在相当一部分开源用户中,有一种始终存在的本能,他们会不断质疑,为什么做得最多的人,或者交付价值最大的人,或者发起项目最多的人,才能拥有最大的发言权。
当人们谈论开源倦怠时,往往与这种权利综合症有关。尽管它经常被误诊为报酬问题。好像乞讨几块钱就能让权利问题变得可以忍受似的。我不这么认为。程序员们之所以经常享受开源带来的快乐,正是因为它在正常的雇佣关系之外。这才是解脱。
我经常争辩说,开源最好被视为一种礼物交换,因为这将重点放在作为礼物接受者的反应上。但如果你想用另一个词来替代社区,我建议你看看 “生态系统”。生态系统不是平均主义的。有大鱼,也有小鱼。有时是共生关系,但也可能是寄生关系。
但无论你选择哪个词,你都应该记住,开源首先是程序员之间的一种合作方式,他们都是为了完成工作而出现的。而不是一个让撒娇的用户获得免费东西或决策席位的权利计划。
本文文字及图片出自 Open source is neither a community nor a democracy
你也许感兴趣的:
- 【外评】哪些开源项目被广泛使用,但仅由少数人维护?
- 【外评】瑞士现在要求所有政府软件都必须开源
- Winamp 宣布将开放源代码
- 【外评】什么是开源贡献,什么不是开源贡献?
- 【译文】开放源代码与微软:新的反叛开始了
- 开源 Redis 的生命将就此终结?Redis 之父回应分叉浪潮:未来谁能领先,各凭本事!
- 开发者阵营分化,.NET 开源生态系统如何走向未来?
- 马斯克控告OpenAI违约、要求恢复开源;OpenAI否认三连
- 干开源 15 年后,我开启了“自救”,把开源项目变成一项月收入为 4.7 万元的业务!
- 中国开源,又一次让人失望了
我是排名前 50 位的 Rails 投稿人。Rails 贡献者。我与他合作的意义在于,我试图让他不需要注意到我的存在。我与其他贡献者和核心人员一起感受到了许多社区氛围。但从来没有戴夫。
我获得 Ruby 英雄奖的那一年,我(部分地)说服核心团队成员将 Rails 的 RC 版本命名为 “赛车”,因为 Dave 抛弃了我们,去玩 Max Verstappen。他来 RailsConf 不是因为比赛。
他来的那几年,通常都是来听他的主题演讲,也许会在晚餐时见到他,然后他就走了。其他人都很兴奋。核心成员和贡献者都会到场,参加所有天的演讲,进行鸟语会和黑客聊天。
在 1/3 的 basecamp 成员退出的那天,我意识到他根本不在乎我们。我们是可以利用的资源。
我仍然非常喜欢 Rails 社区,但总感觉 Dave 希望这个社区只围绕着他一个人。这不像是一个社区。
因为 Rails 的创建者没有参加 RailsConf,你就说服核心团队成员在 Rails 发布名称中注入尖刻的人身攻击?也许我漏掉了什么,但这种做法实在是太毒辣了。这听起来也不像是一个试图不被人注意到自己存在的人的行为。
老实说,我不确定戴夫是否注意到了。时至今日,我从未听他在公开场合或私下聊天时提及或谈论过这件事。
这也不是我在搞影子活动什么的。我们都在谈论这件事,并以此开玩笑。当时这只是一个 “因为是真的所以很有趣 “的玩笑。我甚至没怎么在意,我觉得如果他更看重做其他事情,那他就是个成年人,可以自己做决定。也许用 “我不生气,只是失望 “来形容这种感觉最恰当不过了。
戴夫做开幕主题演讲,亚伦做闭幕主题演讲,这也是一种历史。其中大部分都是关于开场主题演讲的笑话。
我想我之所以提起这件趣事,是因为它反映了他在开发过程中营造的文化氛围。对于那些困扰我们的事情,如果涉及到他本人或他周围的人,我们都不愿意畅所欲言,也不愿意分享自己的感受。在公共场合开玩笑是唯一常用的渠道。但前提是玩笑不能太刺耳,也不能超过某种无形的底线。
也许我是希望它能引起对话什么的。但是没有。我希望能在 basecamp 之后私下和他谈谈,但他也没来参加 2022 年在波特兰举行的 RailsConf,然后他成立了一个基金会来扼杀 RailsConf(在我看来)。所以我们就来了。
这仍然是下流和幼稚的。如果这就是你的互动方式,我也会避开你。
如果你想给别人反馈,那就成人化,而不是玩消极攻击的游戏。
在代码库中嘲笑别人是不专业的,会导致在专业环境中进行一些艰难的对话。
我认为这个话题是在指责受害者,是在转移我的注意力。我觉得自己受到了攻击,我不明白为什么我 8 年前做的一件事对你们来说如此重要。这很令人沮丧。
我来这里是想分享我与戴夫在开源领域工作的原始故事。为此,我只想让你们听到我的声音。你听到了吗?
> 令人难以置信的毒性
我无法超越 “冷嘲热讽 “这个词。
社会承诺纯属自愿。如果有人因为某种原因而焦虑内向,那么只有法律上的承诺才是最重要的,而不管我们怀有怎样的愿望。
如果这只是少数人之间的一次性玩笑,可能没什么大不了。但如果是作为发行过程的一部分,我就会对相关人员产生严重的质疑。因为这表明这种行为是可以容忍和正常化的。
这个观点非常好。如果有关各方都能谦虚、诚实,并致力于普遍改进,那么就会有改进。
这在规模上或多或少是不可能的。
社区的存在与项目本身无关。最理想的情况下,社区最初是由基本上互为同行的用户组成的用户群。
是的,有些项目将自己纳入社区。另一些项目则参与到社区中。还有一些项目会积极建立和维护社区。这里没有一种模式适合所有人。
理想的社区有权力平衡。在会议上,类似于 DHH 的人物(可能)很难参与,因为有一定比例的人把会议当成了错误报告论坛或功能请求会议。人们不想了解你,他们只想引起你的注意。
我参加过有最高领导者出席的 “会议”(社区驱动的大型用户组),也参加过没有最高领导者出席的 “会议”。坦率地说,他们不在场的会议更有趣。
在他们在场的会议上,焦点往往更多集中在他们说了什么(通常会有严重的曲解),再加上很多关于他们做错了什么的抱怨。
当我们 “独处 “时,更多的是关于社区、分享知识和更多积极因素等。
在我看来,理想的社区不是以项目负责人为中心。如果没有权力失衡,社区就能更好地发挥作用。是的,这有时会让社区感到无能为力(他们确实无能为力)。但这仍然更好。
如果他为项目做出了这么大的贡献,他怎么会是剥削者呢?
怎么,因为他优先考虑自己的爱好,比如比赛?还是因为他选择不花一整天时间参加活动?
开放源码软件维护者就不能有自己的生活吗?
我从你的问题中读到了很多敌意。你还把很多我从未说过的话强加到我的头上。
这让人很不爽,因为我在努力倡导善待开源贡献者和维护者,要么是你故意不理解这一点,要么是我说得不够好。
我现在最希望的是你们去了解一下拉斐尔-门东萨-弗朗萨是谁。我希望你们了解他,了解他为社区所做的杰出贡献。
我希望你们有一天能在网上找到他的名字,我希望你们能为他或其他贡献者辩护,他们付出了那么多,要求却那么少。
用你在这里的热情去做。你能做到吗?你愿意试试吗?
我很容易与 DHH 和你产生共鸣!
> 我们是被利用的资源。
这太不厚道了。DHH 给了你 Rails 的礼物。他不想给你们参与社区的礼物。这没关系!
我不太了解 Rails,但我猜 DHH 为 Rails 投入了大量的时间、精力和心血。这还不够吗?
奇怪的是,我也很同情他。实际上,我很难用足够准确的方式来谈论这些事情,既要表达我的观点,又要传达我所持有的细微差别。
不过,我还是想谈谈这个问题
> 给了你 rails
在我看来,戴夫发布了 rails,耶胡达给了我们好用的 rails,而拉斐尔给了我们实用、稳定的 rails。
最初的发布也不是在真空中进行的,他有 337 signals 的编码员。
我的帖子并不是要反对戴夫,而是要支持那些真正的维护者。我想说的是:”这是将军和地面士兵之间的区别”,但这意味着更多的参与,而不是我实际看到的。
就好像他从未给过他们(足够的)荣誉,并继续不给他们荣誉或认可。直到他的公关工作变得如此糟糕,他才不得不做出一些象征性的姿态。而他在这些方面一直很挣扎。
剥削的说法并不是针对我们所做的工作。我们做得很开心。社区更好。我们不是为了报酬,而是为了一些东西。不是戴夫不想给我们想要的东西,而是他从未真正关心过我们的需求。
同样,这种感觉也很难用语言表达。我很感激他给我的一切。我也想认识到他对其他同样给予我东西的人所做的一切。我可以同时坚持这两点。
在《Oxide and Friends》播客的一集中,Brian 和其他人与 Kelsey Hightower 讨论了 Hashicorp 更改 Terraform 许可证,将 TF 生态系统中的许多公司排除在外–“我们是维护者,我们可以为所欲为 “的终极举措。凯尔西曾维护过许多开源项目,深知维护者拥有自由的重要性,他们可以将精力集中在自己认为合适的地方,而不用考虑花生围栏的想法。
他的观点是:最终需要的是维护者预先明确他们将如何管理项目。如果你想完全控制你的项目,无视你认为合适的错误和拉取请求,而用户需要接受软件的原貌,这很好,但要把它写进 README,让潜在用户知道他们要做什么。如果你想建立一个社区驱动的治理结构,让人们有途径参与和指导项目,就像 Kubernetes 一样,那也很好,你也应该为用户提供所有这些信息。Terraform 的做法是,他们培养社区参与,以建立一个插件生态系统,然后通过更改许可证来阻止这些插件作者,这种做法 “毒害了开源之井”(他的话),给人的印象是,开放源码软件本质上是善变的,严肃的团队应该对使用它犹豫不决,因为维护者可能会粗心大意地破坏东西。我认为有些公司就是因为 TF 的改变而失败的。
(我也曾在回复中发表过这篇文章,但现在才意识到,我想把它作为最高级别的评论来发表。对不起,我又重贴了,妈)。
我同意作者的很多观点,但前提似乎有点奇怪。什么时候有人说过开源是一种民主?我也没把 “社区 “和 “民主 “联系在一起。我不认为它们有任何关联。民主国家当然有社群,但各种政治和管理制度下也有社群。
我确实认为很多人对开源和开源开发者抱有一种自以为是的态度,这是令人遗憾的(作为一个多年来多次接受这种自以为是的人来说),但我不认为我真的看到过有人认为用户可以对开发者的工作进行投票。
(不过,我记得 Bugzilla 等错误跟踪器曾有过用户可以对错误进行投票的功能,所以过去也许真的有人认为所有开源开发者都会首先解决投票最高的问题)。
总之,我觉得这种帖子是 DHH 可能会写的。我从未与他共事过,但通过阅读他写的东西,以及(从远处)观察他与 Ruby 社区的一些互动,他似乎总是有点不了解社区的实际运作方式。说得客气一点。
> 但无论你选择哪个词,你都应该记住,开源首先是一种程序员之间的合作方式,他们都是为了完成工作而出现的。而不是让娇气的用户获得免费东西或决策席位的权利计划。
在我看来,这完全像是一个人说的话,因为他实际上已经运行了相对流行的开源项目足够长的时间,对那些有意见、有需求但完全没有兴趣贡献任何有价值的东西的人感到非常厌倦。
(除了代码,还有更多的方法,金钱也不是唯一的选择)。
在我看来,”真正让软件运转起来的人 “的项目结构与 “使用软件的人 “的社区结构并不矛盾。每个项目都会有独特的细节,但用户通常会在数量级上超过制作者。
开放源码的确是一种程序员协作方法。任何 “围绕项目的社区 “的概念甚至存在都是完全不同的。
这不是民主,但它是一个社区。分享行为创造了一个社区。
它不是一个社区,就像一个村庄在争论谁应该在公共草地上吃草一样。它是一个社区,每个人都有权使用共享资源,但这并不意味着他们有投票权。
这是一种奇怪的情况,因为对于像牧场这样的天然稀缺物品,我们能做的就是公平地控制它们的使用权,所以我们对社区的直觉来自于两百万年来的经验。
当我们谈论 linux 社区或 rails 社区时,我们谈论的就是这种社区。
有时你甚至不能用代码投票,有时你也不能用钱投票。而那些拿到钱的项目投票过于激烈,最终往往会陷入 Mozilla 的境地,为了营销功能而扼杀了重要或有用东西的开发。
不过,你也可以用 fork 来投票,但这样你就会陷入 “你 fork 了它,你就得维护它 “的境地,而足够大的项目即使是一个小团队也无法妥善维护。例如:常年存在的 ffmpeg fork。
没错,你可以出现并完成工作,然后后悔莫及
遗憾的是,从以往 HN 的主题来看,大多数人的经历并非如此。
一般来说,一两个撰稿人在做所有的工作,让自己的蛋蛋都快碎了,而由于学校制造的压榨欲望,其他人只是被利用了。
然后,成千上万连两块钱都不愿意捐的白吃白喝者和啦啦队骑在他们的背上,要求得到更多的东西。
最后,贡献者们最终会感到厌倦,看到整个项目是多么愚蠢(即不再关心这些人说了什么或对项目的看法),于是项目突然被放弃。
两个人在自我满足的基础上创造了一些东西,成千上万的啦啦队在利用他们,这不是一个社区
除非这两个人(通常核心成员多达 10 人)也在为自己的用途实施项目。
实际上,自由和开放源码软件的存在是为了解决开发者的问题,而良好的用户界面有时只是事后才想到的原因,因为开发者往往才是最终的超级用户。
真正的大项目是个例外,但由于项目规模庞大,最终可能会出现 10 人的情况。这些人通常都是维护者,比如 Linux。除非该项目因用户/开发者不匹配而陷入饥饿,或者被企业利益集团接管,人们开始实施开发者和用户都不想要的东西,从而耗尽能量。(我在这里特别提到了 Mozilla 基金会)。
是的。否则,一半的贡献者会死在家庭里,另一半会死在秘密警察手里。我记得他们曾试图颠覆 linux,一些无关紧要的贡献者指控核心团队中的人性行为不轨什么的。
事实是,人们不会去思考词语的含义及其暗示。他们只是跟着流行走。
尽管销售软件完全符合 GPL 的规定,但由于 99% 的自由和开放源码软件都没有商业化,人们脑子里就有了这样的想法:这是错误的,是对立的。
尽管(关于协作)自由和开放源码软件的唯一要求是源代码相对容易获得,但人们已经习惯了 GitHub 的开发方式,以至于它永远地改变了人们对开源项目的看法。
自由软件的要求是尊重四项基本自由[1],其中一项明确提到了 “社区”。而阐述这四项自由的文章正是以这句话开头的……:
> 自由软件 “是指尊重用户自由和社区的软件。
(我的斜体)
正因为如此,尽管 “自由与开源软件 “有时可以作为一种有用的粗略分组,但区分自由软件与开源软件的必要性是非常重要的。两者并不相同。当然,提交文章的作者只谈论开源。
[1] https://www.gnu.org/philosophy/free-sw.en.html#four-freedoms
尊重社区并不意味着创建社区。自由和开放源码软件允许人们自由合作,而不是强迫人们合作。
好吧,你还必须在开源许可证下进行许可
按照这种逻辑,X/Facebook/Instagram 等不是社区,而是 “生态系统”……毕竟,每个人都能控制自己的帖子。你不能强迫别人发布你想要的东西。”不喜欢<名人>发布的内容?那就去关注其他无数的账号吧。或者开设自己的账户!在这里,你甚至可以使用这个自动机器人作为基础,来发布你想要的帖子”。同时,”无论你选择哪个词,你最好记住,<平台>首先是精英之间的一种合作方式。而不是一个让撒娇的用户获得免费东西或决策席位的权利计划”。
但这些社交媒体平台显然是社区……它们甚至有 “社区准则”。更不用说 Github https://docs.github.com/en/site-policy/github-terms/github-c…
这些平台本身绝对不是社区;它们只是一个虚拟的地点–一个空间–和一些可以形成社区的基础设施。
其中任何一个社区都可以自由制定自己的规则和惯例(例如,我所在的社区公告板小组只允许在周一发布商业帖子),但这些社区对整个平台的政策完全没有影响力。
而且平台经常会对他们的工作产生影响
它们不是社区。社区指南 “是营销的障眼法;这些都是管理层强加的指令,而不是 “社区 “的某种决定。
充其量,Fecebutt 和类似的论坛是可以形成社区的地方,只要管理层容忍它们存在就可以了
> 但这些社交媒体平台显然是社区……它们甚至有 “社区指南”。更不用说 Github https://docs.github.com/en/site-policy/github-terms/github-c…
好吧,如果他们有社区指南……这无疑使他们成为一个社区,笑。
……大概就像《道德准则手册》让你变得有道德一样。(https://www.justice.gov/archive/enron/exhibit/02-06/BBC-0001…)
好吧,让我把话说清楚。这么说,Rails 既不会修补安全漏洞,也不会修补漏洞,因为 Rails 不是一个社区?
任何足够成功的开源项目都会发展出一个围绕自身的社区,但这确实不是一种民主起作用的社区,也不应该期待民主得到实施。正如 DHH 所说,这很好。
这种对开放源代码的描述与亚历山大-巴德(Alexander Bard)20 年前在《网络民主》(Netocracy)一书中探讨的多级结构(plurarchy)概念不谋而合。
在我看来,开源社区不仅只有一个,而是有无数个。
大多数开源项目都是金钱驱动的功利主义。这是好事。开源项目很多。但其中大部分都是依赖于各家公司(即你能叫出名字的所有大型软件公司)的商业利益而运行的。他们支付账单。人们通过开源项目获得报酬,而这些公司则通过这些人施加影响。不管这是什么,它主要不是慈善。
当然,也有很多业余项目和一些理想主义项目。我自己也负责一些小项目。但大多数大型战略项目背后都有公司支持,而且都是他们所需所想。这些长尾的小型项目固然很好,也有很多价值,人们出于各种原因运行这些项目。但是,一旦它们变得有价值,公司和商业利益就会以这样或那样的方式介入。大多数人只是没有很多无偿的时间来捐赠。
无论如何,决策通常都是严格分级的。我们欢迎你分叉、修改,做自己的事情。这就是开源的意义。但我们不欢迎你把自己的修改强行推向上游。要让你的修改被接受,需要上游负责人的审查、共识和协商。大多数情况下,这些人获得这种权力是因为他们在那里,做了大部分的工作,并且胜任这份工作。然后,他们还能获得相应的报酬。在大多数运行良好的项目中,修改是一个相对简单的过程。但当出现冲突时,通常是上游获胜。
Rails 就是一个很好的例子,20 多年前就有很多人开始做与 Rails 相关的工作赚钱。作者是 Ruby on Rails 的创建者,同时也是一家公司的首席技术官,这家公司负责推动 Rails 的发展,而 Rails 框架最初就是在这家公司开发的。该公司可能从与 Rails 相关的工作中赚了不少钱,显然这也让他变得相当富有。这对他来说是件好事。
Ruby 的朋友们,也许这是个愚蠢的问题,但为什么 DHH 在 ruby ~community~ 用户组中仍具有相关性?
我从 2009 年开始使用 Python,而我刚刚发现了两年前创建 Python 的那个人的名字。
你是不是把 Ruby 和 rails 弄混了?DHH 创建的是后者,而不是前者。
Ruby与Rails。请阅读关于他的完整文章。
当然,他是创造者,我明白这一点。但从我听到的他的立场和部分 “社区 “不喜欢他的想法来看,是什么阻碍了有人做一个分叉,比方说 Ruby on Trails,并获得一个更受社区驱动的方法?
我想什么都没有,这也加强了 DHH 的观点。
我认为 DHH 也试图代表 ruby 而不仅仅是 rails。
不,这两个 “社区 “在很大程度上是不同的。它们有不同的理念和不同的领导层。
请停止发布 DHH 的废话。不要放大这个巨魔的内容。
杰森-弗里德(Jason Fried)真的需要管管他那只爱叫的狗了。这对公司很不利。
一方面:是的,没有比这更真实的话了。你想要添加新功能?想谈谈项目应该如何改变方向?想强加新规则?来点权力游戏?是的,开始为项目工作,实施你希望看到的改变/功能。
另一方:不:当你提供的软件被广泛使用并为人们所依赖时,你就自动创建了一个社区,在这个社区里,修复错误是一项义务。你的软件已经成为其他人软件栈/生活中的一块基石,因此这些人和他们与你的软件有关的问题也成了你的问题。不管你愿不愿意。
在过去的几十年里,躲在开源背后不修复错误已经多次成为破坏交易的行为,以至于我都数不清了。不是每个人都懂得修复错误所需的语言,也不是每个人都了解一个项目中能够修复错误的依赖关系。因此,”修复 “一个错误可能会产生十个新的错误,使事情变得更糟。
更不用说当你试图修复漏洞,但源代码因为不好而不被上游接受时会发生什么,这可以理解,但仍然会给你留下一个软件的上游版本和你修复了漏洞的补丁版本。
> 不是每个人都懂得修复错误所需的语言,也不是每个人都了解修复错误所需的项目依赖关系。
正如过去三十多年来几乎所有开放源代码许可证的顶部都用大字体标明的那样,使用免费东西的人要对使用时发生的一切负责。这就是免费的原因!
如果你能自己支持它,那很好。如果你不能,那么你可能需要雇人来做。如果这些选择对你没有吸引力,那么你也许应该买一个不会明确告诉你只能靠自己的替代品。
开放源码软件的存在是为了让合理、负责任的社区成员能够相互分享工作成果,而不至于陷入相互指责、承担责任以及隐藏源代码或阻止修改等防御性做法的鼠窝。
这是一个双面合同,用户一方的合同非常明确地规定,他们要对自己的选择负责。
> 当你提供的软件被广泛使用并为人们所依赖时,你就自动创建了一个社区,在这个社区里,修复漏洞是一项义务。
不,你没有。一些开源软件生产商可能会选择承担这一额外负担,但无论有多少人使用你的软件,免费提供软件都不会自动产生这样的负担。作为用户,如果你不喜欢这笔交易,唯一的办法就是不使用该软件。你无权要求已经为你提供免费服务的人提供更多的免费服务。
有人免费提供软件的情况有多少?
我的意思是,通常情况下,你必须推广软件,而通过推广,你就产生了一种义务–如果你在 GH 上写下一些代码,并在阅读器中写下 “我不在乎它,要么接受它,要么离开它”,那么没有人会使用它。
要创建 “广泛使用的软件”,你必须积极推广,并表明你关心它。通过表明你关心来进行推广,这就产生了义务。当然,义务并不是让人们有权告诉你该做什么,而是要保持体面,比如修复明显的安全漏洞。
首先,大多数用户确实是通过搜索关键字和自行评估热门搜索结果来找到开源软件的。大多数开发者不知道如何有效推广自己的项目。任何形式的营销都只在最引人注目的项目中发挥作用,其中许多项目都是由商业赞助的。
其次,即使开发者做了一些工作来让世界了解他们所分享的内容,这些工作也是在项目许可条款的范围内进行的。
在推特上发布 “我做了这个东西,快来看看吧!”并不能免除用户阅读许可条款的义务,也不能免除用户理解许可条款中没有任何承诺的义务。
是的,简单地说,在推特上发布 “我做了这个东西,看看吧!”- 并不会产生什么影响,但在会议上发布有关图书馆项目的信息、为项目制作 discord 或 slack 却会产生影响。
这就和微软/谷歌或其他营利性公司一样–你得到的也是 “软件原样”,即使 Excel 炸毁了你所有的数据,MSFT 也不承担任何责任。但人们仍然希望他们能修复那些会导致数据丢失的错误。
> 这与微软/谷歌或任何其他营利性公司一样–你得到的也是 “原样软件”,即使 Excel 炸毁了你所有的数据,MSFT 也不承担任何责任。但是,人们仍然期望他们会修复会导致某些人数据丢失的错误。
问题是我为 Excel 付了钱,所以我期望并要求他们修复漏洞!如果我免费使用一个开源库,我无权要求他们做任何事,我可以希望他们修复漏洞,我也可以贡献自己的力量修复漏洞,但我无权占用开发者的时间或注意力。
> 通过展示你的关心来进行推广,从而产生义务。
通过承诺履行某项义务来促进,就产生了义务。我不确定 “表明你关心 “是否足够具体。
无论如何,你的立场在转变。之前你说,只要提供软件并让足够多的人使用它,就产生了义务。现在你却说 “推广 “会产生义务。如果对 “推广 “一词进行适当的解释,你最终会同意我的立场:软件作者要么明确承诺提供支持,要么没有。如果有,他们就有义务;如果没有,他们就没有义务。
> 当你提供的软件被广泛使用并为人们所依赖时,你就自动创建了一个社区,在这个社区中,修复错误是一项义务。
你的意思是说,”得寸进尺 “不仅仅是对不幸现实的描述,更是一种道德要求。让他们得寸进尺,他们就有权得寸进尺。
你难道看不出这种道德框架有多大的破坏性吗?如果赠送免费作品能让任何从免费作品中获益的人立即有权获得任意数量的额外免费作品,那么对有意投稿者来说,唯一合理的做法就是根本不玩这个游戏。这真的是你想生活的世界吗?
你完全错了,而且这真的再简单不过了。看看你正在使用的软件的许可证就知道了。你在使用该软件时已经同意了该许可证。它的内容类似于
> 本软件 “按原样 “提供,不提供任何明示或暗示的保证,包括但不限于适销性、特定用途适用性和非侵权保证。在任何情况下,作者或版权所有者均不对任何索赔、损害赔偿或其他责任负责,不论是合同诉讼、侵权诉讼还是其他诉讼,也不论是因本软件或本软件的使用或其他交易而产生、产生于本软件或与本软件的使用或其他交易有关的任何索赔、损害赔偿或其他责任。
这一点甚至没有被掩盖在堆积如山的法律条文之下。开放源码软件许可证通常非常简单。你完全没有理由不明白软件提供商对你没有任何义务。你只需要读几段文字就可以了。
> 另一方:不:当你提供的软件被广泛使用并为人们所依赖时,你就自动创建了一个社区,在这个社区里,修复错误是一项义务。你的软件已经成为其他人软件栈/生活中的一块基石,因此这些人和他们与你的软件有关的问题也成了你的问题。不管你愿不愿意。
不,绝对不。我编写和发布的软件不附带任何担保,也不保证任何软件都适合使用。如果人们愿意使用并觉得有用,那很好。如果他们不愿意用,那也没关系。如果他们使用后发现有问题,我很乐意接受错误报告,但我不是为他们工作,对他们没有义务。我会处理漏洞和改进工作,因为我想这样做,因为这很有趣,因为我关心我的工作。但当它不好玩或我不关心时,我可能就不会去做,这是我 100% 的特权。
> 不是每个人都懂得修复 bug 所需的语言,也不是每个人都了解修复 bug 所需的项目依赖关系。
那就太倒霉了。让我们重新构思一下。假设你决定花钱购买甲骨文公司的专有数据库。然后你发现了一个漏洞。你有权得到什么?充其量,我认为你有权要求退款。甲骨文公司实际上没有义务为你修复这个错误。但甲骨文公司很可能希望修复该错误,因为他们可能希望留住你这个客户,并发展和维护他们的声誉,即他们的软件值得人们花钱购买。
当然,一些开放源代码开发者也经常想维护自己的声誉。有时,为了维护他们想要维护的声誉,他们会做一些吃力不讨好的工作,修复一些恼人的错误,添加一些他们并不在意的功能……好吧,有时这也是必要的。如果这是他们的选择,那也没什么。
但如果有人只是为了好玩而做东西,与他人分享,并继续只做他们觉得好玩的事情,也是可以的。你可以看不起这样的人,或对他们感到沮丧,或选择不使用他们的软件,但你无权从他们那里得到任何作品,他们也没有义务为你提供任何东西。
那么,永远不要使用自己无法编写或维护的依赖项。这其实很简单。一旦你使用了依赖关系,你就拥有了该代码在你的项目中的所有权。如果你需要修改,而依赖关系的所有者不愿意做,那么就分叉依赖关系。如果做不到这一点,就不要使用该依赖关系。
开放源代码的实际优势在于,你可以访问代码、创建分叉并在出现问题时自行维护。
项目中的 Depencies 并不是指第三方库,而是指功能 A 或结构 B 的变化如何影响软件其他部分的知识。对代码的改动看似没有任何副作用,但三个月后却发现这些改动引发了巨大的安全问题。
顺便说一句:如果只有当我知道自己编写所有内容所需的所有语言时,才会选择使用开源软件,那么整个事情就失去了意义。
不,没有。开源软件并不意味着别人为所有软件提供免费支持(通过了解编写软件所需的所有语言)。它意味着你可以选择任何你想要的供应商为你提供软件。开源从来都不是为了免费获得软件,而是为了防止被供应商锁定。
我认为你提出了错误的二分法。你似乎认为只有两个极端的选择,要么是
a) 开放源码开发者有义务为其用户提供他们遇到的任何错误的修复程序,或者
b) 开放源码开发者永远不会为用户做任何事情,因此任何使用开放源码的人都需要有能力维护和修改他们使用的所有开放源码软件。
我希望你不是真的相信这些,假设你不相信,我希望你不是在恶意争论。
因为这两件事都不是真的。开放源代码开发者通常会希望修复软件中的错误,并添加人们认为有用的新功能。用户不必假定他们必须对自己使用的所有东西拥有所有权并自行维护。但开源用户无权要求开发者提供任何东西。有时,如果用户遇到了问题,他们就必须自己解决,因为有时这些问题并不会得到解决(要么永远得不到解决,要么在用户需要的时间内得不到解决)。任何使用开源软件的人都应该明白这一点。
我自己也是这么做的:我在工作中(以及在个人项目中)采用了开源库,发现了其中存在的问题,修复了这些问题,并向维护者发送了 PR(并维护和使用我自己的分叉,直到这些 PR 被合并并发布新版本)。有时我发现的 bug 似乎需要对代码有更深入的了解,我就会提交问题,并提供尽可能多的信息来帮助维护者重现问题。有时,这些错误得到了修复,这很好。但有时并没有。这确实令人沮丧,但这些维护者对我没有任何义务。从那时起,我有三个选择:a) 潜下心来,花时间把软件学好,这样我就可以自己修复漏洞;b) 接受漏洞的存在,并决定这样就可以了;或者 c) 放弃该软件,寻找或编写其他符合我需求的软件。
如果你决定依赖别人的开源作品,那么以上这些都是你要承担的。如果你不喜欢这样,那么你有两个选择:a)自己编写所有你需要的东西,或者 b)为别人的工作付费。就是这样。你无权要求任何开源开发者提供任何东西。
对于我维护的任何项目……任何认为我有义务做他们想要我做的任何无偿工作的人,都会立即被禁止使用任何交流渠道来提出这些要求。
> 好吧,永远不要使用自己无法编写或维护的依赖项。
我想问一下,你使用 Linux 系统吗?
(尤其是 Linus:对维护者很苛刻,但非常尊重用户空间)
我有点觉得这是个不靠谱的原生论证。
Linux 内核突然变得完全无人维护的可能性几乎为零,所以不值得考虑。
没错,如果你在 Linux 上运行某些程序时遇到了内核漏洞,你当然可以报告它,但唯一能保证的是你自己发现并修复了漏洞。这些内核开发者都没有义务帮助你。实际上,很多人都想帮助你!但这不是任何人都有权得到的。
我曾在一些公司工作过,那里的员工(包括我自己)有能力,有时也不得不深入内核解决问题。通常情况下,这些内核来自一些随机芯片组制造商的 BSP,内核已经过时一年,没有 Linux 开发人员愿意碰它。不过,即使我们运行的是绝对最新的内核版本,我们仍然可能会在向上游报告问题的同时潜入内核进行调查。
好吧,我承认我对这种 “这其实很简单 “的语气有点恼火。
我对此的实际看法是:在《Oxide and Friends》播客中有一集很精彩,Brian 等人与 Kelsey Hightower 讨论了 Hashicorp 更改 Terraform 许可证,将 TF 生态系统中的许多公司排除在外–“我们是维护者,我们可以为所欲为 “的终极举措。凯尔西曾维护过许多开源项目,深知维护者拥有自由的重要性,他们可以将精力集中在自己认为合适的地方,而不用考虑花生围栏的想法。
我同意他的观点,即最终需要的是维护者预先明确他们将如何管理项目。如果你想完全控制你的项目,无视你认为合适的错误和拉取请求,而用户需要接受软件的原貌,这很好,但要把它写进 README,让潜在用户知道他们会遇到什么。如果你想建立一个社区驱动的治理结构,让人们有途径参与和指导项目,就像 Kubernetes 一样,这也很好,你也应该为用户提供所有这些信息。Terraform 的做法是,他们培养社区的参与度,以建立一个插件生态系统,然后通过修改许可证来阻止这些插件作者,这种做法 “毒害了开源之井”(他的原话),给人的印象是,开放源码软件本质上是善变的,严肃的团队应该对使用开放源码软件犹豫不决,因为维护者可能会粗心大意地破坏东西。我担心像 OP 这样的评论会加深这种印象。
就职业而言,我是 Pachyderm 的开发者之一,这是一款开源版本控制和数据管道工具。
>(莱纳斯,特别是:对维护者可能很苛刻,但非常尊重用户空间)
是的,他很尊重用户空间。但这并不是因为他有义务这么做。而是因为他选择这么做,因为他有能力这么做。如果他明天就不这么做了,当然,很多人将不得不争相效仿,但这仍然取决于他。
是的,但作者提供代码也是为了获得一些好处。其他人会在更多情况下使用它,发现错误,最好还能提供分析和修正。
如果项目成员不欢迎在一个积极开发的项目中这样做,而他们自己也在使用,有时是在相当关键的情况下,那就有点不可理解了。
在一个 SIP 代理项目中,我发现了由于在多进程背景下共享内存滥用 OpenSSL API 而导致的相当严重的崩溃错误,以及导致使用意外指针值的竞赛条件,该项目最近甚至委托进行代码审计,这让我觉得他们很关心代码的质量。
我为这两个问题提供了分析和修复建议。但一个多月过去了,没有任何与该项目有关的人对此作出回应。因此:
1) 纯粹从技术上讲,这没有问题…我可以使用自己的补丁,调试项目并解决问题。
2) 令人担忧的是,这让我对项目的信任度降低。还有哪些人的严重错误修复会因为他们在 github 上使用的 “问题自动关闭 “机器人而被遗忘,并且无缘无故地在代码库中徘徊,而修复作者只是不想每隔 7 天就对问题发表一次评论,从而使问题更加严重?
3) 有多少这样的开发人员只是为自己保留崩溃程序和安全修复程序,因为他们意识到项目所有者的反应并不积极,而且花 2 倍的精力向别人描述问题,而不是自己修复后继续前进,也不值得多花精力。
> 当你提供的软件被广泛使用并为人们所依赖时,你就自动创建了一个社区,在这个社区里,修复错误是一项义务。
如果你测量了一些盐的溶解度并将其公布,而你的数据被广泛使用,人们依赖于它,那么你是否因此有义务重复你的实验,使其更加精确,纠正错误的测量结果,并将其扩展到更多的盐类?
如果你的工作的用户开始互相交流、互相帮助,他们可能会成为一个社区,但这仍然没有强加给你为他们做更多工作的义务。
> 当你提供的软件被广泛使用并为人们所依赖时,你就自动创建了一个社区,在这个社区中,修复错误是一项义务。你的软件已经成为其他人软件栈/生活中的一块基石,因此这些人和他们与你的软件有关的问题也成了你的问题。不管你愿不愿意。
也许你认为他们有道义上的义务,但根据最流行的开源许可证,他们没有法律义务修复错误或对错误造成的损失负责,无论人们是否依赖他们的软件作为关键软件。
摘自 MIT 许可证:
本软件按 “原样 “提供,不提供任何明示或暗示的保证,包括但不限于适销性、特定用途适用性和非侵权保证。在任何情况下,对于因本软件或本软件的使用或其他交易而产生、引起或与之相关的任何索赔、损害或其他责任,无论是合同诉讼、侵权诉讼还是其他诉讼,作者或版权所有者均不承担任何责任。
摘自 GPL 许可证:
除非另有书面说明,否则版权持有者和/或其他各方将 “按原样 “提供本程序,不提供任何明示或暗示的担保,包括但不限于适销性和适用于特定用途的暗示担保。本程序的质量和性能的全部风险由您承担。如果本程序被证明存在缺陷,您将承担所有必要的服务、维修或纠正费用。
12.除非适用法律要求或书面同意,否则在任何情况下,任何版权持有者,或在上述允许的情况下修改和/或重新发布本程序的任何其他方,均不对您的损失承担责任,包括因使用或无法使用本程序而造成的任何一般的、特殊的、附带的或间接的损失(包括但不限于数据丢失或数据不准确,或您或第三方遭受的损失,或本程序无法与任何其他程序一起运行),即使该持有者或其他方已被告知此类损失的可能性。
如果您依赖开源软件,风险自负,因为软件作者对使用其软件的用户不承担任何义务,而且一直都有明文规定,只是人们略过了而已。
> 另一方面:不:当你提供的软件被广泛使用并为人们所依赖时,你就自动创建了一个社区,在这个社区里,修复错误是一项义务。你的软件已经成为其他人软件栈/生活中的一块基石,因此这些人和他们与你的软件有关的问题也成了你的问题。不管你愿不愿意。
不,就是不。