周末跟大伙聊聊“开源项目作者的态度重要吗?”这一话题

2022-03-20 10:19:24 +08:00
 JamesChen

本文偏长的,但无任何推广内容,大伙放心食用。 另外,不知道哪些字被屏蔽了,因此换成了拼音。

申明:由于现在“开源项目”一词普遍用法更偏向于其广义上的定义,即几乎只要是公开源码 /文档的项目,人们就自称或称其为“开源项目”,但其实“公开源码的项目”离严格定义上的开源项目还相差甚远,其具体定义读者可以阅读The Open Source Definition本文在不特指的情况下,沿用如今普遍使用且广义上的“公开源码 /文档的项目”的定义

前段时间在读梁光耀的《图解实用伦理学》,这书通俗易懂,举的例子也非常有趣且接地气,唯独深度上差了些意思,可能就是为了照顾我这样的小白吧。而开源圈总是有“开源态度”相关的话题,这类话题真算是经久不衰了,每年都有人开新话题进行讨论,但感觉无数人的讨论在深度上都差了点,让人看得也不够过瘾,于是想试着从伦理学角度并结合长期在开源圈的观察来简单聊聊这话题。

评价开源作者的“道德问题”,或者说是“开源项目作者的态度重要吗?”,感觉有两个因素非常关键:一是从康德伦理学角度来看,就看看开源作者的态度,动机是好的,那就无可非议,动机不行的,那就算“不道德”,这类评价方式好像很像是自由软件强调人 quan 的评价方式?;二是从功利主义来看,看看开源作品的价值,不谈动机,只谈结果。我通过这两个角度,把各开源项目分为了 6 类:

当然,一位作者是否有态度,项目是否有价值,有时候并不是那么绝对的,大家评判不一,甚至还能同时存在“即有态度,又没态度”的矛盾状态,态度也能随着时间不断变化,我感觉也正是因为这些模棱两可的状态,让网上吵个半天也聊地不够透彻。这里先简单谈下什么是“有态度、无所谓的态度、态度恶劣”、“有 /没价值”:

先从简单的“态度恶劣且没价值”入手吧。我初想“态度恶劣没价值”的东西怎么会有人关注呢?但转念一想,GitHub 的中文榜单很多时候还真就这样(我最近没关注了,我是被恶心坏了,整出 PTSD 了),都是一堆被无数人做了无数次的电商 /博客项目,被人抄了无数次的面试题,很多作者是开个源,维护几周,刷完面试 /公众号 /KPI 就跑路了,这些作者就像是无生气、无创造力的机器人(不知道教育在这里做了多少“贡献”),又像是一群西西弗斯,不断重复地把山下的巨石滚上山,项目 README 底下也不忘贴几个公众号进行收割...这类项目让我体会到了什么叫做 PTSD ,如今当我看到带有“电商 /博客”关键字的开源项目,人就本能地就泛起了厌恶之感。

从功利角度来说,这些项目确实推广了一些被抄了无数遍的有用或无用的知识。但从功利主义的另个角度来看:

综上,大量的无价值开源项目其实是在稀释开源圈的价值,模糊所有人的价值观,劣币驱良币。就算从功利主义角度来说,当今存在大量这样高关注度+无价值的项目也是站不住脚的。我个人也因此戏称这样的圈子为“开源娱乐圈”( PS:这也是我个人虽然天天主动做开源,但却说自己对开源圈没什么兴趣的原因之一)。

一些开源作者会以“自由主义”来为自己正名,类似于“我开源攒了这么多关注,我自己做公众号卖广告也搞到钱了。我虽然这项目没什么原创内容,做的是电商 /博客 /...,但这关你 P 事,我怎么做是我的自由,你眼红了?”,但我的回答同上,自由是有前提的,那就是“不伤害原则”,这类开源项目的价值会以“圈子劣化”、“更多人做这类没价值的项目”、“倒逼有价值项目作者弃坑,转去搞其他来钱快的项目”等现象而作为代价,损人利己的自由是很难站得住脚的。

说完“态度恶劣且没价值”的,再聊下“无所谓的态度或有态度,但项目没价值的”,这个我感觉完全 OK ,所有人都是这么过来的,只要不要有“卧槽,我这么牛逼,你们怎么不关注”的心态就行。

还有就是“不管作者啥态度,反正项目就是有价值”。这种我感觉就算作者态度恶劣,但只要不是抄袭 /套皮 /发布的是别人家的源码,其实也还 OK ,诸如要是一老哥当初给我“你这代码写得是真的烂,你算法也太菜了,我给你写了一个为实现敏感词过滤的基于双数组 Trie 的 AC 自动机算法,你拿去用吧”,我不会吐槽这老哥,我会感激不尽,并想办法给这老哥发个红包。

综上,我个人在开源圈更认同功利主义,而非像自由软件那样强调人 quan 、更像是奉行康德伦理学。我觉得只要是有价值的项目,作者的态度其实不太重要,就算作者是为了刷 KPI/卖广告等等,我都觉得完全 OK ,只要不过红线即可。但没价值的项目,作者的态度就重要了,态度恶劣的应该谴责,态度正向 /无所谓的就无可厚非。

各位 v2exer 又觉得如何呢?欢迎各位大佬评论与指正。

1990 次点击
所在节点    开源软件
8 条回复
coderluan
2022-03-20 10:47:02 +08:00
个人认为,目前并没有一个简单高效的方法,来追责违反开源协议这一基本原则的前提下,开源领域目前仍是法外之地。在法外之地谈论态度是否端正,没啥意义,楼主最终谈论到的手段,也是“应该谴责”,但是谴责有什么用......
cmdOptionKana
2022-03-20 11:12:15 +08:00
"综上,我个人在开源圈更认同功利主义" —— 同意。

“我觉得只要是有价值的项目,作者的态度其实不太重要 …… 只要不过红线即可。” —— 既然有红线,证明你还是认为态度重要。同时延伸出另一个问题:每个人的红线高低不同。

“没价值的项目,作者的态度就重要了,态度恶劣的应该谴责” —— 这点我很不理解,比如实体店卖东西,有价值的才有人关注,在现实生活中没价值的就是垃圾,去垃圾堆里谴责垃圾不是浪费时间吗,而且画面也太滑稽了吧,你判断它没价值,但还花时间精力去谴责。
Buges
2022-03-20 11:34:22 +08:00
态度当然重要。比如某项目作者安全意识极差,对安全不屑一顾。代码里漏洞百出,没人有精力对其一一审计,这样的项目自然是不要使用的。
JamesChen
2022-03-20 11:52:26 +08:00
@coderluan 关于“谴责有什么用”,1. 判断一些行为是否道德; 2. 谴责有什么用,该做什么实际行为来抵制。这是两个不同的话题,前者可以是伦理学话题,后者跟伦理学就没啥关系了。本文只讨论前者,要是哪位大佬对后者话题有啥有趣见解,可以再单开一篇,再一起聊聊。

@cmdOptionKana 关于“我个人在开源圈更认同功利主义...”这段。个人看法不是只有 0 和 1 ,还可以有中间的数,我个人也是既看结果,也看态度,只是结果偏重会大些。因为如果一个项目很有价值,但却是把别人家的代码开源,或者是抄袭 /套皮的项目,过了红线,那自然要谴责。这和我更认同功利主义并不冲突。

关于“没价值的项目,作者的态度就重要了,态度恶劣的应该谴责”。1. 没价值的项目并不只在垃圾堆(比如各种只卖广告的公众号里),还在全球最大程序员开源网站 GitHub trending 上,挤占本不属于它们的空间,它们的危害上文已经聊过了,不累述。2. 大量这些没价值的项目,尤其一些靠卑劣手段(刷 /买 stars )挤占诸如 GitHub trending 的空间,肯定是要谴责的。并且就是因为很少人谴责,给这些项目推波助澜,放任其发展; 3. 我理解你说的“去垃圾堆里谴责垃圾不是浪费时间吗”,其实更像是去别人卖广告的公众号里去谴责它们,但我也不干这种事,我也不会关注这些项目,看过一些源码都是培训班风格( PS:培训班风格代码也是很有意思的话题),但对这样的现象的谴责的态度必须表达出来。

另外,感谢老哥们有意思的回复。
coderluan
2022-03-20 12:26:48 +08:00
@JamesChen ”谴责有什么用......(显然没用)“,不是”谴责有什么用?(该怎么用)“,或者简单点,按你说的,判断一些行为是否道德,我认为在法律缺失的前提下,讨论道德问题缺乏现实意义,只是表达了一下自己跑题的观点而已。当然我不是说这个话题讨论的没意义,思考的过程本身就是意义,只是说这个讨论的结果,无论是什么,其实没区别,都没用,更不可能单开贴聊了。
secondwtq
2022-03-20 13:40:09 +08:00
感觉楼主写得很不错,很少能在本站看到这么详细的思考。

个人观点:
楼主认为的所谓“态度恶劣且没价值”的项目,在他们的关注者看来,其实可能恰恰是“态度好且有价值”的项目。楼主强调了“抄袭”的问题,但是这里面存在信息不对称的问题,在抄袭被发现并曝光之前,普通人不可能低成本获得“这个项目是否抄袭了”这个问题的答案,所以这个考量基本没有意义,我觉得一个项目“有价值”,那我就会关注,不会管它有没有抄袭。(并且我相信大多数抄袭行为是不会被发现的)
这种项目被关注我认为更多是个 marketing 的问题。楼主这个“关注”和“价值”的理论我觉得很像商品“价格”和“价值”的概念,不同人对“价值”的判断不同,但是“价格”是绝对的。商家想要提高销售量和销售单价,不仅要做研发,还要做好包装。
同理一个项目获得多少流量,它包装的怎样,往往比它本身“价值”多少更重要。或者,按照商业规则来说,营销和研发都是商家所定义的“价值”的一部分——商家做的事情不是提高产品本身的“价值”(何况这个“价值”并没有明确定义),而是让它“看起来更有‘价值’”,无论是通过什么手段。
想想各种服装、日化品、3A 游戏之类的东西的“价格”里面,营销成本占多少,作为消费者而言,我肯定希望你不要搞这些乱七八糟的东西,把价格降下来。但是大家明知道少营销能获得竞争优势或者更多的利润(换到开源项目里面就是可以用更多精力去优化项目),却还是投大量的钱在营销上,说明这东西确实有用。而如果营销可以制造出一种“态度好”的“假象”的话(烫知识:立“人设”,讲“品牌故事”,吹“企业责任”是营销的常用手段),这东西“态度”到底好不好就无所谓了。
有一个理论大概意思是道德底线低的人相比道德底线高的人可以运用的手段更多,如果野心再大一点的话就在竞争中比道德底线高的人有优势,最后导致爬到金字塔上面去的都是道德底线低的人。如果一个项目只是做 feature ,修 bug ,优化代码的话,不“成功”简直是太正常了。在这方面我觉得程序员群体整体还是太嫰,真要谈下限的话大家应该也知道外面那些幺蛾子比什么开源娱乐圈可好玩多了。做得最好的开源项目,往往是自己质量过硬,推广和运营也到位的。

还有一个因素是互联网时代的特色,就是人们可以访问的信息量从普遍稀缺变成了指数爆炸(还是存在局部稀缺,但是一般人不会关注),这样导致“收集、挑选、过滤信息”这个事情,往往比信息“本身”更有“价值”。平台类企业的成功乃至垄断就是典型,互联网各领域巨头,包括 GitHub 本身在内,80% 都是干这个活的,而我们都知道这些平台上的内容其实都不是平台自己创作的(哪怕部分平台会 claim 这些内容的权利)。这种“收集、挑选、过滤”的产品其中一部分可能做得不太好,但是如果说对这种东西的需求是一直存在的,最有效的应对方式不是什么“谴责”,而是做一个更好的去抢它的位置——对于开源项目尤其如此,平台企业可以反垄断,开源项目不能。

另外所谓 Markdown 项目天然就是比其他项目更有优势,比如我用 9527 语言开发了一个项目,其他人要关注这个项目,最常见的情况就是这个项目能解决 TA 的某个问题,而一个项目是不可能解决所有人的问题的,如果是一个库或者需要贡献就更糟糕了,这一般需要 TA 必须是 9527 语言的开发者。
Markdown 项目一般会从零开始给你讲一个东西是怎么回事,哪怕是一个冷门语言也会简单解释一下出现的语法。自己解释不清楚的东西也会给个链接告诉你哪里能了解。这样很难做特别深入的东西(大多数关注多的 Markdown 项目都是浅尝辄止),但是所有人都能去凑个数,看不懂门道也能看个热闹。
大多数开源项目,就算是比较有名的,很多连注释都懒得写,连 design doc 都没有的也大有人在。另外 GitHub ,或者说广义的程序员使用的软件和工具生态环境,对 Markdown 一般都比对编程语言更友好——Markdown 能直接以合适的格式渲染在 GitHub 页面上,title 和 bullet 能够描述出有序的结构,内容组织方式更贴合人脑而不是计算机。而另一方面,虽然几乎每天都有新的开发工具出现,但是大部分代码存在一些天然问题:
* 重点不突出。一个文件夹下面放 114 个模块,哪些是核心模块,哪些是去掉也影响不大的模块?一个函数 114 行,哪些行是边界条件,哪些行是核心算法?这些内容有相关经验的人可以自己推出来,但是这需要“有相关经验”,还需要花精力去看,大部分人不具备这两个条件。
* 组织不灵活。组织良好的项目需要遵循分层、模块化等原则。但是你横向做得清晰了,纵向就难做了——想要了解实现一个功能的核心逻辑,需要跳无数个模块和函数,项目稍微复杂一点必然会在大脑中造成大量的 cache miss 。Markdown 项目允许作者先简单描述一个猴版实现原理,然后再详细展开。
* 浏览和使用困难。Markdown 通过链接就能实现跳转,而 GitHub 目前仅仅对部分语言实现了简单的查找定义、查找引用等功能,搜索功能也有局限,甚至就连浏览目录结构都不好用(每改变一次目录都是一组 Web 请求)。把代码 clone 下来用 IDE 会方便许多,但是这样成本太高了。至于注释之类的问题之前说过了就不重复了(还有 Markdown 能插图,代码一般只能迫真 ASCII Art )。
虽然大家都在说“代码是给人看的,不是给机器看的”,但是这里面的“人”其实只包含自己的 collaborator 。从外人的角度看,Markdown 项目在“用户体验”上赢麻了,自然 Markdown 项目的“态度”更好,“价值”更高。
JamesChen
2022-03-20 15:34:47 +08:00
@secondwtq 感谢老哥的回复,看到你这回复,我就觉得我这贴发的值了,也引发了我进一步思考。
1. 关于“楼主认为的所谓“态度恶劣且没价值”的项目,在他们的关注者看来,其实可能恰恰是“态度好且有价值””。
很在理,我觉得主要是一些新人正经开源社群混的少,而且很多人还只玩 gitee ,心中没有明显的好坏标准(而给个基本的道德标准正好也是本文的意义之一,本文算是抛砖引玉吧)。

比如一些国外‘既又态度,又有价值“的开源项目,如 MongoDB 、Redis 。它们虽然都有商业版,但社区版大伙都看得出是用心做的,且功能也都非常完整,没有故意残缺几个关键功能。另外,MongoDB 切成 SSPL 协议,也得苦口婆心地解释为什么,不会无视社区。

另外,国内的 TiDB 、ant-design-vue 也不错,能看出团队在用心写文档+维护。我为表尊重,前几天才给 ant-design-vue 项目捐了 100 美金。相比,一些”开源“项目为了搞钱,而文档收费 /残缺社区版,完整商业版等等,摆明就是把开源当噱头,逼着用户买收费版,我把这些所谓的”开源“项目叫做”伪开源“。关键不少这些”开源“项目还没什么价值,其实 GitHub 上已经有很多更好的真开源项目(作者有态度,项目有价值),但它们就是靠这个信息差赚钱。

2. 你提到的抄袭问题,确实也是,小抄袭不容易发现,我文里主要是先简单设想诸如《京东被指抄袭开源程序_SeaweedFS 》这种抄袭团队已经不要脸地大批量抄袭的情况。甚至还可能反打一筢的情况(这种恶劣的情况,我看很多 v2exers 也发过类似的帖子了),这种行为开源社区必须得有个明确地表态,back up 原创作者,并让这些不要脸的团队 gun 出去。

3. 关于营销问题,我觉得如果营销只是在获取项目”德配位“的关注度是 OK 的。这也是我个人虽然勤快做开源,但基本不推广自己开源项目的原因(在这个小圈子,项目虽然就这些 stars ,但我觉得还行了,先踏实做事,等未来进入了一个新阶段再谈推广)。坏的营销比如《阿里 OceanBase GitHub 送礼刷 Star 引争议,CTO 致歉》、又或者 V2EX 偶尔能看到的,一些老哥频繁发帖,甚至是标题党(标题说一件事,点进帖子一看,标题的内容基本啥都没说,其实 OP 就是为了推广自己的公众号 /开源项目等)。另外,我觉得大厂开源项目做得推广,大部分态度还算 OK ,基本也就推广一小阵子,也不算是过界,“德配其位”。只是一些面向 KPI 开源的态度不行。

4. 我一般讲”Markdown 项目“时,习惯性当作”没啥价值的纯文档项目“来说,比如最常见的被人在 GitHub 上抄了几万遍的面经项目,这类项目有几个的话,那非常好”作者有态度,项目也有价值“,但成千上万这样抄来抄去的项目,那就是污染了,大部分作者是”没态度“,文档千篇一律,也没价值。你提到的 Markdown 好像类似于”项目的文档写得细致 /用心“,这个我也认为算是态度好,我个人做开源也是本着这方向去的。

最后感谢老哥用心+很有意义的回复。
1611499758wuhao
2022-03-20 18:29:37 +08:00
都白嫖了,谈个锤子

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/841588

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX