开源项目吐槽大会:那些让开发者又爱又恨的“开源瑰宝“开场

开源项目吐槽大会:那些让开发者又爱又恨的“开源瑰宝“开场
开源项目吐槽大会那些让开发者又爱又恨的开源瑰宝开场开源世界是个奇妙的江湖。有人在这里封神有人在这里头秃。我们每天白嫖别人的代码嘴上说着开源改变世界心里骂着这什么鬼东西。今天吐槽大会正式开始。第一轮README薛定谔的文档你发现了一个看起来很完美的开源项目。Star数破万简介写得天花乱坠。你满怀期待地点开README看到了一行字“文档正在完善中…”四个字杀伤力拉满。更离谱的是另一种README写了五千字从项目愿景讲到拯救人类但你翻遍全文都找不到安装命令。最后在某个issue的角落里某个用户回复了五个字母npm i。还有一种README它确实有安装教程但写的是gitclone xxxcdxxx# 然后你应该知道怎么做不我不知道。我如果知道就不会来看你的README了。好的文档像好老师你甚至感觉不到它的存在。差的文档像前任你永远猜不到它想表达什么。第二轮依赖地狱套娃的艺术你只是想用一个日期格式化的库装上之后发现它依赖了47个包。其中一个包的作用是判断当前环境是不是浏览器代码只有一行typeofwindow!undefined但这一行代码自己又是一个独立的npm包还拥有自己的GitHub仓库、README、测试文件和CHANGELOG。开源精神体现在每一行代码都要有自己的独立包。更经典的是left-pad事件。一个11行代码的包被作者从npm删除后半个互联网的构建瞬间全挂。那一刻我们才意识到现代软件工程的根基建立在别人的11行代码上。你引以为豪的微服务架构底层可能就靠一个周末写着玩的脚本撑着。第三轮版本号语义化版本的终极背叛语义化版本SemVer的承诺很美好major版本才破坏兼容minor是新增功能patch是bug修复。现实呢你在package.json里写的是^1.2.3某天构建突然挂了。你查了半天发现作者在1.2.4版本里修复了一个bug修复方式是把函数的参数顺序换了。在他的理解里这是bug修复。在你的理解里这是生产事故。最可怕的是那种版本号直接从0.4.2跳到1.0.0的项目。你以为1.0意味着稳定成熟点进去一看作者只是觉得0.4这个数字不好看。还有那些永远停留在0.x版本的项目。几年了Star好几万版本号还是0.3.7。作者的意思很明确这东西我自己都没信心你们用就用了出事别找我。第四轮Issue修了等于没修你花了两小时写了一个详细的bug report。复现步骤、环境信息、错误日志、最小可复现示例一应俱全。三天后维护者回复了“Could you provide a minimal reproduction?”你看着自己issue里那个醒目的CodeSandbox链接陷入了沉思。还有一种经典回复“Works on my machine.”这句话在开源世界的地位约等于臣妾做不到啊。更有趣的是那些被关闭的issue。维护者关issue的速度比闪电还快理由是invalid或wontfix。你打开closed列表一看关闭的比open的还多。这个项目不是在解决问题是在消灭提出问题的人。第五轮Star通货膨胀GitHub的Star正在经历严重的通货膨胀。一个项目只要有好看的README封面图、一个动图demo、再加一个为什么选择XXX的对比表格就能收获几千Star。代码质量如何谁在乎呢README好看就行了。更离谱的是那些awesome-xxx仓库。一个README文件里面全是链接Star数比它收录的那些真正的开源项目还多。开源世界里最风光的往往不是写代码的人是写清单的人。第六轮License法外狂徒的快乐每个项目都有LICENSE文件但90%的开发者从没认真读过。你用了MIT协议的代码没问题宽松到几乎可以为所欲为。你用了GPL协议的代码如果你的项目是闭源的恭喜你你已经在法律边缘疯狂试探了。最搞笑的是那种没有License的项目。严格来说没有License意味着作者保留所有权利你不能复制、修改、分发。但大家默认放出来就是让用的。开源世界的法律意识全靠默契。第七轮贡献者一个标点符号的战争你发现了一个项目文档里有个明显的错别字。你热心地提交了一个PR改了一个字符。维护者三天后review了你的PR留了一条评论“Can you also fix the same typo in the Chinese translation file?”你打开那个文件发现中文版里根本没有这个单词。一个月后你的PR被合并了。你的GitHub头像旁边多了一个数字。这就是你作为开源贡献者的全部荣誉。但你不知道的是有些人的开源贡献就是专门提fix typo的PR。他们不看代码只看README里的错别字。靠这个他们的贡献图谱绿得发亮。第八轮维护者用爱发电的圣人说了这么多吐槽最后得说句公道话。开源项目的维护者是这个行业里最被低估的人。他们用自己的业余时间维护着全世界开发者的基础设施收到的回报通常是几个Star无数个这个bug什么时候修的issue偶尔一个赞助可能是5美元/月无尽的PR review有个维护者维护了一个被几百万个项目依赖的库每月收到的赞助加起来不够付网费。他发了一篇博客说我不想干了评论区全在骂他不负责任。免费的东西用久了就会觉得理所应当。这才是开源世界最大的问题。第九轮重新发明轮子开源世界有个永恒的定律每隔三个月就有人觉得自己能写出更好的框架。于是我们有了100个状态管理库200个HTTP请求库300个日期处理库无数个比XX快10倍的轮子每个新轮子的README都写着比XXX更轻量、更快速、更简单。三个月后这个轮子自己也变成了一个需要被替代的XXX。技术选型就像在超市选牙膏摆了50种功能都差不多你最后选了包装最好看的那个。结语吐槽归吐槽开源依然是软件行业最美好的东西之一。我们骂的每一个问题都是因为我们离不开它。那些文档不全的项目、依赖爆炸的库、突然断更的仓库恰恰证明了开源生态的繁荣和不可替代。没有开源就没有今天的软件行业。这句话不需要加但是。但下次如果再看到一个README写着文档正在完善中的项目我还是会骂一句。然后乖乖地去提一个PR。本文纯属吐槽如有雷同说明你也被害过。