LWN: Chrome OS怎么提交upstream代码?

640
点击上方蓝色“ Linux News搬运工”关注我们~

How Chrome OS works upstream

September 6, 2019

This article was contributed by Sean Kerner


OSS NA

Google一直愿意贡献代码给Linux kernel。在Chrome OS开发过程中,Google从此前项目中吸取了教训,跟upstream Linux kernel有了更加紧密的配合。在2019 Open Source Summit North America会议中,Google软件工程师Doug Anderson详细描述了Chrome OS开发者为什么要把代码推到upstream,以及具体是如何进行的。这个工作不仅是对Linux社区有帮助,而且对Google也有帮助。

Chrome OS kernel是Google的Chromebook设备的核心,也是基于Linux long-term support (LTS,长期支持) kernel。Anderson介绍说Google每年会挑选一个LTS kernel,在这一年中生产的设备都会使用这个版本的Linux kernel。在设备生命周期中,Google打算至少进行一次uprev(指升级到新版本的kernel)。Anderson强调,如果Google不及时把Chrome OS kernel的patch推送到upstream上,那么uprev过程总体上来说会更加困难。

关于推送代码到upstream,说说很容易,真正做到非常男。Chrome OS开发者upstream patch的流程跟其他mainline Linux kernel的patch并没有什么不同,有区别的地方是Google对员工的要求,以及团队的组织。开发者需要发送patch给kernel mailing list,然后要有一些耐心,等upstream回复。其中一个挑战就是如果收不到upstream的反馈怎么办。他说:“只要大家都在upstream-first的文化下工作,那么可能面对的最大问题就是没有任何响应。”

在开发者提交patch给mailing list的时候,非常期待能有反馈,无论是赞同的意见,还是挑刺的意见,都可以。这能说明有人关注这个问题并且进行了review。如果Chrome OS team碰到没有人回复的话,就会让另一位Chrome OS engineer在mailing list上回复出他个人的review意见。有人可能会比较担心由团队成员自己来review的话,可能会被判断为是内部约定好的,或者可能会有一些偏袒。Anderson认为一定要发出真诚的(honest)反馈。

Yak shaving

mailing list上反馈的信息,有时候是yak shaving(直译为牦牛毛,意指瞎忙),这是Anderson的一种形容,意思是说,明明只提交了一个小patch,但是回复意见要求提交者做一些不属于这个patch本身的工作。比如说,清理一个相应的子系统,或者重新构造一下某个API。他说:“有时候,提交一个小patch有可能会引出某个人要求你做要花一个月时间的工作。”

有时候这类额外工作并不会费很多时间,这种情况下最好是按要求去实现。如果这个额外工作远超了Chrome OS开发者的职责,甚至开发者本人都没有能力实现的,那么结果会不太确定。有时候upstream会同意开发者合入自己的patch,不用去完成那些额外工作,有些情况下则不同意合入patch。

The Chrome OS kernel tree

尽管一直明确规定了要upstream first(优先推送到upstream),不过Chrome OS kernel代码也仍然不是直接从mainline kernel取下来的。Chrome OS开发者都会在Chrome OS tree里面对所有的commit标明tag来指示这个commit来自哪里。不过,他强调说,每当Google在自己的Chrome OS kernel tree打了本地改动的话,开发者都会非常努力的upstream到Linus Torvalds的代码库里,或者到合适的maintainer代码库中。

UPSTREAM tag就是用来标志一个commit是直接从Torvalds的代码库拿来的。而FROMGIT tag则是指从某个maintainer的代码库pick过来的(这种最终都会进入mainline)。而FROMLIST tag则用来标记从mailing list里面提取的commit。CHROMIUM tag则跟其他tag不同,专门标记不需要推送到upstream的commit,也就是说只针对CHROME OS特有的改动。

基本上,Anderson表明了态度,就是推动upstream是对kernel社区和Chrome OS项目的双赢方案。推送到upstream就能得到更多测试和review,也能推动Chrome OS硬件供应商能把代码推到upstream上。例如,Rockchip rk3288和rk3399 ARM SoC都已经在upstream上支持得很好了,这都是得益于Chrome OS。

Learning from the mistakes of Android

Google并没有让它所有的操作系统都采用这种upstream-first的策略。而Chrome OS开发者希望能坚守这一点。Anderson的说法是:“我们希望避免Android 10年前的做法”。Android手机有很多patch都没有推送upstream。此外,Android设备总是有一些行为跟upstream kernel的行为不一致。Chrome OS开发团队不希望再重复Android的做法,于是开始尽可能多的推送到mainline,这样kernel开发者就有机会来同时review代码。

问答环节,一位听众指出直到现在Android手机也仍然有很多代码没有推到upsteram。听众也问说是否Chrome OS kernel真的基本跟upstream kernel一致。Anderson解释说Google有mainline kernel的完整分支,举例来说,Chrome OS 4.19分支代码,其中patch都是选择过并且打好标记tag的,所以能明显看出来patch都来自哪里。所以基本来说,就是一个upstream kernel的代码库,平时开发者也会尽量把代码先推送到upstream上去。理想来说,他希望Chrome OS 4.19就是纯正的4.19 kernel,然后打上一些来自更新版本的kernel的一些patch,不过并不是总能达到这个理想状况。

Anderson提过很多次,需要把所有改动upstream并不容易做到。不过看起来Google Chrome OS开发团队一直坚守这一点,并且定义了完整流程来确保。

全文完

LWN文章遵循CC BY-SA 4.0许可协议。

极度欢迎将文章分享到朋友圈 
热烈欢迎转载以及基于现有协议修改再创作~

长按下面二维码关注:Linux News搬运工,希望每周的深度文章以及开源社区的各种新近言论,能够让大家满意~

640?wx_fmt=jpeg

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值