你也对开源感兴趣?快来!
最近几个月的时间里,我前前后后参与了几个开源项目,感受到了开源的快乐,也有了很多新的收获和体会,就用这篇文章简单记录一下吧!
我的开源之路
KCL
Kusion 配置语言(KCL) 是一个开源的基于约束的记录及函数语言。KCL 通过成熟的编程语言技术和实践来改进对大量繁杂配置比如云原生场景的编写,致力于构建围绕配置的更好的模块化、扩展性和稳定性,更简单的逻辑编写,以及更快的自动化集成和良好的生态延展性。
和 KCL 社区的缘分从好几个月前就开始了,当时只是简单的给他们修了一些小问题,Peefy 就通过 Slack 联系到我并邀请我加入他们的开发者群中。后面他还发了一些社区的小周边,给我带来了不小的惊喜,也让我第一次感觉到原来开源社区也是可以如此热情和活跃的。
之后在暑假的开源活动 GLCC 里,我也顺利参与到了他们的一个课题中,开发一个将 YAML 等格式的数据转换为 KCL 格式的小工具。虽然一开始什么都不太会的时候有点折磨,但整个开发的过程我感觉是非常舒服的,Peefy 作为我的导师,不仅在整体规划上给了我一些指导,也在具体的代码细节中给了我很多建议。而在参加社区的双周会时,我也看到了许多来自不同公司、学校,拥有不同技术背景的开发者,共同在会议上交流碰撞(虽然我自己说不上几句话…),感觉整个社区的氛围都非常好。
(图为 import 工具效果演示)
GLCC 顺利完成,这也是我第一次给开源项目贡献这么多的代码。看着 PR 一个个被合并,成就感真的拉满!在这里也感谢 KCL 社区和社区里的各位小伙伴,他们在我开发过程中给了我很多的想法和建议,真的非常有帮助!
项目地址:The KCL Programming Language (github.com),欢迎感兴趣的同学都来看看
RustSBI
Rust 中的 RISC-V Supervisor 二进制接口 (RISC-V SBI) 库,对嵌入式 Rust 生态系统的良好支持。除此之外社区还有一些国产软硬件有关的支持子项目
最初与 RustSBI 接触是在学院的一个开源贡献活动中,其它几个可选的项目看着都没啥意思,而且当时正好在学习 Rust 语言,就加入他们看看是啥东西了。
虽然名字是叫 RustSBI,但项目的主仓库其实已经基本稳定,没什么修改的计划,更多在做的是用 Rust 给 RISC-V 的几个国产芯片写一些运行环境、外设驱动之类的项目(当时我们的群名也是叫什么 RISC-V 学习小组,说白了就是嵌入式开发)。这个方向我还是第一次接触,只能凭借仅有的 Rust 知识在各种 no-std 的代码里摸爬滚打,幸亏项目的主要成员洛佳是个非常牛的大佬,不仅技术过硬而且十分热情,不管遇到什么问题,只要他有空,咔咔咔就给你解决了,现场就能帮你从代码细节到整体结构到 commit 和 PR 的提交全部搞好,真的太厉害啦!也正是在他的指导下,我们从零开始,用 Rust 在这块开发板上成功点亮了这个小小的 LED 灯。
之后的事情就是为这块板子开发了一些外设驱动,基本上是照着已有的实现,依葫芦画瓢,把外设寄存器和一些相关的操作函数写好,再根据实际情况提供一些抽象就完成了。看着都还挺好,但毕竟是嵌入式开发,总会有一些神秘的问题。比如说,想让一个外设跑起来还得进行一些配置,但给的文档往往只是简略的说了几句,实际怎么配置,要不就祈祷上帝保佑直接能跑,要不就看看官方给的 C 语言例子和 SDK 是怎么做的(更多情况下是这个)。可是即使是照着官方的例子配好了,有时候也还是没有任何效果,真的太神秘啦!往往还得靠嵌入式开发和调试的魔法来解决:GDB 或者是用逻辑分析仪抓取信号。过程有点曲折,但终于我们还是完成了 I2C、SPI 等一个又一个外设的编写。
(图为利用 PWM 外设将 LED 灯变为呼吸灯)
再之后,我们还在校内举办了开源工坊,最近的一次就有十多个人参加;还定制了调试的板子来编写和分析 SDCard 读写… 写的东西越来越多,我也对嵌入式开发越来越了解,事情也变得越来越有趣了。编写寄存器相关的代码,对内存、栈的直接操作,还有对信号进行分析,我开始发现计算机组成原理中那些枯燥的知识其实是一切的根本;实现一个 crate 就能用上一个库里的其它函数,我逐渐明白抽象在软件工程里是多么伟大的存在;加速文件读写需要设计 Block 缓存,在 15-445 里学到的缓存池管理派上了用场,原来知识确实都有相通之处!
最终目标是,在这块小板子上运行 UEFI,启动操作系统!
项目地址:RustSBI (github.com),RustSBI (gitee.com),欢迎感兴趣的同学都来看看
Sonic
Sonic 是一个用 Go 语言开发的博客平台,功能完成,简单易用,可自定义主题,有强大的后台管理面板,支持多种方式一键部署
本来是打算自己搓一个博客平台的(谁没有过自己从头到尾搓一个完整的博客的想法呢!),于是就在 Github 上到处看看大家写的博客平台都是什么样子的,于是就发现了这么一个项目。但是吧,实在是没时间自己搓了(好吧其实就是懒得写),想着反正搓了也没什么人看,意义不是很大,不如就直接在别人的基础上继续发展吧,于是就开始关注 Sonic 社区并给做点小贡献了。没错!我现在的博客也是使用它搭建的!
Sonic 的原作者也是个挺好的人,issue 和 PR 都会及时处理,我也趁着有空把能修的问题都修了。作者也邀请我加入组织,成为 Maintainer。也是在做了一小段时间的 Maintainer 之后,才发现维护一个开源社区还是挺多事要做的,除了解决 issue 里的各种问题,还要审核大家提交的 PR,给出正确的引导,为项目做一些长远规划,发布新版本等等,这才发现想成为好的 Maintainer 还有很长的路要走啊。之后也有过一些比较大的想法,不过因为有别的事情比较忙就搁置了,加了作者的好友也还没说上几句话…
总的来说,Sonic 确实是一个优秀的项目,如果你也想搭建一个自己的博客,可以尝试一下。它的代码并不算复杂,如果你在学习 Go 语言也可以关注一下,说不定也能做点开源贡献呢!
项目地址:go-sonic (github.com),欢迎感兴趣的同学都来看看
除了上面提到的以外,还有一些其它的项目,我的贡献也不是很多,就不细说了。
感受
总的来说,我还是非常喜欢参与开源项目的,不仅学到了许多技术知识,还可以和一群志同道合的朋友,共同创造令人惊叹的成果。编写的每一行代码,都有机会被几千几万的人看到,创造不可估量的价值,这带来的成就感,绝对不是加权拿个高分,或是自己做做 Lab 所能比的。如果你也对开源感兴趣,别犹豫,开始你的开源贡献吧!