如何优雅地参与开源贡献,向顶级开源项目提交 PR(Pull Request)。战“码”先锋直播间第八期围绕“OpenAtom OpenHarmony(以下简称“OpenHarmony”)开源贡献”话题,邀请了深圳开鸿数字产业发展有限公司(以下简称“深开鸿”)资深OS框架开发工程师巴延兴为大家带来《如何多方位参与OpenHarmony开源贡献》主题分享。

本次分享主要介绍了巴延兴带领深开鸿开源共建团队在主导/共建16个SIG、贡献超过50万行代码的OpenHarmony “战码”经验,在根技术、垂直领域、生态扩展等多方位参与开源贡献的实践与思考,以及辅助工具SIG和内核SIG两大板块的贡献方式、价值与用途,希望有更多开发者参与开源共建。

参与战“码”先锋,PR征集令!感兴趣的开发者可以在Gitee的OpenHarmony代码仓提交PR参与活动,和全球开发者同台竞技,比拼技艺,为OpenHarmony生态建设贡献力量。

如何通过SIG进行开源贡献

什么是SIG?

SIG全称Special Interest Group,即特别兴趣小组,专注一个特定的技术领域,负责该领域技术竞争力分析和关键技术识别及决策,引领技术演进的方向,也是共建单位及个人开发者进行开源贡献的基本单位。

通过SIG组参与开源共建的两种方式

一、参与到已有SIG的共建

参与者需要注册自己的官方账号,签订协议后,才能通过认领SIG leader发布的需求来承接共建任务。领完需求后是标准的开发过程,包括需求分析、功能设计、代码开发、功能测试、功能交付等步骤;任务开发完成后,需要提交PR,将代码、文档等提交到社区,完成最终的开源贡献。

二、主导SIG组

1、成立SIG

选取共建技术领域并给出规划 → 向PMC例会提交议题并通过评审 → 通过架构SIG例会评估后建立新的代码仓。

2、孵化SIG

启动需求澄清、特性梳理方案设计、代码开发、单元测试、功能测试等流程,完成SIG项目开发 → 对照Check List,完成法务、门禁、OAT等问题自检。

3、毕业SIG

向架构SIG申请新SIG毕业 → 向QA SIG会申请新SIG准出 → 仓库owner移仓。

辅助工具SIG实践经验分享

成立辅助工具SIG组的宗旨是“降低重复劳动,提高工作效率,让专业的人做专业的事”。NAPI框架代码生成工具、IDL转换工具和开机动画工具都是围绕着这个宗旨开发而成的。

一、NAPI框架代码生成工具

NAPI是标准设备上的JS API实现方式,实现了JS语言到框架C++层的调用,在OpenHarmony系统中,APP调用是调用JS语言的接口函数,最终具体功能是用C++语言来实现。

NAPI存在三个开发痛点需要解决:

1、NAPI框架代码的重复率高:面对不同的JS接口,开发者要实现相似度高的框架代码。

2、NAPI框架的学习成本高:框架机制涉及JavaScript、C++语言,以及编译脚本工具。

3、NAPI 需求量大:OpenHarmony系统功能均是通过NAPI接口体现,目前已经支持1万多个NAPI接口。

针对以上三个痛点,NAPI框架代码生成工具将C++ 、JavaScript接口类型转换等代码抽取公共模块,并且自动生成编译脚本。开发者使用工具自动生成NAPI框架代码,只需实现业务代码调用即可,避免了大量重复的工作。

二、IDL转换工具

OpenHarmony使用的是HDF驱动框架,驱动相应的硬件信息需要IDL文件来描述。

IDL存在两大开发痛点需要解决:

1 、HDI开发难度大:HDI开发者比较熟悉C语言,习惯在.h文件中定义HDI接口,而对于IDL文件结构、语法并不是很熟悉,学习曲线相对较长。

2、HDI工作量大:HDI接口是驱动对外提供服务的必要条件,各个子系统均涉及,故HDI工作量较大。

针对以上痛点,深开鸿设计的IDL转换工具将开发者熟悉的.h文件自动转换为idl文件,开发者只需要在头文件中定义自己的接口即可,工具自动实现.h头文件到IDL文件转换,开发者不需要关心IDL语法,大大降低工作量。

三、开机动画工具

开机动画工具是我们早期针对OpenHarmony2.0版本存在的问题做的一个辅助工具。

OpenHarmony2.0版本在开机动画方面有两个问题:

1、OpenHarmony2.0版本开机动画只支持raw文件,不利于开发者在发行版和定制版进行直接展现。

2、因为产品的形态不一,对于不同的产品,其开机动画的需求也是不同。

通过开机动画辅助工具使以上两个问题得到了更好地解决:

1、开机动画工具支持图片集或者 mp4等多种文件生成开机动画,且支持设置开机动画的分辨率等操作,更加方便开机动画的制作。

2、做到一键生成开机动画文件,并且支持在 windows平台上查看其效果,不需要每次都去烧录到开发板上,大大降低了演示的工作量。

四、辅助工具SIG共建方向

目前深开鸿主导的辅助工具SIG组主要提供给开发者文档资料、测试用例和工具开发3个共建方向。

如果你擅长文档编撰,那么可以参与到社区的文档贡献,撰写文档可以不需要有很强的开发能力。

如果你是测试人员,擅长自动化测试,那么通过测试用例也可以参与到社区的建设。

另外也欢迎各位开发者参与到各种工具的建设中来。SIG组的工具可以是独立的工具,也可以通过插件的方式集成到IDE开发软件中。

五、参与辅助工具SIG贡献的具体方式

1、提交问题单。无论是文档的bug、测试用例的bug、还是代码的bug,提交了问题单就是对社区做了贡献,那么辅助工具SIG组如何提交问题单呢?

首先找到对应的仓库并登录,例如https://gitee.com/openharmony/napi_generator/issues。

提交过程中要注意格式要求,必须写清楚提单过程中问题出现的条件,预期的结果和错误的结果,问题的定位信息等,有了这些信息后,领取这个问题单的开发也方便定位问题。

登录找到想要认领的问题单的页面,在评论中表达出想要承接这个需求的意愿,SIG的负责人会定期跟踪这些问题单并做出答复。

2、认领需求后进行开发流程

领到一个需求后要进行正常的开发,核心分为以下6步:

①通常开发者已经配置好配置码云账号、个人邮箱和签署DCO(签署DCO主要是保证贡献者原创),有了这些前置工作以后,我们可以操作代码仓库进行需求的开发。

②Fork代码到私仓。

③克隆fork出来的仓库到自己的主机上。

④在本地开发代码开发和功能验证。

⑤开发完毕后向官方原始仓提交Pull Request,提交代码后会触发门禁等常规检查。

⑥如果这个sig组是你自己主导的,那么作为Committer,需要评审别人提交的代码,如果只是参与共建,提交完代码通过门禁就完成任务。

内核SIG参与共建经验

关于深开鸿内核SIG共建经验,下面将以文件系统的优化为实例向大家分享具体的贡献过程。

内核共建的方向比较多,体系架构有各个硬件平台的移植,内核模块中功耗管理、时间管理、任务调度、中断管理、文件系统、三方库相关的内核shell命令移植,目前深开鸿主要在文件系统和第三方库方面做社区共建。深开鸿希望将来展开更多方向的优化工作,并向外提供具体场景下内核系统移植方案。

littlefs文件系统的共建过程:

1、了解社区需求,社区目前对littlefs文件系统随机读写的速度不满意。

2、了解到社区文件系统对随机读写需求的前提下,对littlefs随机读写IO性能瓶颈进行分析,找到能优化的代码点,采用了“以空间换时间”的思路。

3、采用逐步优化的思路,明确方案后和社区负责人沟通,得到了社区负责人认可后,展开具体的代码工作。

由于文件系统优化是一个比较复杂的过程,下面分享了一套社区共建流程。

1、从社区认领需求后,通过微信群的方式和社区负责人沟通并澄清需求。

2、从技术上分析需求并制定优化方案,再次和社区负责人沟通,做方案讨论并得到认可。

3、具体任务开发,包括任务拆解、编码实现、测试,最后提交PR。

针对littlefs文件系统优化过程中修改涉及到的相关文件,包括littlefs文件代码,也就是点c和点h文件;也有编译相关的文件,即.gn文件gni文件,之所以修改编译相关的文件是为了测试littlefs的优化后的代码,我们团队增加了相关的测试用例,这些测试用例会调用内核文件系统的API,涉及到这些编译相关的文件。

littlefs第三方库代码完成后提交到社区的过程

1、littlefs第三方库repository路径,并fork到用户仓库。

2、git clone用户仓到本地。

3、提交修改到用户仓。

4、点击提交PR。

5、填写PR单,PR单页需要按照既定模板填写,写清楚原始需求,如何解决这个问题,怎么解决这个问题以及具体修改点。

6、在评论中添加“start build”点亮PR。这里有一个特别注意的点,需要在评论中是手动填写“start build”这2个英文单词,目的是触发后续的门禁检测。这是OpenHarmony社区比较特别的一点,其它开源项目中所没有的。

欢迎感兴趣的开发者多方位参与OpenHarmony开源贡献,成为OpenHarmony Contributor,也欢迎各位提出宝贵的意见,为OpenHarmony贡献一份力量。

参与战“码”先锋,PR 征集令!在Gitee的OpenHarmony代码仓提交PR参与活动,和全球的开发者一起共建OpenHarmony的繁荣生态!

文章中涉及的链接汇总:

NAPI框架代码生成工具代码仓地址:

https://gitee.com/openharmony/napi_generator

IDL转换工具代码仓地址:

https://gitee.com/openharmony/drivers_hdf_core/tree/master/framework/tools/idl-gen

开机动画工具代码仓地址:

https://gitee.com/openharmony/graphic_graphic_2d/tree/master/frameworks/bootanimation/data/bootanimation_tool

转发原文到朋友圈,私信官方小助手,即可获取讲师演讲PPT

原文链接:30分钟成为Contributor|如何多方位参与OpenHarmony开源贡献? (qq.com)

30分钟成为Contributor|如何多方位参与OpenHarmony开源贡献?的更多相关文章

  1. 如何成为一名合格的Apache项目Committer,参与Apache开源贡献的正确姿势

    近日,孙金城老师在 "Open Source Promotion Plan - Summer 2020" 开源软件供应链点亮计划做了<如何成为一名合格的Apache项目Com ...

  2. 【原创】30分钟入门 github

    很久没更新了,这篇文章重点在github的入门使用,读者可以下载github for windows shell,边看边操作,加深印象. 好了,30分钟的愉快之旅开始吧: 一.github使用的注意事 ...

  3. 转:30分钟了解Springboot整合Shiro

    引自:30分钟了解Springboot整合Shiro 前言:06年7月的某日,不才创作了一篇题为<30分钟学会如何使用Shiro>的文章.不在意之间居然斩获了22万的阅读量,许多人因此加了 ...

  4. 30分钟学会XAML

    1.狂妄的WPF 相对传统的Windows图形编程,需要做很多复杂的工作,引用许多不同的API.例如:WinForm(带控件表单).GDI+(2D图形).DirectX API(3D图形)以及流媒体和 ...

  5. Shell脚本编程30分钟入门

    Shell脚本编程30分钟入门 转载地址: Shell脚本编程30分钟入门 什么是Shell脚本 示例 看个例子吧: #!/bin/sh cd ~ mkdir shell_tut cd shell_t ...

  6. JS组件系列——又一款MVVM组件:Vue(一:30分钟搞定前端增删改查)

    前言:关于Vue框架,好几个月之前就听说过,了解一项新技术之后,总是处于观望状态,一直在犹豫要不要系统学习下.正好最近有点空,就去官网了解了下,看上去还不错的一个组件,就抽空研究了下.最近园子里vue ...

  7. 2016windows(10) wamp 最简单30分钟thrift入门使用讲解,实现php作为服务器和客户端的hello world

    2016最简单windows(10) wamp 30分钟thrift入门使用讲解,实现php作为服务器和客户端的hello world thrift是什么 最简单解释 thrift是用来帮助各个编程语 ...

  8. 30分钟全面解析-SQL事务+隔离级别+阻塞+死锁

    以前总是追求新东西,发现基础才是最重要的,今年主要的目标是精通SQL查询和SQL性能优化.  本系列主要是针对T-SQL的总结. [T-SQL基础]01.单表查询-几道sql查询题 [T-SQL基础] ...

  9. 30分钟?不需要,轻松读懂IL

    先说说学IL有什么用,有人可能觉得这玩意平常写代码又用不上,学了有个卵用.到底有没有卵用呢,暂且也不说什么学了可以看看一些语法糖的实现,或对.net理解更深一点这些虚头巴脑的东西.最重要的理由就是一个 ...

  10. 【grunt第二弹】30分钟学会使用grunt打包前端代码(02)

    前言 上一篇博客,我们简单的介绍了grunt的使用,一些基础点没能覆盖,我们今天有必要看看一些基础知识 [grunt第一弹]30分钟学会使用grunt打包前端代码 配置任务/grunt.initCon ...

随机推荐

  1. 【LeetCode二叉树#05】平衡二叉树

    力扣题目链接(opens new window)](https://leetcode.cn/problems/balanced-binary-tree/) 给定一个二叉树,判断它是否是高度平衡的二叉树 ...

  2. 基于Python GDAL为长时间序列遥感图像绘制时相变化曲线图

      本文介绍基于Python中gdal模块,对大量多时相栅格图像,批量绘制像元时间序列折线图的方法.   首先,明确一下本文需要实现的需求:现有三个文件夹,其中第一个文件夹存放了某一研究区域原始的多时 ...

  3. 【Azure Developer】Go语言调用Azure SDK如何登录到中国区Azure环境

    问题描述 在 "使用 Azure SDK for Go 进行 Azure 身份验证" 文章中的 Go 示例代码进行登录Azure时,默认指向的是Globa Azure.当只修改AA ...

  4. 【Azure 应用服务】Azure Function在执行Function的时候,如果失败了,是否可以重试呢?

    问题描述 Azure Function在执行Function的时候,如果失败了,是否可以重试呢? 问题解答 Function app默认是不开启重试的,但是可以修改 host.json 文件来定义重试 ...

  5. 固态硬盘使用f2fs作为根分区安装linux

    目录 前言 碰到的问题 对策 我的实际操作步骤 0.警告 1. 准备 2. 分区 3. 使用网络安装debian10 4. 备份根分区 5. 修改固态硬盘linux根分区为f2fs 6.恢复备份 7. ...

  6. stm32OLED多级菜单

    今天实现了OLED多级菜单的显示.我用的是stm32f103ve,和四脚的OLED屏幕,用了三个按键. 话不多说,直接上代码. 点击查看代码 //先定义按键功能结构体 typedef struct { ...

  7. Java //遍历100以内的偶数,获取所有偶数的和,输出偶数的个数

    1 //遍历100以内的偶数,获取所有偶数的和,输出偶数的个数 2 3 int i =1; 4 int sum = 0; 5 int count = 0; 6 for(i = 1;i<=100; ...

  8. Java基础全程复习笔记(值得参考)

    Java基础复习笔记 第01章:Java语言概述 1. Java基础学习的章节划分 第1阶段:Java基本语法 Java语言概述.Java的变量与进制.运算符.流程控制语句(条件判断.循环结构).br ...

  9. TLS原理与实践(二)

    主页 个人微信公众号:密码应用技术实战 个人博客园首页:https://www.cnblogs.com/informatics/ 引言 在上一篇博客中,我们通过<一文读懂TLS1.2协议](ht ...

  10. PlacementList must be sorted by first 8 bits of display_id 问题

    问题暂未解决 [37484:0811/103448.115:ERROR:display_layout.cc(551)] PlacementList must be sorted by first 8 ...