文 | 熊谱翔

出品 | 《程序员》编辑部

放眼全球操作系统市场,从广泛角度来看,可以将其分为三大板块:其一,桌面/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及大量周边成熟、稳定软件组件,如文件系统,图形用户界面等。

从 Unix 开发者 Brian W. Kernighan 到 OpenCV 创始人 Gary Bradski,再到国内 PingCAP 联合创始人&CTO 黄东旭、Vue.js 作者尤雨溪……新《程序员》第一期以「开发者的黄金十年」为主题,与多位国内外知名的技术领袖和新锐代表进行了深度对话,希望为中国开发者打开新时代的「机遇之窗」。

除了技术引领,我们也希望透过技术对行业进行深入洞察。因此,新《程序员》第一期也邀请到了来自快手、滴滴、贝壳找房、作业帮等知名企业的技术负责人,用案例实践为读者阐述直播、出行、居住、在线教育等多个行业变革背后的技术架构和技术引擎。

《新程序员·开发者黄金十年》正式发布

由近百位专家参与、经数月打磨后,《新程序员001:开发者黄金十年》面向所有开发者正式官宣发布!不仅包含了开发者们一如既往期待与喜爱的全球技术大师深邃思考、优秀开发者技术创造等深度内容,更以数字多媒体的新形态让开发者们随时随地阅读、观看,带来视频图文的多重体验。

用一位开发者和我们说的话来表达:“当年的那个《程序员》回来了!”

当年的那个《程序员》不仅回来了,而且洋溢着新的活力。

加入新程序员读者俱乐部:

  • 季度会员:https://mall.csdn.net/item/76421
  • 年度会员:https://mall.csdn.net/item/76785

移动端的同学也可以扫码下方二维码加入

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

  1. RT-Thread 创始人熊谱翔:我和 Linux、嵌入式实时操作系统 RT-Thread

    我和 Linux.嵌入式实时操作系统 RT-Thread -- RT-Thread创始人熊谱翔,2015 年 接触 Linux 说起 Linux 应该从我在校园时期说起.我是在山城--重庆邮电学院念的 ...

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

    作者 | 熊谱翔 出品 | <程序员>编辑部 放眼全球操作系统市场,从广泛角度来看,可以将其分为三大板块:其一,桌面/PC 端微软打造的 Windows(桌面数字化):其二,手机移动端的苹 ...

  3. RT-Thread创始人熊谱翔: 我和Linux、嵌入式实时操作系统RT-Thread

    本文转载至: http://www.rt-thread.org/dynamic/78.html 接触Linux 说起Linux应该从我在校园时期说起.我是在山城--重庆邮电学院念的书,1998年时宿舍 ...

  4. 鸿蒙电脑系统什么时候普及,鸿蒙操作系统开源是什么意思?华为鸿蒙系统什么时候能用...

    鸿蒙操作系统开源是什么意思 华为在广东东莞的华为松山湖基地召开了2019华为全球开发者大会,正式发布了自主研发的操作系统鸿蒙. 余承东说:"通过一套系统,一个OS实现模块化解耦,对应不同设备 ...

  5. git 的安装以及使用:是一个开源的分布式版本控制系统,可以对项目进行版本管理。 早期是linux之父用来管理linux系统源代码的(linux是和windows一样操作系统 开源免费的操作...

    ## 总结 - 学会使用基本的git命令 管理源代码 - 学会去github创建仓库 并将代码上传到github的仓库 (有待完成 回家有网再push) - 了解本地的.git和服务器github的. ...

  6. 中兴新支点加入龙蜥社区,共建操作系统开源新生态

    近日,广东中兴新支点技术有限公司(以下简称"中兴新支点")签署了 CLA(Contributor License Agreement,贡献者许可协议),正式加入龙蜥社区(OpenA ...

  7. 鸿蒙系统啥时候开源,鸿蒙操作系统什么时候上市 鸿蒙操作系统开源

    如今,市场上比较普遍的手机系统主要有3种,分别是,苹果iOS系统,安卓系统,还有一个Symbian系统,但是,不知道大家有无听说过,华为将推出的鸿蒙系统呢?相信有许多人都想了解鸿蒙操作系统甚么时候上市 ...

  8. 华为服务器操作系统筹备开源社区,华为服务器操作系统开源,增强业务性能

    自2019年9月19日,华为在第四届全链接大会上宣传,华为服务器操作系统--欧拉操作系统将开源开始,就引起了社会各界的广泛关注.目前,开源名为OpenEuler的基础建设已经完成,服务器操作系统开源, ...

  9. 正点原子delay函数移植到rt thread操作系统(HAL库)

    正点原子教程中涉及到的操作系统只涉及了UCOS的教程,其中例程的system文件夹中的delay.c函数只是适配了UCOS. 下面将delay.c函数移植到rt thread中,使用的bsp是rt t ...

最新文章

  1. @字王2012·纵变体系列,共12款
  2. mac os x安装php7.0和phalcon3.0
  3. Flink JobManager HA模式部署(基于Standalone)
  4. 如何使用Node.js获取当前脚本的路径?
  5. vs debug 模式生成的exe 另一台电脑_C++利用spdlog生成日志
  6. 关于STM32串口空闲中断的问题
  7. 谨慎用药!这些药千万不能混在一起吃
  8. 20应用统计考研复试要点(part6)--统计学
  9. TypeError: 'numpy.int64' object is not iterable ,'int' object is not iterable
  10. javascript代码总结
  11. 解读Linux下的password命令
  12. linux nodejs 502错误,node.js应用程序与nginx 502错误的网关错误
  13. 高德地图JSAPI 2.0使用Java代码代替Nginx进行反向代理
  14. 【力扣】735. 行星碰撞
  15. 如何用php算出你活了天,按日子来做活儿——第一个Blog DayHappy Day
  16. Android面试必问!面试字节跳动Android研发岗,满满干货指导
  17. 【LiteApp系列】埋点的设计
  18. 通用 zkSNARK
  19. dict.keys 键视图
  20. 虚拟机搭建ftp服务 匿名用户不能上传、删除、修改,这个问题解决了2个钟头 脑壳疼

热门文章

  1. 复利计算公器 网页版 0100
  2. DC-5靶机渗透测试
  3. 在计算机刚卸载的东西能恢复吗,怎样恢复刚刚删除的文件?
  4. 航班售票系统设计与实现
  5. c语言利用指针函数等完成学生成绩管理系统,课程设计C语言可视化程序学生成绩管理系统...
  6. 华为USG6000V1防火墙实现源目地址转换——不用server-map方式
  7. NLP冻手之路(2)——文本数据集的下载与各种操作(Datasets)
  8. druid连接超时时间20分钟引起的血案
  9. 多亲 Qin3 Pro 参数 多亲 Qin3 Pro怎么样值得买吗
  10. Oracle中的wm_concat函数用法