开源维护者Lawso:最让人火大的是哪类人?

简介: 在物理世界,路与桥等基础设施的建设,人们都非常重视。可是,在数字世界呢?那些维护数字基础设施运转的开源项目维护者们,他们的喜怒哀乐,你重视过吗?最最让他们火大的是哪类人,你了解吗?

更多深度文章,请关注云计算频道:https://yq.aliyun.com/cloud


在物理世界,路与桥等基础设施的建设,人们都非常重视。在思想观念上,比如说“要想富,先修路”,已深入人心。在资金保障上,人们也毫不吝啬,比如说,亚投行的建立、“一带一路”战略的确立,都是把基础设施的重视,提升到非常显赫的高度。

可是,在数字世界呢?

6821196772f69cb8d4ac4aa91185d5e531b981bc

支撑整个数字世界“纵横捭阖”的各类“基础设施”——软件,特别是占据大半壁江山的开源软件,比如,大到你常用的Linux、Android,中到大数据常玩的Hadoop、Spark、HBase,小到Accumulo、ACE、Bahir、Bigtop、Coveralls、Travis、Sauce Labs、Kafka、Knox、Lens、Libcloud、Logging、ZooKeeper等等,数以万计的、你可能都叫不上名字的开源软件,是它们,正以“润物细无声”地方式,让你每天可以愉快地“玩耍”着手机,浏览着新闻、刷着朋友圈、逛着淘宝网……,这些数字基础设施的背后劳作,你曾经重视过吗?


天上不会无缘无故地“掉下来个林妹妹”!那么,又是谁,在背后默默无闻地维系着这些数字基础设施的运转呢?

当然是那些“意气风发”、“技高八斗”、“乐于助人”的开源项目参与者:Contributor(对开源项目提交过部分有用代码的贡献者)和Committer(对开源项目核心模块和系统架构开发有较大代码贡献的技术大咖)。

但“意气风发”、“技高八斗”、“乐于助人”等,这些都是光鲜的表象。作为社会人,这些开源项目维护者,他们和普通人,一样有七情六欲、一样有喜怒哀乐,一样有五味杂陈!


Nolan Lawson,就是这样的人!

他是微软的资深员工,空闲时维护几个开源项目(前后大致有7年光景),还打理着自己的个人网站。近日,他在自己的个人网站,吐槽了自己在维护开源项目时的“酸甜苦辣”。

一把辛酸泪,谁解其中味啊?

每次登录GitHub时,Nolan总能看到一大堆令人头大的、数以百计的维护通知(notifications),等待自己处理,此情此景,都好似有一万匹草泥马,在胸中奔腾。


善良如你,Nolan也想提供帮忙,可是白天上了一天班,已经累得像狗一样好不好,晚上回到家,心有余而力不足啊。好不容易熬到周末,本想和自己的狐朋狗友,去郊外踏踏青、吹吹牛,扯扯淡,享受一下生活,可眼下费时费力的忙,到底帮还是不帮?内心好纠结。

这,就是一个开源项目维护者,时常面临的尴尬!


在维护开源软件时,Nolan还会遇到各位形形色色的人群,具体说来如下几类:

第一类人,他们用你的项目,可能由于某些API(应用程序接口)语焉不详,他们比较困惑,于是来GitHub询问。可令人恼火的是,他们贴出来的代码,连个规整的格式都没有。有没有“同志”有这样的同感:别人写的代码,是天下最难懂的“阅读理解”!特别是没有注释的情况下!

还有就是,可能是由于语言沟通的问题,导致很多问题的描述,理解起来异常困难。

How are you(怎么是你)?How old are you(怎么老是你)?

e5bf088e7b4755fa119d3a36a86536995684e4fe

一番折腾,你可能还是不懂对方的问题是什么?无奈的你,只能甩给他某个文档或某个教程给他,或者建议他去Stack Overflow和 Slack去试一试。

第二类人,他们在提问时,已经是怒气冲冲了。他们会说,你丫咋还不回复他的问题。由于你提供的API有问题,已经浪费他生命中宝贵的两个小时了!

最最让人火大的就是TM这种人!这时的你,唯一能脱口而出的话就是:你大爷的,老子上辈子欠你钱,是伐?

然而,对这种人,你不必浪费时间,要压下怒火,然后礼貌但绝不想再次搭理的回复:“这是一个开源项目,由自愿者维护,如果代码有问题,请提交一个可验证的测试用例或提交一个PR(Pull Request)。


小编注:在这里,简单解释一下,“Pull Request”直译就是“拉回请求”,即如果你想向某个开源代码库RepoA贡献代码,首先你要请求将RepoA克隆一份,开辟(fork)一个新的分支RepoB,然后在RepoB上修正你认为有问题的代码,然后提交给GitHub平台。如果原始代码库管理者A,认为你修改的代码是有价值的,就会审核通过,然后将分支代码RepoB,重新“拉回”到主干RepoA上去(即合并你的代码,作为主干代码),在了解这个流程后,将“Pull Request”翻译成“请求代码合并”是不是更合理呢?当然,在知乎上,也有大神将其翻译为“老司机,带带我!”,是不是也很传神呢?你的翻译是啥,不妨也说说呗!


言归正传,维护开源项目时,还会遇到第三类人。他们在使用开源项目时,可能会遇到一个非常常见的错误。其实,只需翻翻文档中的常见问答(Q&A),或查看一下以往的邮件列表,或花几分钟时间谷歌一下,度娘一下,一切都能轻易搞定。可他们偏偏任性不这样,宁愿做一个廉价的“伸手党”!问你,问你,不停地问你!问你妹啊!

相比于“伸手党”,第四类人就要好很多,他们就是普通的代码贡献者(contributor)。他们呢,小有名气,犹如大侠,技艺高超,侠肝义胆,常常出没于在各种论坛之中。有时,他们会就某个只有内行才懂的议题,发起一个PR,并对其中的某个问题进行修复,然而由于这个议题过于复杂,以至于在他们的PR中,不得不用很大的篇幅来解释他们的所作所为。

当你有点“稀里糊涂”地认可这个PR之后,并回复LGTM(Look Good To Me),然后将其合并到主代码库。

b9193f423ea5dc0655181204e4ede2b5ad9a7d48

但是,问题来了!

当你没有充分评估某个PR,而将其合并到代码主库,最终会带来很多不可预见的新问题。比如说,虽然测试用例通过,但项目的整体性能却降低了10个数量级,这时你会抓狂的。再比如说,一旦合并某个PR后,也会对老用户造成无尽的困扰。因为更新版的API发生了变化,老用户依据这个开源项目解决问题的工作流程,可能也会发生变化。这种持续不断地变化,会让老用户的体验非常不好!


还有一类人,也属于代码贡献者(Contributor),他们发现了项目中一个新的缺陷(bug),并做了修复。但实际上,这个bug其实你是知道的,它存在于该项目的某个子项目之中,然后当你告知他们,希望他们能在子项目里去PR修复这个问题时,他们时常会“一骑红尘”,再也不搭理你。

现在,在GitHub中,你看出了Contributor和Committer二者的区别了吧:Contributor是对开源项目做出过贡献的人,他们有技术,有激情,但大多数Contributor的激情,常常会在一两次贡献之后,就“一泻千里”。而Committer则不同,他们是Contributor的升级版,有技术,也有激情,最重要的是,他们激情长青,会持续不断地输出贡献

……

还有一类人,他们一开始就兴致勃勃的开启一个PR,但实际上,他们修正的问题,其实早已有其它维护者完美解决了,但他们现在还一片闹腾,也是醉了!


还有一些人,他们的抱怨,的确是可以理解的。

你是知道的,由于开源项目维护者的精力,实在有限,有些问题,有可能几个月过去了,都还没有来得及去处理,所以他们的抱怨是:“3个月前,我咨询你的问题,现在我自己搞定了。其实,解决的方案其实很简单,那就是——哥不再用你的项目了。你的项目,俺用不起,还躲不起吗?”

哇,哇,哇,一腔老血,夺口喷出……

此外,还有很多形形色色的开源项目使用者,他们的问题、他们的抱怨,他们的PR,源源不断地来,解决一批,来一批,“此恨绵绵无绝期”。

这种场景常常令人非常沮丧,每次在维护一边开源项目后,Lawson感觉“整个人都被掏空”了。在诸如GitHub这样的开源平台上,存在这样一个悖论,那就是:越成功,越受罚!

这是因为,如果你的开源项目越成功,别人关注、使用并反馈的问题,也就越多,你为此就会遭受“惩罚”——付出更多的时间、更大的精力,来维护这个项目!


如果简单粗暴地不搭理这些问题吧,Lawson就会感到有很强的负罪感:可能自己的举手之劳,就对别人有很大帮助呢?可自己再怎么“举手”,也只有两只啊?数以百计的问题,扑面而来,如果都是春风细雨般的处理,等不到“夏天”,自己的人生就可能“挂掉”。

但如果总是由“负罪感”驱动来完成某件事,你觉得自己的人生,还会洒满阳光吗?


到后来,Lawson开发了两种策略,简单说来,就是:

1)自卫,展开说就是“自我防卫”。不看(或者说不敢看)GitHub上的维护通知,而是通过邮件过滤、分类处理大部分通知,做到离线(offline)维护,一切等到有空再说。这是因为,在上班时间,你还要为老板每天给你发的薪水负责。在空闲时间,你还有媳妇要陪!

然后,尽量吸引更多的贡献者(Contributor)参与其中,经过考核后,然后将部分Contributor提升为Committer。你知道吗?日理万机,其实是个贬义词,那说明你笨,不懂得管理!

2)自慰,展开来说就是“自我安慰”。天下没有白做的工。做了开源项目,自己不也受益匪浅嘛?首先来说,自己积累了不少社区声望,由此,还登上大会上作报告,并在推特(Twitter)上,有数以万计的粉丝,一呼百应。到后来,由于有了开源项目的经验,还在微软找到了工作,这一切,不都是拜开源所赐吗?

嗯,其实吧,做开源,也挺好!


黑夜中,点燃了一支烟,深深地吸了一口,然后缓缓吐出,吹烟袅袅升起……

Lawson并不知道,维护开源,自卫和自慰,到底哪一个先来?

 


本文由北邮@爱可可-爱生活 老师推荐,阿里云云栖社区组织翻译。

 

文章原标题《What it feels like to be an open-source maintainer》,作者:Rachel Thomas,译者:张玉宏(著有《品味大数据》一书),审校:我是主题曲哥哥。

 

相关文章
|
IDE 物联网 开发工具
【史上最全面esp32教程】点灯大师篇
【史上最全面esp32教程】点灯大师篇
1422 0
|
存储 SQL 缓存
使用实践:Hologres对接MaxCompute常见问题排查
本文总结了Hologres对接MaxCompute时的常见问题与处理方法。
3911 3
使用实践:Hologres对接MaxCompute常见问题排查
|
3月前
|
数据采集 弹性计算 供应链
阿里云服务器包年包月、按量付费和抢占式实例有什么区别?如何选择?
阿里云服务器提供包年包月、按量付费和抢占式实例三种付费模式。包年包月预付费,长期使用更划算,适合稳定业务;按量付费按小时计费,灵活但成本较高,适合短期或波动场景;抢占式实例价格优惠最高达90%,但可能被释放,适合无状态应用。根据需求选择可兼顾成本与稳定性。
|
NoSQL 编译器 API
关于thread使用的错误:pure virtual method called terminate called without an active exception
关于thread使用的错误:pure virtual method called terminate called without an active exception
464 1
|
10月前
|
机器学习/深度学习 人工智能 Java
谈谈AI时代到来以及35岁危机双重压力下,作为一个普通开发者的想法
在AI快速发展的背景下,Java后端开发人员可通过系统学习转型至AI领域。建议步骤包括:1. 学习Python编程;2. 掌握数据处理与分析工具;3. 学习机器学习基础及框架;4. 深入研究深度学习;5. 结合Java与AI技术;6. 参与开源项目和社区;7. 持续更新知识并实践;8. 寻找转型机会。尽管转型需要时间和努力,但前景广阔。
433 4
|
9月前
|
自然语言处理 安全 API
1688 跨境属性 API 接口(1688API 系列)
1688跨境属性API助力跨境电商发展,提供商品目标市场适配、跨境物流、国际认证及语言文化属性等数据,支持HTTP GET/POST请求。开发者可通过商品ID、目标市场代码和语言参数精准获取信息,提升业务效率与精准度。示例代码展示了如何使用Python进行GET请求,获取商品跨境属性,确保数据准确可靠。
|
12月前
|
移动开发 小程序 前端开发
使用php开发圈子系统特点,如何获取圈子系统源码,社交圈子运营以及圈子系统的功能特点,圈子系统,允许二开,免费源码,APP 小程序 H5
开发一个圈子系统(也称为社交网络或社群系统)可以是一个复杂但非常有趣的项目。以下是一些关键特点和步骤,帮助你理解如何开发、获取源码以及运营一个圈子系统。
521 4
|
JSON 缓存 测试技术
构建高效RESTful API的后端实践指南####
本文将深入探讨如何设计并实现一个高效、可扩展且易于维护的RESTful API。不同于传统的摘要概述,本节将直接以行动指南的形式,列出构建RESTful API时必须遵循的核心原则与最佳实践,旨在为开发者提供一套直接可行的实施框架,快速提升API设计与开发能力。 ####
|
网络协议 安全 物联网
探索未来网络:IPv6的演进与应用
本文深入探讨了互联网协议第六版(IPv6)的发展历程、技术特点以及在现代网络中的应用。通过分析IPv4的局限性和IPv6的优势,阐述了IPv6对网络扩展性、安全性和性能提升的重要性。同时,文章还探讨了IPv6在实际部署中面临的挑战和解决方案,为读者提供了全面而深入的理解。
|
缓存 网络协议 程序员
为什么说 Swoole 是 PHP 程序员技术水平的分水岭?
【9月更文挑战第7天】Swoole 因其异步非阻塞编程模式、高性能服务器开发能力、性能优化工具及拓展技术视野等特点,被视为 PHP 程序员技术水平的分水岭。它要求程序员掌握异步编程、协程、网络协议等知识,并具备性能优化和系统管理能力,从而全面提升技术水平。
209 0