「龙蜥开发者说」第 13 期来了!开发者与开源社区相辅相成,相互成就,这些个人在龙蜥社区的使用心得、实践总结和技术成长经历都是宝贵的,我们希望在这里让更多人看见技术的力量。本期故事,我们邀请了龙蜥社区开发者姚胤楠来分享「开源是场马拉松!来自广州大学姚同学的开源成长记 」。
欢迎阅读上期故事《一人行快,众人行远!在龙蜥社区的日子,我想说这些》。开发者说系长期活动,对于积极投稿、多次分享的童鞋,我们还有神秘大礼鼓励!诚邀开发者们分享真实体验,以文会友、共同学习、一起进步。
本期故事主角:姚胤楠,大学研二学生,个人研究方向是容器运行时安全,主要涉及到使用 eBPF 等技术对容器运行时安全进行实时监控和追踪取证等方面的研究。
大家好,我是姚胤楠,目前就读于广州大学,是网络空间安全学院的一名研二学生,个人研究方向是容器运行时安全,主要涉及到使用 eBPF 等技术对容器运行时状态进行实时监控和追踪取证等方面的研究。
在学习容器安全过程中,我深入了解了安全容器 Kata Containers 项目并产生了浓厚兴趣。我深信开源领域是值得人们去探索的未来,它并不神秘,但却引人入胜,点燃了我们年轻人投身学习的热情。入门之初,空有热情却没有方向的我就像一个无头苍蝇,一直在寻找入门的机会。直到今年一月,有一位前辈提示我,既然如此热爱开源,那为什么不加入到开源社区里呢?那里有更多的开源人才,能结交志同道合的人,也能学到更多的开源知识。
得到这个提示,我才意识到我差点错过一个绝佳的学习机会!要知道,当前进的过程中遇到阻碍的时候,受到专业人士的指点,比自己进行盲目摸索的效率不知要高多少倍。借助当时遇到的项目,我正式加入了 Kata 社区中,开始了我的容器项目研究之旅。
在参与社区的过程中,起初的工作是搭建开发环境,做一些兼容适配和修复 BUG 等简单的工作。但当我逐渐熟悉了开源社区的工作后,也融入了社区氛围的时候,便开始尝试协助导师组织和主持容器相关课题的周会。
参与项目的半年多的时间里,让我从一个学习者成长为了一名开发者,也从当初参与者的身份转变成了如今的组织者。这些角色的转变,不仅仅是身体上加入了开发者社区,也让我的精神得到了满足。在这个过程中,不仅精进了我的计算机技术,而且学到了如何去更好地交流、合作,还结识了各个企业的开源前辈和同样来自高校的朋友。
在这段开源之旅中,我非常荣幸获得了 OpenInfra Days 2022 China 社区新星的称号,这个奖项对我来说是莫大的肯定,鼓励着我走向开源的远方。今后我也会持续关注 Kata 3.0 的建设工作,希望能够更好地为这个项目做出贡献。
在完成了大部分 Kata Containers 项目相关内容后,我发现一直在关注的阿里巴巴编程之夏(ASOC)活动开始了 2022 年度的报名比赛。看到龙蜥社区在此次活动中发布了 8 个开源项目,其中有一个是关于「基于 dragonball-sandbox 开源组件搭建简易虚拟机」的任务,我不假思索地报了名。报名后加入了龙蜥社区,在龙蜥社区项目导师的指导下,顺利地完成此次活动项目,从而有了一个精彩的编程之夏。
我始终认为开源社区是交流的社区,只有交流合作才可以更好地打造一个个顶尖的项目。如果说加入 Kata 社区源于我对开源世界和安全容器的兴趣爱好,那么加入龙蜥社区,选择这个项目则是来自我对开源技术的探索与追求。除此之外,我在龙蜥官网上发现有近 50 个技术 SIG(Special Interest Group) 组,对其中一些 SIG 组也很感兴趣,比如 eBPF 技术探索 SIG,因为它与我在学校的研究方向有很大关系。
我在编程之夏的旅程是由一个一个任务堆起来的,每周的任务从项目的架构设计到 CLI 模块,再到 CPU 虚拟化、内存虚拟化和设备虚拟化,充实而艰难,但完成这些项目后所获得的成就感是巨大的。项目代码的实现,以及如何去总结对自身而言晦涩难懂的知识并输出的过程都是我点滴的积累。经过几个月持续不断的输入、输出,我终于得到了一个结论性的成果——基于 dragonball 组件搭建的简易虚拟机 Miniball。
(图 / MiniBall 的架构:展示了 CPU 虚拟化、内存虚拟化、设备虚拟化、加载内核的各个模块及所依赖的 crates)
在搭建 MiniBall 的过程中,我遇到过很多的困难。首先就是对于 Rust 语言的实践。在参与龙蜥社区 Dragonball 项目之前,我对 Rust 语言的基础还只停留在命令行工具,而 Rust 本身又是一个学习曲线较为陡峭的语言。
知识在于积累!在阅读 rust-vmm 和 Dragonball 项目源码的过程中,如果有钻研不透的问题我都会随时请教龙蜥社区导师,就这样在项目开发期间我一直保持不懂就问的态度外加练习,终于感觉入门了 Rust 语言。在这个项目中,我也是第一次接触虚拟化,在完成 MiniBall 之前,开发虚拟机对我而言是从未设想的任务。
项目任务的困难是我接受的巨大挑战,我不得不承认,若是自己从零学起,要完成任务恐怕遥遥无期。但在阿里巴巴编程之夏这里得到了龙蜥社区前辈们的引导后,我用了更为顺畅的学习曲线去掌握这些知识。比如在实现 CPU 虚拟化部分的时候,不仅仅要实现代码内容,还需要结合原理输出一份文档,这个过程对于初学者的我是相当困难的。
输出文档就意味着需要理解了 CPU 虚拟化的原理并尽可能用自己的表述进行产出。在这个过程中,我的指导老师吴老师给我了极大的鼓励,他让我勇敢迈出了第一步——先写出大概的框架,再通过回顾和交流不断补充内容、完善细节,直到现在这一份文档变得完整且详细。
当一份文档完成,之后其他的开发过程和文档输出就相对明朗且顺畅。
我提交的每个 PR 和 issue、写出的每一篇文档,都是我一步一个脚印迈向远方的基石,是我颗粒般的知识在聚沙成塔。所以当项目任务结束,我抬起头看到目的地就在眼前的时候,心里由衷地感谢为此奋斗过的每个日夜。
当我回头看这段时间用过的技术、写下的每一行代码,才意识到我不知不觉间已经建立起了初步的知识框架,但是我很清楚的知道那都不是一蹴而就的,是我这段时间努力的每个瞬间汇聚在一起的结果。
(图/MiniBall 项目完成过程中共提交合并了 13 个 PRs,涵盖 CPU 虚拟化、内存虚拟化、设备虚拟化、架构文档和使用指南等多项内容)
这只是我在龙蜥社区参与的一个项目,我却可以把它作为一个开始。今后我很期待能够成为一个可以做出贡献的开发者,就像我希望在社区中不仅仅参与项目代码维护和功能支持方面的任务,可以尝试更深地去参与社区项目技术路线的讨论,将自己的想法与社区成员探讨和碰撞。
(图/MiniBall 的项目代码展示)
我也关注到龙蜥社区目前正在开展「人人都可以参与开源」活动(活动地址见文末)。我个人觉得这是个非常好的活动,因为开源对于在校学生而言是一个很好的成长机会,学生们通过这个活动也能够接触到业界前沿的技术。但是学生往往会因为开源项目涉及到的技术较难而犹豫是否要参与到社区中,所以这个活动非常友好地给技术还不那么成熟的学生群体或其他想参与开源的初学者、爱好者提供了机会。不过,我看到目前公开的任务还较少,参与活动的 SIG 还较少,希望未来有更多的项目、SIG 涉及更广的任务能够开放给对开源感兴趣的开发者。
也许有不少同学也像我一样对开源社区和虚拟化感兴趣,但是苦于没有引路人,只能埋头自学,在看到社区技术比较难的时候就容易放弃,请不要惧怕,积极勇敢地参与到一个社区吧,这会是其中成长最快的道路之一。
社区中有前辈能够指导正确的路线,让学习的过程少走弯路。而那些对开源尚且还不了解、还在开源大门外徘徊的同学,也不要犹豫,走进来也许就能学习到前沿的技术,认识有趣的人,开启一段新的故事。开源更像是一场马拉松,坚持是最重要的,尽自己所能,在自己的兴趣驱动下去积极的贡献社区,希望未来我们都能共同建设一个更加精彩的开源世界!
相关链接地址可移步龙蜥公众号(OpenAnolis龙蜥)2022年11月24日相同推送查看。
更多龙蜥开发者的故事,可阅读往期开发者说:
【1】一人行快,众人行远!在龙蜥社区的日子,我想说这些 | 第 12 期
【2】海纳百川,有容乃大,我在龙蜥社区的升级之旅 | 第 11 期
【3】我眼里的龙蜥社区:一个包容的大家庭 | 第 10 期
【4】社区首个支持 LoongArch架构的操作系统构建之路 | 第 9 期
【5】首次触电,原来你是这样的龙蜥社区?| 第 8 期
【6】不忘初心,方得始终 | 第 7 期
【7】我的操作系统之路,坚持从实践中来,到实践中去 | 第6期
【8】从零开始的创造,是动力也是挑战 | 第5期
【9】学无止境的 Linux ,以及我的第一个定制版本发布之路 | 第4期
【10】聊一聊我技术生涯的“三次迭代” | 第 3 期
【11】从入坑到入门 | 第 2 期
【12】做开源,兴趣是最好的源动力 | 第1期
「龙蜥开发者说」投稿可参看:「龙蜥开发者说」征稿啦!
欢迎大家来稿分享您在龙蜥社区中的点滴~
—— 完 ——