专访|openEuler 马健尧:与其瞻前顾后,不如先尝试

2023/10/19 17:58
阅读数 18

开源之夏专访


2023 #10






开源之夏专访持续开放中,欢迎已从开源之夏毕业或正在参与开源之夏活动的学生、导师一同加入专访行动,扫描文末二维码填写专访问卷,与大家分享你眼中的开源之夏!
本期采访人物是开源之夏 2023 活动  openEuler 社区中选学生马健尧同学,他所承担的 项目是  KubeOS 镜像构建支持定制化配置
项目链接:
https://summer-ospp.ac.cn/org/prodetail/23b970506

# 关于马健尧
OSPP:请简单介绍一下自己。
马健尧:大家好,我叫马健尧,是西安邮电大学计算机科学与技术专业 21 级的一名学生。我日常主要使用 Golang 进行开发,对云原生技术以及如何通过云原生技术为 AI 场景提升算力十分感兴趣。

OSPP:你作为在读本科生,已经有了较为丰富的项目开发和开源经历了,这些经历为你带来了什么。简单介绍一下你一路走来的心路历程吧?

马健尧:对于我来说这是从迷茫到坚定的一个心路过程,大一下学期时我仍在考虑自己该用什么语言进行开发?走错路了怎么办?大二上学期“项目”在我眼里仍然是高大上的一个名词,而大二下学期时我已经能够在开源之夏中完成一个像样的项目开发了。期间走过很多弯路,我最宝贵的收获就是:行动起来,思而不学则殆我们只有开始产出的时候才能想明白一些事情,与其瞻前顾后,不如先尝试


# 参与开源和开源之夏

OSPP最初是如何了解到并决定参与开源之夏活动的?

马健尧:我是 2023 年 4 月底时才了解到开源之夏活动的,我的操作系统陈莉君老师在鲲鹏校园行中演讲时提到了这一活动。在演讲中我感受到了开源的美好愿景,开源之夏提供了非常好的一个平台,让学生们可以在导师的指导下对开源社区进行探索与学习,同时能够提升学生技术视野、接触行业前列的开发人员,这些机会与挑战让我兴趣盎然

OSPP请简单介绍一下你在本届活动中承担的开源项目,在开发过程中有什么印象深刻的经历么?

KubeOS 镜像构建支持定制化配置

KubeOS 是在 openEuler 社区孵化,基于 openEuler 的容器操作系统(简称为容器 OS),KubeOS 是面向云原生场景,专为容器和集群运行而设计的轻量化操作系统。目前 KubeOS 已提供 OS 镜像的构建工具,但是用户使用的场景不同,需要更加灵活的 OS 镜像构建能力。本项目期望是优化 OS 镜像构建工具,增加镜像定制化配置的能力,提供更加灵活可用的镜像制作能力。
项目链接: https://summer-ospp.ac.cn/org/prodetail/23b970506

马健尧:我在本届活动中承担的开源项目是 KubeOS 镜像构建支持定制化配置。我需要构建一个命令行工具,满足用户在创建镜像时对存储配置、文件配置、用户配置、systemd service 的需求,开发过程中遇到不少挑战。

第一个问题是在对项目各个参数进行设计的时候,我需要考虑满足存储配置中,为了让 persist 分区不占用全部空间,支持 boot、rootA、rootB 以及新增分区进行划分的话,应当设立哪些参数?这涉及到了转换为 shell 语言时,我的命令如何编写,所以希望尽量简洁。最开始我打算沿用创建过程中,通过命令行调用 kbimg.sh 时的 -p、-v 的模式来完成这个功能,通过新增三个边界参数,来为四个分区设定大小:

可后来考虑到有个新的需求是支持创建多个分区,变动的参数不便于直接调用 kbimg.sh,需要生成一个新的脚本,于是有了这样的结构:

第二个问题是内存边界,当我在分配空间时,提示

错误: 您要求将分区从 4280MB 移动到 21.5GB (扇区 8359375..41943039)

我们可以管理的最近的分区是从 4488MB 到 21.5GB (扇区 8765440..41943006)

奇怪的是,我临近分区的大小以 4280 为边界,这个分区为什么不能以 4280 开始呢?

查了很久的资料,很有可能是 parted 为了防止分区冲突,在每个分区边界附近保留了一个小的缓冲区导致的这个问题。

从操作系统的角度来看,分区表和文件系统的区别需要注意:

  1. 分区表操作是在块设备的元数据中定义分区起止位置,并不真正占用空间。

  2. 而初始化文件系统是在这些分区内真正写入数据占用空间。

parted 在移动分区位置时,是操作分区表的元数据,调整起止位置信息。这时可能会在分区边界留出很小的缓冲区(比如 512 字节),从而造成实际可用空间比显示的少一点。

但文件系统在格式化分区时,会将整个分区空间全部使用。所以文件系统格式化后,可用空间会比 parted 显示的稍大。这个细微的差异,加上 parted 内部为防止重叠保留的缓冲区,就可能导致这种奇怪的错误。

还有一个有意思的问题,就是 efi 模式下创建的分区表是 gpt 格式,允许直接创建多个主分区,而 legacy 模式下创建的分区表是 msdos 格式,只能创建三个主分区,一个扩展分区,之后才能在此扩展分区之上创建多个逻辑分区。由于是不常出现的问题,因此想要找到解决方法只能慢慢的查资料,从 parted 的使用文档中读,这个过程很熬人,也很有收获。当然,在 git 、Go、code conduct 等方面也学到了很多知识,就不展开叙述了。对待问题我想和大家说的是:没有一开始就完善的程序,我们能看到的优秀项目如 Kubernetes,KubeOS 等都是经过多轮迭代升级而来。直面我们的错误,找出解决的方法,这一过程是很好的锻炼。

下面附上我的最初设计思路和最终设计思路,可以看出还是有许多变化。

OSPP作为学生如何发掘自己的兴趣方向,找到自己热爱的开源社区?

马健尧:最好的方式是把视野放宽,注意 beyond the code,技术方向可太多了,前端、后端、ios、安卓、云原生、web 开发、客户端开发....我们要关注现实生活中自己擅长的、感兴趣的事情,才能找到自己热爱的开源社区。举个例子,我被 chatGPT 吸引了,意识到人工智能会给人类未来生活带来巨大变革,也意识到算力需求将会指数级增加,那么如何提供这个算力?了解云原生技术 -> 有哪些开源社区正在致力于这个方向 -> 找到对应社区 -> 阅读社区文档 -> 选择一个自己最感兴趣的。

OSPP当前很多学生并不容易迈出参与开源社区的第一步,你认为学生如何有效参与开源社区?学生与开源社区之前能否建立长久的关联?

马健尧:这个问题我在参与 KubeOS 的时候通过自己琢磨、向李元戎导师的请教下,总结出了一个“参与开源社区的最佳实践”,上一个问题我们说到如何选择开源社区,这里我就介绍如何参与项目贡献
  1. 阅读社区的文档,一般完善的社区会有帮助你理解项目功能、各模块功能的 quick-start 文档;
  2. 找到一个感兴趣的功能运行,因为一个大型开源项目会有很多功能模块,例如 KubeOS 就有着 agent、proxy、operator、kbimg 模块;
  3. 读源码,看看这个功能是怎么实现的,相信现在有各种人工智能的帮助,读源码对同学们来说会方便很多。
当你掌握了一个功能的实现之后,你可以
  1. 观察是否有可以优化的地方,如果有,请尝试提一个 issue,如果社区觉得你的想法很棒,你就可以尝试完成你的 issue;
  2. 关注社区 issue,是否有你能够完成的,如果有,请积极的申请它,它可能是几行代码的改动,也有可能是新增一个功能模块。
做到以上几点,你就能有效地参与开源社区了。
学生与开源社区之间建立长久关联,在我看来需要两个要素,一是兴趣,二是贡献。兴趣会让学生乐于学习社区项目;而贡献能够给学生带来自豪感与归属感,提到社区就像回到家一样,自然会产生长久的关联。
OSPP:你眼中的 openEuler 是一个什么样的开源社区?之后是否打算继续参与开源社区或开源项目?为什么?
马健尧:我眼中的 openEuler 社区是一个生态多样、布局广泛、充满可能性的社区。openEuler 的生态链繁荣、案例丰富、文档很多,对开发者友好。大家只需要点击 openEuler 的官网就能感受到这些特点,我觉得最不同于其它社区的是,openEuler 对高校学生的培养很用心,许多与高校相关的开源活动你都能看到 openEuler 的身影,这对于新鲜血液的注入很有帮助,也是大部分社区没有注意的方向。
之后我也希望能够继续在 KubeOS 项目中做出更多贡献,在此次开源之夏活动中,我获得了许多收获与成长。开源项目提供给我们一个机会,能够接触平时接触不到的优秀开发者所开发出的项目,我们可以近距离地感受高级开发者是如何开发一个功能的,体会他们在一个庞大项目背后的思考。

openEuler 社区

欧拉开源操作系统(openEuler, 简称“欧拉”)是面向数字基础设施的操作系统,支持服务器、 云计算、边缘计算、嵌入式等应用场景,支持多样性计算,致力于提供安全、稳定、易用的操作系统。通过为应用提供确定性保障能力,支持 OT 领域应用及 OT 与 ICT 的融合。欧拉开源社区通过开放的社区形式与全球的开发者共同构建一个开放、多元和架构包容的软件生态体系,孵化支持多种处理器架构、覆盖数字设施全场景,推动企业数字基础设施软硬件、应用生态繁荣发展。

官网:https://www.openeuler.org/zh/

OSPP:参与开源之夏有让你对开源和开源社区有什么新的认识么?
马健尧:在参与本次开源之夏之前,开源和开源社区对我来说都很“神秘。而现在如果要让我谈开源,我会用两个词概括,那就是“热爱”、“前沿”。关于“热爱”,开源贡献者可以是任何人,只要你有这个意愿,来自天南海北的人可以为了同一个目的贡献自己的力量,出发点是很纯粹的,就是因为喜欢这个技术,在生活中,我很少看到这样的凝聚力。而关于“前沿”,大部分的开源项目都是基于需求发展的,如 Kubernetes 是顺应容器的编排、调度而发展;KubeOS 顺应业务以容器形式运行的场景而发展。可以说最热门的开源社区,一定程度上代表着当下最前沿的技术。
不过对于高校学生,我有别的话要说:你可以先做起来,再找热爱。我明白在繁杂的学业、琐事当中,从一名小白进化到一名熟练开发者需要很大的努力,不过时间不等人,想要提升自己的竞争力,需要在大三大四时积累足质足量的开源经历、实习经历、项目经历,如果你在参与什么社区、喜欢什么技术、使用什么语言上纠结太久,是得不偿失的一件事。开源社区通过活动获取新鲜血液的注入,学生也通过参与开源来提升自己的技术视野、编程能力,所以开源与学生是互相成就的关系。不要畏惧和开源社区的成员交流,他们都很随和,很乐于看到有新人在参与学习,所以请大胆提问、大胆尝试。


# 寄语

OSPP:高校的教学内容与实际的开发环境是否有差异?学生应该如何自学更好地适应实际需求呢?

马健尧这是困扰绝大部分计算机相关专业同学的问题,我在与不同学校、不同年级的同学交流之后得出这样一个看法:培养方案并不适合所有人。我相信培养方案的目的是自底向上,将各个底层知识全部打通,让学生拥有十分扎实的内功,可是大部分学生在自学时会感受到高校教育内容与实际开发环境有极强的割裂感。这样的培养方案造成了一个现象:想要直接就业的学生们倍感焦虑,绝大部分学生被推向考研。由于时间限制,大三需要实习、秋招,在校内将课程学好,想要投实习、找工作的时候却发现自己学的知识与工作需求并不匹配。比如计科专业是软件和硬件交叉学习,这对于在探索后想要走软件方向的学生是十分苦恼的。秋招、春招的时候发现自己没有实习经历、项目经历,于是被迫考研。国家也注意并重视这一现象,正在积极改革,不过预计得在 27 届之后。

我与正在北邮读博的师哥交流时,询问他对读研、读博的看法,以及他为什么选择读博?他坦诚地说他一开始读研是比较迷茫的,因为毕业也不知道自己可以做什么工作,看许多人都在考研,于是自己也选择考研。好在他是一个沉静、爱科研的人,因此才不后悔自己的选择,现在获得了许多进步,做出了自己的贡献。不过他还是感叹道,他毕业的年纪,许多同学选择了直接就业,和他们对比,自己得到了一些,也失去了一些,所以一定要谨慎选择,想好自己想要的到底是什么,切勿盲目随大流。
学生为了更好的自学、适应实际需求,应当采用自顶向下的方式,如果认为自己更倾向于直接就业,那就从各个公司招聘官网上查看岗位的需求,由此做到有目的的学习。

从这个 Golang 工程师的需求举例,我们可以获取哪些信息?

  1. 学习计算机网络、操作系统、数据库、数据结构与算法;

  2. 学习进程间通讯编程;

  3. 学习存储系统;

  4. 学习 shell 工具;

  5. 学习后端服务技术栈。
由此一来,你就可以拥有自己的进度,不需要纠结学校的重点课是在大三开还是在大四开了。

至于语言的选择,其实每个语言都有其生态,不过是应用面有所区别,你只需要关注各个语言的生态,哪一个更符合兴趣就选择哪个,基础练扎实之后,转语言不会是一件很困难的事。

OSPP:你身边了解和参与开源项目的同学多吗?你认为参与开源之夏和社区贡献对于在校生的学习和专业提升、就业选择方面有哪些帮助?
马健尧我身边接触的同学大部分都了解开源,不过这是我交际圈导致的,放到年级、学校层面来说,绝大部分同学还停留在认为开源社区很神秘,自己能力不足以参与的认知状态,不过开源之夏的活动热烈程度一年胜过一年,相信开源的普及面会越来越广。
我认为开源之夏和社区贡献对学生的帮助非常多,相信不少同学尝试做项目的时候,都在网络上看过不少电商、博客项目,甚至有人花大价钱去学习别人做的项目。其实最顶级的项目一直都在 Github 里面,数万、数十万的 star 已经充分说明了项目的含金量,何必在网络上左看右看呢(当然,新手还是建议从一些练手项目做起,熟悉语言和生态的同时先锻炼一下思维)开源之夏为思维还停留在学校内的同学们提供一个开阔视野的平台,无论你申请成功与否,你都能踏上学习开源的道路,帮助学生们更有目的的学习、提升编程能力。对于就业选择方面,你能看到更多职业道路,有存储、数据库、容器、虚拟化,而不只是前后端;同时导师制度也能让学生领略一线开发人员的编程素养与逻辑,相信在与面试官交谈时,你也能展现出更具专业的思维。
OSPP:有什么话想对计划参加开源之夏活动的学弟学妹们说?
马健尧:开源之夏是一次宝贵的经历,是你们大学生涯中一段值得纪念的、有意义的时光,请好好把握。这是我参与后总结的建议:
  1. 申请时请多关注几个项目,找一两个最感兴趣的就好,撰写申请书也是一件值得重视的事,体现了你对项目的理解与开发能力,与其左顾右盼不如专注一个项目申请书的完善。

  2. 请保持与导师的沟通,开源是相互协作的过程,不是单兵作战,更何况开源之夏为同学们请来了导师,他们的一句话也许会解决困扰你数天的问题。(在此感谢李元戎导师的指导,在她的帮助下学习,我受益良多)

  3. 请提前关注社区、社区方向与议题,一般某些议题会被保留,作为开源之夏的项目。同时开源之夏选择自己有经验、有贡献的社区会提升你的申请成功率。     


END
专栏编辑:大梦
校对:校大山、马健尧
制图:GoodWhite

本文分享自微信公众号 - openEuler(openEulercommunity)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。

展开阅读全文
加载中
点击引领话题📣 发布并加入讨论🔥
打赏
0 评论
0 收藏
0
分享
返回顶部
顶部