首页游戏资讯悟空刘歧:技术瑕疵不除不快,开源社区代码说话

悟空刘歧:技术瑕疵不除不快,开源社区代码说话

misa2 03-05 4次浏览 0条评论

出品 | OSC开源社区(ID:oschina2013)

每个人爱上开源社区都有自己特殊的理由,对于刘歧来说,这里是一个技术控的天堂。

玩过音视频技术的同学对悟空这个名字一定不陌生。悟空刘歧,FFmpeg 官方顾问、Maintainer,FFmpeg 社区最活跃的奉献者之一,《FFmpeg 从进门到熟知》作者。

FFmpeg—— 老牌开源项目,万能播放器的根基。刘歧 —— 喜欢技术、只想讨论技术问题的程序员。

二者之间的 “羁绊” 来自于刘歧对于一个技术 “瑕疵” 的不满,为了解决自己眼中 FFmpeg 的一个不合理功能,刘歧开始了在 FFmpeg 社区的征程。FFmpeg 社区的治理属于 Liberal Contribution(自由奉献)模式,个人影响力取决于奉献多寡,重大决策基于共识决定,一切靠代码说话。毫无疑问,对于只爱技术的刘歧来说,这是一个好地方。和社区成员们一起讨论技术,共同解决 Bug,时不时提交些新的代码成了刘歧在工作与生活之外特殊且有效的放松方式。就这样,刘歧慢慢在开源社区扎根、成长……

初进开源社区

大学毕业,刘歧到一家做空中充值终端机的公司工作。在这里,他正式踏上了自己的开源之旅。

当时刘歧所在公司自研的电路板移植了 Linux 操作系统,刘歧参与了给系统写驱动的工作,自然他也碰到了所有程序员都会碰到的各种 Bug,为了解决随时可能出现的问题,刘歧开始向前辈们追求扶助。Linux Kennel 中文邮件列表成为刘歧的求解渠道。

Linux Kennel 中文邮件列表给刘歧留下的初印象是 “热情”:“基本上你发一个问题,大伙立刻就回复了。可能是因为邮件列表刚建立不久,大家看到终于有一个新人加进进来问问题,肯定特殊开心,立刻就想回复。” 出于一种整体良好的社区体验和对技术的热情,刘歧开始长期在这个开源软件的邮件列表社区中潜水学习,偶然碰到问题会向大伙请教。

假如说第一份工作给了刘歧一个进进开源社区的缘由,那么第二份工作则是为他带来了扎根在社区的契机。

刘歧在第二份工作中主要做图形图像处理。一次偶然机会,和同事在谈天过程中,刘歧发现对方在许多技术基础知识、技术视野等方面与自己非常不同,“感觉他的技术很扎实”。个中原因就是这位同事深度参与了 BSD 的代码开发与保护。

这激起了刘歧想要深度参与一个开源项目的兴致 —— 不仅仅和自己的同事交流技术、不仅仅是局限于自家公司的业务领域,而是可以和更多的人在一起讨论更广泛的技术问题,由此来提升自己的技术视野。

对于一家商业公司来说,代码的要求往往是称心当下业务需求,很少往考虑这些代码是否能有更长的生命周期,是否足够优雅等等。但在开源社区,来自千行百业的程序员相互交流、碰撞,便给了软件一个不断成长的温床。

有了深度参与开源项目的念头之后不久,刘歧开始做云存储、云转码系统工作,用到了 FFmpeg,碰到问题时,刘歧会像在 Linux Kennel 中文社区解决 bug 的方式那样,往 FFmpeg 社区搜索是否已经有人碰到过同样的问题,该怎么解决这些问题,“碰到问题的第一个感觉就是,这个问题我肯定不是第一个碰到,那我在网上或者邮件列表里肯定能搜到相关内容或 Patch。”

展开全文

同时,刘歧也开始尝试深度参与 FFmpeg 社区,他会看察社区中的成员间是如何交流沟通的,提 Patch 的流程是怎样等等。用他自己的话来说,就是 “光是了解这个社区我就花了 2 年。” 逐渐他发现,许多问题在社区中还没有被解决或是提及。机会,在这个时候到来。

发现问题

2014 年上半年,刘歧接触了一个客户,需要用 FFmpeg 做 HLS 切片。彼时用 FFmpeg 在切片时,有个参数对 CDN 不够友好。当时 FFmpeg 的切片原理会按照顺序生成 1、2、3、4 片,第 4 片结束后会回滚到第 1 片。每片的时间长度是 2 秒,所以第 8-10 秒的视频切片就会被标记为序号 1。这就导致在 CDN 里,缓存时间长度出现问题。当用户播放完 0-2 秒的 1.ts 之后,第 1 片视频应该被刷新掉,但实际上并没有,那么用户播放到 8-10 秒的 1.ts 时,播的依旧是 0-2 秒的内容。加上时间戳精准度的影响,视频就会卡住,一段时间之后再跳转到新的画面,非常影响用户看感。

“这是一个不准则的处理方式。” 实际上,这个问题刘歧并不是第一次碰到,他会尝试和客户反馈,意见不用回滚,而是按照递增的方式往生成。但这带来新的问题 —— 占存储。回滚的方式是为了节约存储,不会无休止的往里写新文件。

不仅如此,客户还认为,既然 FFmpeg 里提供了这个操作选项,存在即合理,就可以沿用。

刘歧此前也试过向 FFmpeg 社区提改良意见,“往 flv 里提 hevc,在 2013 年年底的时候,国内很多公司就开始使用这个技术了,但是我往 FFmpeg 社区提这个 Patch 的时候,社区里的人是反对的,因为没有相应地参考准则,所以不接受这个方式。”

在一个技术控眼里,这种技术功能上的 “瑕疵” 不除不快,FFmpeg 社区拒绝改良的理由也并不能让刘歧让步。

“我那时的看念就是,FFmpeg 也是人写的,选项是人来定的,那么我就有可能是那个人。” 于是,刘歧立志要加进 FFmpeg 保护者列表,然后 “干掉那个选项”。

删掉一个小功能需要几年?

想要删掉功能,要先成为保护者。

在 FFmpeg 社区,一名保护者通常需要先频繁地提交高质量的代码,在社区 “混脸熟”,获取一定的认可度。接下来才可能会被大伙邀请成为保护者,或者自行申请成为保护者。

按照这个路径,刘歧开始刷 Patch。频繁的代码提交行为吸引了时任 FFmpeg 首席保护者 Michael 的目光。不过,Michael 的关注对此刻的刘歧来说是一种 “折磨”。

“他频繁地找我麻烦,不断地否定我,在我提 Patch 的时候经常测试不通过。” 这对刘歧的打击非常大。现在当我们提到要营造一个良好的开源社区氛围、留住新奇血液时,往往认为需要给新加进的奉献者更多的耐烦、更细致礼貌的指挥、适当的鼓励等等。很显然,当时的刘歧碰到的是高难度剧本:“那种环境,基本上相当于你在有意刁难我,放到很多人身上肯定就不干了。但我当时的目的非常明确,我就是要成为保护者,就是要把这件事做成,随你怎么刁难我。”

Michael 的 “刁难” 在事后看来更像是刘歧进阶路上的测试。比如指出问题的时候,Michael 也会关注刘歧是否有解决问题的能力,在刘歧解决不了的问题上会耐烦的指挥。一来二往,两人的交流慢慢多了起来,刘歧对 FFmpeg 的把握能力也在日渐精进。

有一天,Michael 问刘歧:有没有兴致成为保护者?

“诱惑力这么大的事情,我怎么可能拒绝!” 兴奋中的刘歧还特意把这 “历史性” 的时刻截图发给朋友。

就这样,刘歧成为了保护者中的一员。他想起了曾经看过的一个小故事,当你拔萝卜发现某根特殊难拔的时候,这个萝卜可能是一个非常大的萝卜,而你,把它拔出来以后也将会有很大的收成。“当时想成为保护者,可能就是在拔那个最难拔的萝卜。”

2016 年,刘歧成为保护者的第一年,他做的第一件事就是把切片功能标记为 “弃用”。到这里,已经花了他 2 年的时间。

按照 FFmpeg 社区的规定,弃用某项功能时,需要提前警告用户,并且等到下一次大版本更新的时候,提供替换解决方案,同时旧版本不会下线。刘歧提供了几个新功能:比如直播时可以删除旧的片,这样就无需用回滚的方式,这样也能节约储存空间。但是对用户来说,替换新版本、新功能需要时间,直到今天,还有 FFmpeg 用户在使用老的 API 接口。对刘歧来说,这是一场继续了 8 年并且还在陆续的战斗……

成为顾问

在 “弃用” 切片功能的过程中,刘歧在 FFmpeg 社区一直没闲着。从频繁提交 Patch,到成为单一模块的保护者,慢慢随着保护的模块越来越多,刘歧逐渐成为了一个通用保护者,2017 年,被推选为 Maintainer 和顾问便成了顺理成章的事情。

相较于各个模块的保护者,Maintainer 的权限更广,会扶助不同模块的保护者一起 Review。而相较于 Maintainer,顾问的身份除了在社区内部是一个身份标,更重要的是可以代表 FFmpeg 社区往接一些顾问形式的工作,比如面向全球提供付费咨询服务等等。

2017 年意大利有一家做意甲联赛版权内容制造的公司在制造视频内容时用到了 FFmpeg,碰到一个接口上的问题,于是发邮件给刘歧追求扶助。此类的咨询刘歧陆续还碰到了一些,费用每小时两百美金左右,当然,有时候也会免费提供扶助。

这让刘歧看到了在线音视频剪辑工具的需求,便萌生了做一个专门的剪辑工具的想法。2017 年,来自朋友的合伙邀约让这个想法开始落地,刘歧与朋友成立公司一起做剪辑工具,当时,某央媒是他们的客户之一。虽然这次创业以快手的收购收尾,但在这之后,FFmpeg 社区毫无疑问成为刘歧作为一个技术人精神上的 “世外桃源”。

再次成为商业公司程序员队伍中的一份子之后,刘歧更多时候专注在公司本身音视频基础技术支持上,短暂地从 FFmpeg 社区 “消失”。

“过了一段时间发现太累,就会到 FFmpeg 社区看看最新的架构,代码的发展等等,或是看看是不是有可以增加的功能,我就会给支持上。” 每次关注 FFmpeg 社区的时候,刘歧会频繁提交代码,“相当于在刷屏。因为你写代码的时候,能够专注地往探求,写完之后提 Patch 之后可以和大伙一起交流的过程是很享受的,那是很过瘾的,我真的很上瘾的。”

“社区中很多人都是这个状态。”FFmpeg 的保护者中很多是像刘歧一样的业余保护者,做这个开发的人来自从事各个专业,比如量子物理博士、大学老师等等。当大家为了同一个技术聚集在一起时,便产生了对个体的强大吸引力,“开源最吸引我的就是跟别人讨论技术,因为我这个人比较话痨,喜欢和人交流,在和别人交流的时候能刷新自己的认知,学到很多东西。”

2019 年,刘歧首次接受 FFmpeg 赞助费用参与 GSoC Mentor Summit,与 FFmpeg 元老 Carl Eugen 合影

开源,一个可以纯技术交流的土壤

“直率地讲,FFmpeg 社区没有治理。” 刘歧不喜欢过多讨论技术之外的东西,恰好,FFmpeg 社区也很对他的胃口。

这个有着 20 多年的老牌开源项目社区一直以来都非常低调,发展平稳,就连唯一的一次 “分裂” 都以双方的握手言和收场。FFmpeg 是法国程序员 Fabrice Bellard 在 2000 年发起的项目,Fabrice Bellard 提交了首个 Commit。FFmpeg 单词中的 “FF” 指的是 “Fast Forward(快速前进)”,MPEG 是制定国际准则的组织,负责制定影音压缩及传输的规格准则。

从 2004 年到 2015 年间,Michael Niedermayer 担任首席保护者,拥有社区的最高决策权。但 Michael 的治理慢慢引起了一些人的不满,2011 年,部分保护者出走,另建分支 Libav。后来 Libav 逐渐发展成 PC 播放 4K HDR 蓝光最好的解决方案。分裂带来的负面效果是:FFmpeg 项目进进到了一个不确定的时期,分支 Libav 一度比 FFmpeg 更活跃更有活力,于是 Debian 及其衍生发行版都切换到了 Libav。

但到了 2015 年,Debian 项目布重新用 FFmpeg 取代 Libav,主要原因是 FFmpeg 更新更及时。当时,Libav 项目开发者指责 Michael 将 Libav 的代码合并到 FFmpeg,盗用了他们的成果。导致 Libav 在和 FFmpeg 的竞争中是失败。当然,Michael 的支持者并不赞同这个说法。

因为不想看到两个项目彻底分裂,这次事件最终以 Michael 的辞职收场,Michael 在辞职信中称,他期看两个社区最终能合并,Libav 能重新加进 FFmpeg。

“慢慢地,好多人陆陆续续的回来了,两个社区的代码开始合并。” 当时的刘歧见证双方最终的和解。而从那以后,FFmpeg 社区也再没有设立首席保护者这一位置。

在刘歧看来,社区中的成员聚集在一起是为了让 FFmpeg 更好,没有商业目的、也没有利益可言,因此,决策与发展全靠技术说话。

“你想做一件事,代码咔咔提上来之后,大伙没有明确提出意见就直接合并。” 刘歧介绍,大伙没有治理理念,只会往推断这件事能不能做,假如有人对提交上来的代码有反对意见,往往会指出具体哪里不好,假如意见合理,提代码的人则会往修改。

FFmpeg 社区也曾想过建立一些社区规则。

和大多数开源社区一样,人人都可以发表看法和意见必然带来争吵。据刘歧回忆,FFmpeg 社区的氛围非常开放的,但是以前会更协调,随着后来加进的人多起来,成员间文化背景不同,经常会出现一些人格上的进攻,在交流的时候会出现毫无原因否定他人的工作成果的状况时有出现。

所以,在 2019 年,FFmpeg 社区成员东京线下交流会时,大家觉得应该成立一个社区委员会,专门往调和这种矛盾,同时再成立一个技术委员会往讨论技术选型。

这两个想法后来也比较佛系的执行着,用刘歧的话来说就是 “还没到那个地步。” 同样佛系的还有 FFmpeg 耻辱柱。

FFmpeg 提供了视频解码、编码、后期处理等一系列功能,对世界上千奇百怪的视频音频编码有着完美的支持,强大的功能使它成为市面上的许多视频播放器的解决方案。但是,FFmpeg 也成为了代码被盗用得最严重的开源软件之一,不少闻名的播放软件都是 FFmpeg 代码的偷窃者。FFmpeg 会将发现的那些不遵守开源协议的软件名称公开发布,其列表便被称为 “耻辱柱”。FFmpeg 社区并没有实际往追究违规项目的责任,“耻辱柱” 也在 2011 年停止了更新。

在刘歧的视角里,FFmpeg 社区实际上对于此类技术之外的事件并不十分在意。在他个人看来,开源项目用户数量浩大,假如追究太多可能会涉及十几亿的用户,况且 FFmpeg 的许多新功能抄袭者无法复制,“所以对这个事情,我们都比较佛系。”

FFmpeg 社区对刘歧的馈赠也体现在许多方面。比如前文提到的 FFmpeg 社区交流氛围中经常火药味十足,但是对刘歧大多数情状下是非常友好的,而且很坦诚、很直接地往指出问题。比如刘歧的代码某个地方逻辑确实没考虑周全,他们就会很清楚地告诉他这个地方的逻辑没考虑清楚,并不是进攻。“火药味我接触得还比较多,只不过我是一个不太在意甚至可以漠视不计自尊心的人,很多时候我觉得火药味浓一些是好事,至少大伙对我还是比较尊重的,不会有特殊严重的人格进攻。”

在开源社区,刘歧还交到了很好朋友,“这些朋友也会给我提供很多扶助,比如我需要某些信息的时候,通过社区,大伙会提给予我我想知道的信息,我想做某个功能的时候,也可以和大家交流,他们也很乐于给我提供一些支持。”

总而言之,这个属于技术控的开源故事,正在快乐进行中。

2019 东京线下交流会期间 FFmpeg 社区成员合影

【溯源】在每一场对话中,追溯关于开源的故事,熟悉那些极客、自由,并坚持着的开源人。

OSCHINA 推出的开源人物专访栏目【溯源】。

溯源,意指向源头追溯,为开源求解。问渠哪得清如许,为有源头活水来。每一个开源参与者,都是掀起开源浪潮最鲜活的源泉。所有开源故事,共同构建着我们今天看到的开源世界。

开源刚出现的数十年里,为开源奔走的黑客团体都在遭受来自社会主流的冷漠和排挤。即便现在的软件行业已经大喊出“拥抱开源”的口号,问题也依然存在。

我们不知道开源奉献者、开源布道师,以及所有参与开源的人还会面临多少阻碍,但给予我们信心的是,更多的人在投身开源事业。

所以 OSCHINA 期看面向开发者社区,觅觅每一个积极参与开源、对开源有想法的人,了解他们以及他们的开源故事,窥探故事中的开源事业发展法则。

OSCHINA 推出的开源人物专访栏目【溯源】。

溯源,意指向源头追溯,为开源求解。问渠哪得清如许,为有源头活水来。每一个开源参与者,都是掀起开源浪潮最鲜活的源泉。所有开源故事,共同构建着我们今天看到的开源世界。

开源刚出现的数十年里,为开源奔走的黑客团体都在遭受来自社会主流的冷漠和排挤。即便现在的软件行业已经大喊出“拥抱开源”的口号,问题也依然存在。

我们不知道开源奉献者、开源布道师,以及所有参与开源的人还会面临多少阻碍,但给予我们信心的是,更多的人在投身开源事业。

所以 OSCHINA 期看面向开发者社区,觅觅每一个积极参与开源、对开源有想法的人,了解他们以及他们的开源故事,窥探故事中的开源事业发展法则。

往期推举

微软高管:下一代Windows将由AI驱动

Google公布支持使用Rust开发Chromium

Java之父偏爱函数式编程,称自己的代码风尚被队友指责

这里有最新开源资讯、软件更新、技术干货等内容

点这里 ↓↓↓ 记得 关注✔ 标星⭐ 哦~

万能播放软件
支持网络预览功能4.3寸工业触控屏智能中控系统解析 哲学与思想的其他形式:电子游戏作为思想媒介
相关内容
发表评论

游客 回复需填写必要信息