本文偏长的,但无任何推广内容,大伙放心食用。 另外,不知道哪些字被屏蔽了,因此换成了拼音。
申明:由于现在“开源项目”一词普遍用法更偏向于其广义上的定义,即几乎只要是公开源码 /文档的项目,人们就自称或称其为“开源项目”,但其实“公开源码的项目”离严格定义上的开源项目还相差甚远,其具体定义读者可以阅读The Open Source Definition。本文在不特指的情况下,沿用如今普遍使用且广义上的“公开源码 /文档的项目”的定义
前段时间在读梁光耀的《图解实用伦理学》,这书通俗易懂,举的例子也非常有趣且接地气,唯独深度上差了些意思,可能就是为了照顾我这样的小白吧。而开源圈总是有“开源态度”相关的话题,这类话题真算是经久不衰了,每年都有人开新话题进行讨论,但感觉无数人的讨论在深度上都差了点,让人看得也不够过瘾,于是想试着从伦理学角度并结合长期在开源圈的观察来简单聊聊这话题。
评价开源作者的“道德问题”,或者说是“开源项目作者的态度重要吗?”,感觉有两个因素非常关键:一是从康德伦理学角度来看,就看看开源作者的态度,动机是好的,那就无可非议,动机不行的,那就算“不道德”,这类评价方式好像很像是自由软件强调人 quan 的评价方式?;二是从功利主义来看,看看开源作品的价值,不谈动机,只谈结果。我通过这两个角度,把各开源项目分为了 6 类:
当然,一位作者是否有态度,项目是否有价值,有时候并不是那么绝对的,大家评判不一,甚至还能同时存在“即有态度,又没态度”的矛盾状态,态度也能随着时间不断变化,我感觉也正是因为这些模棱两可的状态,让网上吵个半天也聊地不够透彻。这里先简单谈下什么是“有态度、无所谓的态度、态度恶劣”、“有 /没价值”:
“有态度”主要指开源作者有责任心、有真奉献精神、做事踏踏实实,主动性强。补充:大部分开源 License 都不要求开源作者负有任何义务。
“无所谓的态度”主要指开源作者通常就是抱着玩的心态,也没指望什么人严肃地来用,就日常做做,比如简单的练手项目,它即不像“有态度”那样偏于积极的态度,但也不像“态度恶劣”那样偏于负面的态度,反正就是随便做做,无所谓的态度。
“态度恶劣”主要指作者急功近利,开源的首要目的就为了搞 KPI 、推广公众号或面试加分,通常目的完成就跑路。当然还有更恶劣的,就是开源项目带有欺骗性质,比如结派互刷 Stars 、抄袭套皮,初期看似诚意慢慢,后期展露本心,开始无下限地进行收割。更有甚者不以为耻,反以为荣(笑贫不笑娼)。
“有价值”主要指开源项目或文章的原创内容比较稀缺,比如开源的基于双数组 Trie 的 AC 自动机算法实现,又或者voicevox、audiveris( PS:非推广,本人和这些项目没有任何利害关系)。另外一提,一些大佬看不上很多开源项目,感觉 Nginx 或 Redis 的源码也不过如此。但这就是稀缺度的问题,每位大佬都感觉自己也能写,但愿意腾出自己那么多时间、持之以恒,并能写出名的,可真就寥寥无几了。
“没价值”主要指某个开源项目或文章千篇一律、烂大街。特别一提,没什么技术含量的项目也可以有高价值,关键还看稀缺度。
特别注意:这里指的稀缺度,指的是原创内容的稀缺度。
特别注意:这里指的稀缺度,指的是原创内容的稀缺度。
特别注意:这里指的稀缺度,指的是原创内容的稀缺度。
之所以要特别强调是原创内容的稀缺度是因为还有一种观点认为是“世界上不存在没价值的项目,只有没放对位置的项目”,诸如一个在 GitHub 上被人抄了几万次的面经文档项目被培训班用于给完全不懂编程 /还没入行的人做培训,那客观来说该文档确实变得有价值了,但如果按这观点来看,那啥项目都可以被认为是“有价值的”,但如果真把具有稀缺原创性的项目和那些抄袭集大成的项目归为一类,认为“都有价值”,那我们也会觉得这样的价值分类太笼统且随意了,怎么可以把抄袭的项目和原创项目的价值混为一谈呢?
正是由于价值的标准可以如此多样,为了避免有关价值判断的讨论无休无止,本文谈的“价值”主要是基于其原创性内容的稀缺度来判断的。
另外,从项目的 Stars 或付费用户数来评判也是不准确的,诸如像Maven这样被无数人使用过的项目一共也才 3K stars ,尤其越底层的项目通常越是如此,尤其是捐钱的人通常更愿意给它们使用的上层应用捐钱,而不给其底层项目捐钱。
先从简单的“态度恶劣且没价值”入手吧。我初想“态度恶劣没价值”的东西怎么会有人关注呢?但转念一想,GitHub 的中文榜单很多时候还真就这样(我最近没关注了,我是被恶心坏了,整出 PTSD 了),都是一堆被无数人做了无数次的电商 /博客项目,被人抄了无数次的面试题,很多作者是开个源,维护几周,刷完面试 /公众号 /KPI 就跑路了,这些作者就像是无生气、无创造力的机器人(不知道教育在这里做了多少“贡献”),又像是一群西西弗斯,不断重复地把山下的巨石滚上山,项目 README 底下也不忘贴几个公众号进行收割...这类项目让我体会到了什么叫做 PTSD ,如今当我看到带有“电商 /博客”关键字的开源项目,人就本能地就泛起了厌恶之感。
从功利角度来说,这些项目确实推广了一些被抄了无数遍的有用或无用的知识。但从功利主义的另个角度来看:
这样的项目吞噬了本属于更具有原创价值开源项目的关注度,并且不少项目还采用不道德的手段(如买 Stars 、互捧臭脚互刷 Stars 、频繁买广告 /发帖刷 Stars ),刷 KPI/开公众号做广告,目的完成了就拍拍屁股闪人,导致部分具有原创价值的开源项目的作者“做啥原创内容,吃力不讨好,隔壁一个 Markdown 项目靠抄袭+疯狂推广,Stars 都比我的多 10+倍,哥们我累了,不玩了,你们自己玩吧”,同时新人看到这类项目,也发现苦心做原创内容,还不如搞点哗众取宠来 Stars 快,既简历看着“牛逼”(“管它是什么样的 Stars ,反正我项目就 Stars 多,牛逼不”),指不定还能搞手副业。最终,劣币驱逐良币。
我们都知道互联网有一个大问题,这个大问题不是有价值的文章越来越少了,而是水文的数量在以指数式增长,导致想找有价值文章的人不知去往何处,导致我们找一篇有价值的文章的成本越来越高,很多时候犹如大海捞针,因此不得不换一个平台,或者干脆“哥们我退出,不玩了,你们自己玩吧”。开源圈同理。
另外也让一些人觉得“搞慢工出细活,不赚钱+原创性高的开源项目的作者都是 SB 吧,看看别人天天水文,给新人做 Hello World 项目,靠公众号做推广,现在都已经买车买房了”,认真做开源的人但不赚钱的开源项目作者反而被扣上了“老实人 /天真”甚至“愚蠢 /不懂赚钱”的污名化帽子,一些同行也在不自觉地笑贫不笑娼(或者干脆打心底就认为:我就笑贫,不笑娼,咋滴?)
并且这样的风气通常越越演越烈,“反正抄就行,我干嘛要原创?”,很多项目都是抄来抄去,甚至还有欺骗 /抄袭 /套皮性质(我个人认为“抄袭 /套皮并说是自研”是开源圈里的最无耻的行为,没有之一。如果还有,请读者帮忙补充),真是体现了马太效应,恶者愈恶,癌细胞般的存在。
举例:《字节跳动涉代码抄袭被诉陪 22.74 亿,连错误的函数都搬》、《字节跳动回应“抄袭阿里 Ant Design 代码”:早期使用了相关文案》、《 TikTok 桌面直播应用被质疑“违规使用 OBS 等源码”》
综上,大量的无价值开源项目其实是在稀释开源圈的价值,模糊所有人的价值观,劣币驱良币。就算从功利主义角度来说,当今存在大量这样高关注度+无价值的项目也是站不住脚的。我个人也因此戏称这样的圈子为“开源娱乐圈”( PS:这也是我个人虽然天天主动做开源,但却说自己对开源圈没什么兴趣的原因之一)。
一些开源作者会以“自由主义”来为自己正名,类似于“我开源攒了这么多关注,我自己做公众号卖广告也搞到钱了。我虽然这项目没什么原创内容,做的是电商 /博客 /...,但这关你 P 事,我怎么做是我的自由,你眼红了?”,但我的回答同上,自由是有前提的,那就是“不伤害原则”,这类开源项目的价值会以“圈子劣化”、“更多人做这类没价值的项目”、“倒逼有价值项目作者弃坑,转去搞其他来钱快的项目”等现象而作为代价,损人利己的自由是很难站得住脚的。
说完“态度恶劣且没价值”的,再聊下“无所谓的态度或有态度,但项目没价值的”,这个我感觉完全 OK ,所有人都是这么过来的,只要不要有“卧槽,我这么牛逼,你们怎么不关注”的心态就行。
还有就是“不管作者啥态度,反正项目就是有价值”。这种我感觉就算作者态度恶劣,但只要不是抄袭 /套皮 /发布的是别人家的源码,其实也还 OK ,诸如要是一老哥当初给我“你这代码写得是真的烂,你算法也太菜了,我给你写了一个为实现敏感词过滤的基于双数组 Trie 的 AC 自动机算法,你拿去用吧”,我不会吐槽这老哥,我会感激不尽,并想办法给这老哥发个红包。
综上,我个人在开源圈更认同功利主义,而非像自由软件那样强调人 quan 、更像是奉行康德伦理学。我觉得只要是有价值的项目,作者的态度其实不太重要,就算作者是为了刷 KPI/卖广告等等,我都觉得完全 OK ,只要不过红线即可。但没价值的项目,作者的态度就重要了,态度恶劣的应该谴责,态度正向 /无所谓的就无可厚非。
各位 v2exer 又觉得如何呢?欢迎各位大佬评论与指正。
1
coderluan 2022-03-20 10:47:02 +08:00
个人认为,目前并没有一个简单高效的方法,来追责违反开源协议这一基本原则的前提下,开源领域目前仍是法外之地。在法外之地谈论态度是否端正,没啥意义,楼主最终谈论到的手段,也是“应该谴责”,但是谴责有什么用......
|
2
cmdOptionKana 2022-03-20 11:12:15 +08:00 1
"综上,我个人在开源圈更认同功利主义" —— 同意。
“我觉得只要是有价值的项目,作者的态度其实不太重要 …… 只要不过红线即可。” —— 既然有红线,证明你还是认为态度重要。同时延伸出另一个问题:每个人的红线高低不同。 “没价值的项目,作者的态度就重要了,态度恶劣的应该谴责” —— 这点我很不理解,比如实体店卖东西,有价值的才有人关注,在现实生活中没价值的就是垃圾,去垃圾堆里谴责垃圾不是浪费时间吗,而且画面也太滑稽了吧,你判断它没价值,但还花时间精力去谴责。 |
3
Buges 2022-03-20 11:34:22 +08:00 via Android
态度当然重要。比如某项目作者安全意识极差,对安全不屑一顾。代码里漏洞百出,没人有精力对其一一审计,这样的项目自然是不要使用的。
|
4
JamesChen OP @coderluan 关于“谴责有什么用”,1. 判断一些行为是否道德; 2. 谴责有什么用,该做什么实际行为来抵制。这是两个不同的话题,前者可以是伦理学话题,后者跟伦理学就没啥关系了。本文只讨论前者,要是哪位大佬对后者话题有啥有趣见解,可以再单开一篇,再一起聊聊。
@cmdOptionKana 关于“我个人在开源圈更认同功利主义...”这段。个人看法不是只有 0 和 1 ,还可以有中间的数,我个人也是既看结果,也看态度,只是结果偏重会大些。因为如果一个项目很有价值,但却是把别人家的代码开源,或者是抄袭 /套皮的项目,过了红线,那自然要谴责。这和我更认同功利主义并不冲突。 关于“没价值的项目,作者的态度就重要了,态度恶劣的应该谴责”。1. 没价值的项目并不只在垃圾堆(比如各种只卖广告的公众号里),还在全球最大程序员开源网站 GitHub trending 上,挤占本不属于它们的空间,它们的危害上文已经聊过了,不累述。2. 大量这些没价值的项目,尤其一些靠卑劣手段(刷 /买 stars )挤占诸如 GitHub trending 的空间,肯定是要谴责的。并且就是因为很少人谴责,给这些项目推波助澜,放任其发展; 3. 我理解你说的“去垃圾堆里谴责垃圾不是浪费时间吗”,其实更像是去别人卖广告的公众号里去谴责它们,但我也不干这种事,我也不会关注这些项目,看过一些源码都是培训班风格( PS:培训班风格代码也是很有意思的话题),但对这样的现象的谴责的态度必须表达出来。 另外,感谢老哥们有意思的回复。 |
5
coderluan 2022-03-20 12:26:48 +08:00
@JamesChen ”谴责有什么用......(显然没用)“,不是”谴责有什么用?(该怎么用)“,或者简单点,按你说的,判断一些行为是否道德,我认为在法律缺失的前提下,讨论道德问题缺乏现实意义,只是表达了一下自己跑题的观点而已。当然我不是说这个话题讨论的没意义,思考的过程本身就是意义,只是说这个讨论的结果,无论是什么,其实没区别,都没用,更不可能单开贴聊了。
|
6
secondwtq 2022-03-20 13:40:09 +08:00 3
感觉楼主写得很不错,很少能在本站看到这么详细的思考。
个人观点: 楼主认为的所谓“态度恶劣且没价值”的项目,在他们的关注者看来,其实可能恰恰是“态度好且有价值”的项目。楼主强调了“抄袭”的问题,但是这里面存在信息不对称的问题,在抄袭被发现并曝光之前,普通人不可能低成本获得“这个项目是否抄袭了”这个问题的答案,所以这个考量基本没有意义,我觉得一个项目“有价值”,那我就会关注,不会管它有没有抄袭。(并且我相信大多数抄袭行为是不会被发现的) 这种项目被关注我认为更多是个 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 项目的“态度”更好,“价值”更高。 |
7
JamesChen OP @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 好像类似于”项目的文档写得细致 /用心“,这个我也认为算是态度好,我个人做开源也是本着这方向去的。 最后感谢老哥用心+很有意义的回复。 |
8
1611499758wuhao 2022-03-20 18:29:37 +08:00
都白嫖了,谈个锤子
|