3

我的15年操作系统开源路——RT-Thread 创始人熊谱翔

 3 years ago
source link: https://www.techug.com/post/xiong-puxiang-founder-of-rt-thread.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

我的15年操作系统开源路——RT-Thread 创始人熊谱翔

2

作者 | 熊谱翔

出品 | 《程序员》编辑部

放眼全球操作系统市场,从广泛角度来看,可以将其分为三大板块:其一,桌面/PC 端微软打造的 Windows(桌面数字化);其二,手机移动端的苹果和谷歌带来的 iOS 和 Android(移动数字化);下一个时代的物联网(或者未来物理世界的万物数字化)。这里存在一个有趣的现象——前一代的霸主基本上不会成为下一代的领导者,亦或者说其中有着他们原有的基因,如鼠标、键盘操作的 Windows,不可能再带入到手机;手机上广泛且庞大的 Android 也不可能带入到物联网中。

之所以不能,也非常容易理解。因为每一代都会有自己的特点,一定会有一个非常适合它的绝加拍档。对于物联网时代而言,碎片化是其中的显著特点。从超小的计算单元,到具备智能、边缘算力的高性能单元,都会涉及。物联网时代需要一个适配性非常好的操作系统,这些需要创新,也是发力点所在。

始于 2006 年的 RT-Thread 是一款面向物联网的开源操作系统。最初来自于做项目时对嵌入式操作系统的需求,但我对当时数种开源嵌入式操作系统并不满意。我理想中的嵌入式操作系统是,类似 UNIX 系统拥有小写命名方式的优雅代码风格,包括了操作系统内核及周边必备并可裁剪的组件,同时这些又希望它是易于获得、开放、POSIX 标准兼容的。所以,一开始,RT-Thread 便以做一个开放、易用的操作系统为目标。

开放性

之所以选择开放,也和自身受开源文化影响息息相关。1998 年,我首次接触 Linux,知道了除 Windows 以外还有这样一套开放的体系:源码在手天下我有!2000 年,在开始接触系列的商业封闭的实时操作系统(VxWorks、NucleusPLUS、ThreadX 等)后,我深刻体会了东西确实是好东西,稳定可靠,但并不开放:

  • 想找人交流,缺乏相关的技术社区;
  • 想在 PC 上编写相关程序,但并不能放到这些嵌入式实时系统上执行;
  • 想把 Linux 上的开源代码移植过去,基本完全不可能,空坐宝山望洋兴叹。

能做的,只能是基于它自身的 API,完全从头编写。然而,编写一部分还好,但是当要实现所有亦或任意东西时,只能无奈道一句“真是无底洞”!

因为这样的缘由,所以在项目伊始便进行了开源。第一个开源的版本只有线程的部分:能够实现多线程的优先级调度,上下文切换。基于开源,希望它具备更多的开放性,让大家随意获取,同时接受大家反馈,倾听大家的需求。

早期时主要是放在一些论坛上,代码以 Google Code、SVN 的方式进行托管。后来,在论坛上看到大量电子工程师在用 ARM Cortex-M3 的芯片,所以也非常早期地支持了 Cortex-M 架构(这一点相较于诞生更早的 UCOS-ii、ECOS、RTEMS 等),也就迅速获得了大家的关注、尝试。

但是,开放的模式往往意味着发散,因为参与的群体来自各行各业,面临的问题也各式各样。最终,我们实现了支持众多的芯片(有些是我们自己移植的,有些是社区贡献者移植的,有些甚至是芯片厂商移植的)和众多不同的工具,例如不同的工具链、不同的集成开发环境。

在这种情况下,一个社区就必不可少,让大家在其中自由地进行交流,以 Issue、PR、代码的形式,通过线上/线下技术会友的方式进行交流。自 2009 年以来,我们就开始以 Git 的方式管理代码,在 GitHub 上进行协同开发。

图1 RT-Thread Star 增长历史

选择 Git 方式已经成为开源软件的必备:

  • 开源的本质是协同开发,不同于传统开发模式,它需要/可以接受来自远程线上各方的代码补丁;
  • 分布式的协同开发,只要希望合并到主干中,就可以生成 PR 提交,然后经过 Review、沟通、合并,最终出现在开发主干;而不需要自己手动的进行代码合并、比对。
  • 随着 CI(Continuous integration,持续集成)的出现,可以在 CI 中加入代码的检查,编译甚至是自动化测试,降低代码合并上的人工;
  • 在 GitHub 这样的开发者社区中,可以让大家更好的参与进来,对代码进行 Review、确认、提交 Issue/沟通。

易用性

参与到开源社区的一般都是工程师个体,RT-Thread 也是从工程师角度出发,首先通过面向对象设计的模式构造了核心基石,然后再辅以统一化的代码风格,进而形成规范化的开发体验。

对于使用者来说,一份好的文档是开发之路的明灯,从入门上手,到使用指南、注意事项。我们将文档中心按开源、协同开发的模式进行:

  • 以 Markdown 方式进行文本管理;
  • 以 Git 仓库方式接受社区小伙伴的提交;
  • 以Attribution-NonCommercial 4.0 International (CC BY-NC 4.0) 许可协议发布文档。

图2 可以 fork 的 RT-Thread 文档中心

工具是把代码用好的另外一方面。RT-Thread 早期支持的 ARM Cortex-M 处理器,是基于 PC 上的交叉编译方式,所以也就延伸出工具链的问题。GNU GCC 交叉编译工具链,基于 Makefile 方式,免费但使用上缺乏调试器、仿真器;而一些商业的工具链,还可以附带集成开发环境,仿真器,基本上做到类似PC 上使用 VC++ 来编写、开发程序这样简单。所以如何支持好它们也是降低门槛的重点,对此,我们通过深度定制 SCons 的方式把代码的定制、裁剪和这些不同集成开发环境工程文件进行灵活的转换,来实现编译、调试效果。

因为物联网场景碎片化,需要十分灵活的定制性缘故,也引入了开源中常用的 Kconfig 代码配置。字符界面下通过 menuconfig,可以对一些功能特性进行详细的配置,但是这引发了争议,甚至社区上还有反馈表示,“字符界面的配置?这个是科技的倒退吧。”在这样的背景下,以及希望工具层面有更佳配合真正达到开箱即用的出发点,我们后期也开发了专属 RT-Thread 的集成开发环境:RT-Thread Studio。

图3 RT-Thread Studio 集成开发环境

这系列过程中核心点是用户体验,而对于开源操作系统来说,这个就是开发体验:如何真正让开发者用起来顺、爽,真正让开发者喜爱上它。要把开发体验做好,用心倾听社区小伙伴的反馈是必不可少的:

  • 社区小伙伴有系列的吐槽。这时会去琢磨,怎么样才可以做得更好,然后加以改进;
  • 社区小伙伴有更好的点子,代码。这时会 Review 相关的代码/PR,琢磨这样是否确实是一条更好的路。

开源在于过程

开源代表的是协同开发,最大限度的避免重复发明轮子,让大家能够站在巨人的肩膀上创造更大价值。

开源可以有无数的社区小伙伴参与进来,有组织者领导这个项目;有实现代码的开发者,有使用者(同时兼顾测试)进行反馈/提出自己的需求(也有可能转换角色去实现它),还有文档贡献者编写文档或使用笔记;有社区运营,对项目进行运营、推广等。大家都参与其中,作为社区一员,从 0 代码,到大家都使用它,并爱护它。

开源是一种过程的反映,而不是结果:

  • 如果仅仅是一个公司抛出一个产品并开源它,这个并不是真正的开源。如果没有文档,没有后续的社区运营(支持、回复反馈等),这个也仅仅是一堆的代码,开源世界并不缺乏代码;
  • 开源的软件不在于它本身,而在于有多少人使用它。如 Apache 之道(Apache Way)的核心:“社区胜于代码”。代码是“死”的,人是活的,使用软件、代码的是人。
  • 开源也不是一种商业模式,因为它不反馈结果(可以获得多少收入利润),或者可以说开源是一种商业手段。

在开源的过程中,可能很多时候大家也会担心,代码都开源了,有人抄袭了怎么办?有人在这个基础上开新的分支怎么办?同样,不能以静态的方式看这个问题,关键看后续的发展上,谁可以发展得更好(也包括谁的社区会更好)。比较典型的案例有 FreeBSD/DragonFly BSD,NetBSD/OpenBSD,主干在持续推进,融入新功能,产品、社区都做得更棒时,Fork 分支完全不需要担心太多。当然另外一点,商标品牌也十分重要。

在我看来,开源过程持久化,也是 RT-Thread 得以成为常青树的核心:在十多年的时间中,持续地吸收现代化的技术,不断地向前迭代版本。从 MCU 上小巧的完备操作系统(内核、文件系统、网络协议栈),到智能手表上的炫酷人机交互界面(同时低功耗长待机),到现在最新版本,面向带 MMU 处理器架构,全进程版本的 RT-Thread Smart 微内核架构系统。RT-Thread 希望能够像一个火车头,驶向未来。

图4 RT-Thread 路线图,最新的 v5.0 版本将融合 smart 分支

开源与商业化

开源的商业化,这是近些年来大家提及,关注比较多的方面。目前提及的开源下的商业模式普遍来说有三种:

  • 提供服务的模式。类似 Red Hat 这样,代码都是全开源的,提供基于开源代码上的服务,任何相关的都可以算做服务中,例如培训、实施、技术支持等;
  • Open Core 的模式。即核心是开源的,并让更多人使用起来,而在这个核心基础之上是收费的,例如插件(WordPress),增值中间件等。
  • Hosting 模式。这也是和云兴起相关,代码是开源的,同时提供云的服务,云空间云服务是收费的。

这其中也出现过 GPL、商业双许可模式,这类通常来说在一定空间范围内也可以行得通,不过整体规模要铺大会比较难,这类最大的案例是 MySQL。而对于 Open-Core 模式来说,也会有个开源 vs 商业的边界:

结语

这篇文章主要是围绕着 10 多年来 RT-Thread 的历程谈及自己的一些想法。这个过程中也和自身的心态相起伏,从兴趣爱好,到创业的艰辛,及看到了开源的大方向及自身优势。在未来几年中,中国工程师的红利也必将推升中国在全球开源界的影响力,也会有更多来自中国的伟大开源项目,形成新时代的根。


熊谱翔,RT-Thread创始人,2000年毕业于重庆邮电学院,先后任职上海贝尔阿尔卡特、宇梦通信、Marvell,拥有丰富的嵌入式实时系统和3G/4G手机基带系统软件开发经验。于2006年创立了RT-Thread开源操作系统,并以开源社区的形式,带领中国国内优秀的工程师,融入实时面向对象设计开发了RT-Thread自主操作系统内核、微内核架构操作系统RT-Thread Smart及大量周边成熟、稳定软件组件,如文件系统,图形用户界面等。


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK