龙蜥开发者说:一个人出发,一群人抵达 | 第 26 期 原创
「龙蜥开发者说」第 26 期来了!开发者与开源社区相辅相成,相互成就,这些个人在龙蜥社区的使用心得、实践总结和技术成长经历都是宝贵的,我们希望在这里让更多人看见技术的力量。本期故事,我们邀请了龙蜥社区开发者宾凌宇来分享「一个人出发,一群人抵达」。
欢迎阅读上期故事《天津大学同学分享“走入龙蜥赛道,推开开源大门”》。开发者说系长期活动,对于积极投稿、多次分享的童鞋,我们还有神秘大礼鼓励!诚邀开发者们分享真实体验,以文会友、共同学习、一起进步。
本期故事主角:宾凌宇,龙蜥社区 rust 工具集SIG组核心成员、系统研发工程师,2023 年获龙蜥社区最佳 SIG 称号。主要从事 rust 语言重构相关工作,在社区建设期间,负责 utsudo 项目的开发和维护。
我第一次和龙蜥社区打交道是在关于机密计算的调研中,那个时候,不管是操作系统还是机密计算都是刚接触不久,还有许多地方亟待了解。开始与社区成员交流时我也偶有担心和顾虑,怕我提出来的问题在对方看来过于简单不值一问,后来发现每次剖出的问题都收到了社区伙伴的的耐心回复,关于项目的情况、关于环境的搭建,这些疑惑被一一解答,他们就像引路者一样,带着我一步步成长。
刚开始其实也没有想过自己后来也会成为龙蜥社区里的一员,算是一次很偶然的机会,utsudo 项目的开始让我加入了龙蜥社区 rust 工具集 SIG(Special Interest Group)组。rust 工具集 SIG 组主要涉及 rust 语言重构以及内存安全相关的项目,目前 SIG 组已有的两个项目分别是 utsudo 和 utshell。utsudo 项目是使用 rust 语言重构的 sudo 命令,utshell 项目是使用 rust 语言重构的 bash 命令。
我主要参与的是 utsudo 项目的开发和维护,rust 相对而言是一门比较新的语言,但它有一个非常突出的特性就是安全。rust 通过所有权、借用和生命周期检查机制来实现内存安全性,这些机制可以有效地防止内存泄漏、空指针引用和缓冲区溢出等问题。如下图所示,在 rust 中,如果变量离开作用域后就不再有效,不需要开发者手动释放内存,有效避免了因忘记释放内存而导致内存泄漏的问题。此外,rust 还提供了一些严格的编译时检查,例如借用检查、声明周期检查等,以确保代码的安全性。
(图/rust 作用域)
这对于操作系统行业是极具吸引力的,但无论一个语言多么优秀,只有自己真正掌握才是最重要的。于是我开始了我的 rust 之旅,最初也只是抱着个人成长的目的去学习,配合着书籍和视频做一些简单的项目练习,但零散的学习对于知识的掌握还是有限且不扎实的,而 utsudo 项目是一个挑战也是一个机会。加入 rust 工具集 SIG 组参与 utsudo 项目之后就不再是一个人的旅途了,我们开始调研已有的 rust 重构项目、协助重构的工具进行学习和借鉴,毕竟站在巨人的肩膀上才能看得更远。项目重构过程中小组成员都会将自己学习到的新知识点、遇到的问题以及解决方案记录下来,成员之间再一起交流和探讨。遇到卡点或疑惑的地方也都会没有顾忌地把问题抛出来,大家积极参与讨论,基本事事有回应。一个人的能力是有限的,但一个相互合作的团队的力量是很强大的,大家从不同的经验和角度出发,带着各自的见解和观点进行交流,相互分享知识、技能和经验,同时也从他人的分享中获得新的启示和灵感,共同学习成长。我想这也是社区存在的意义之一吧,让成员不再是被动的听众,而是积极参与者和主动学习者。
我们规划 utsudo 项目分为三期实现,分别进行 lib、src、plugins 目录下的代码重构。lib 库用于提供一些公用的工具函数等;src 实现具体的提权流程、命令解析等功能;plugins 则是插件库的具体实现,像 pam 验证等功能是通过插件实现的。
(图/utsudo 项目框架图)
目前 utsudo 项目第一期的开发已经完成了,lib 目录下的 38 个文件全部用 rust 语言进行了重构,通过编译生成了 libutsudo_util.so 动态库。调用 libutsudo_util.so 动态库生成的 utsudo 命令功能和使用也都和 sudo 一致。
(图/utsudo 项目一期代码的语言分布情况)
无论你是一个人踏上旅途,还是与伙伴携手启程,旅途中总会遇见一群志同道合的人。这些人可能在不同的站点加入,也可能在同一个起点和你并肩出发。在龙蜥社区有一群志同道合的人,就像是一首交响乐中的不同乐器,尽管音色各异,但在一起却能奏出和谐美妙的乐章。每个人的出现都可以为龙蜥社区增添独一无二的色彩,让原本一个人的旅途变得丰富多彩。最后,希望更多的人能够加入到龙蜥社区来,这是一个充满活力和创造力的平台,会给你想要的答案。
更多龙蜥开发者的故事,点击下方图片阅读:
—— 完 ——