纵览全球作业系统市场,从广为角度来看,可以将其分为三大板块:其一,图形界面/PC 端Google打造的 Windows(图形界面网络化);其二,智能手机终端端苹果和Google带来的 iOS 和 Android(终端网络化);下两个黄金时代的物联网(或者未来物理世界的万物网络化)。这里存在两个有趣的现象——前三代的雄霸基本上不会成为下三代的领袖,亦或者说其中有着他们原有的基因,如滑鼠、按键操作的 Windows,不可能将再带进到智能手机;智能手机上广为且庞大的 Android 也不可能将带进到物联网中。
或许不能,也极难理解。即使每三代单厢有自己的特点,一定会有两个适于它的绝加拍挡。对于物联网黄金时代而言,碎片化是其中的基本特征。从普莱邦的计算模块,到具有智能、边缘INS13ZD的高效能模块,单厢涉及。物联网黄金时代须要两个网络连接性非常好的作业系统,那些须要创新,也是突破点所在。
始于 2006 年的 RT-Thread 是一款面向物联网的对外开放源代码作业系统。最初来自于做工程项目时对PDP作业系统的市场需求,但我对当时许多种对外开放源代码PDP作业系统并不满意。我理想中的PDP作业系统是,类似 UNIX 系统拥有大写命名形式的典雅标识符风格,包括了作业系统Mach及周边必不可少并可上色的模块,同时那些又期望它是易于获得、对外开放、POSIX 标准相容的。因此,一开始,RT-Thread 便以做两个对外开放、功能强大的作业系统为目标。
对外发展性
或许选择对外开放,也和另一方面受对外开放源代码文化影响息息有关。1998 年,我首次碰触 Linux,知道了除 Windows 以外还有这样一套对外开放的体系:源代码KMH天下我有!2000 年,在开始碰触系列的商业封闭的实时作业系统(VxWorks、NucleusPLUS、ThreadX 等)后,我深刻体会了小东西确实是好小东西,稳定可靠,但并不对外开放:
想找人交流,缺乏有关的技术社区;
想在 PC 上撰写有关程序,但并不能放到那些PDP实时系统上执行;
想把 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 上小巧的完备作业系统(Mach、文件系统、网络协议栈),到智能手表上的炫酷人机交互界面(同时低功耗长待机),到现在最新版本,面向带 MMU 处理器架构,全进程版本的 RT-Thread Smart 微Mach架构系统。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,拥有丰富的PDP实时系统和3G/4G智能手机基带系统软件开发经验。于2006年创立了RT-Thread对外开放源代码作业系统,并以对外开放源代码社区的形式,带领中国国内优秀的工程师,融入实时面向对象设计开发了RT-Thread自主作业系统Mach、微Mach架构作业系统RT-Thread Smart及大量周边成熟、稳定软件模块,如文件系统,图形用户界面等。
从 Unix 开发者 Brian W. Kernighan 到 OpenCV 创始人 Gary Bradski,再到国内 PingCAP 联合创始人
2.分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
3.不得使用于非法商业用途,不得违反国家法律。否则后果自负!
4.本站提供的源码、模板、插件等其他资源,都不包含技术服务请大家谅解!
5.如有链接无法下载或失效,请联系管理员处理!
6.本站资源售价只是赞助,收取费用仅维持本站的日常运营所需!