一些前情提要:
RISC-V 架构,被誉为继承开源精神的“开源硬件”,即 ARM 之后的“下一代”精简指令集架构(下面就简称 RV 架构)。笔者是去年开始接触并开始使用,已有一年多。从更大的时间尺度来看,这个架构的发展已经超过十年。
从去年开始,国内各大厂家对 RV 架构产生了极大的兴趣,包括国内大厂在内,加上很多小型企业,都开始跃跃欲试,开发 RV 的开发板、主板和相关软件。可以说是百花齐放、百家争鸣。
大家或多或少都知道,OEM 厂商再生产和制造 ARM 架构的时候是需要额外授权的,尤其是当厂商自己加私货(私有指令集)的时候,这种授权费还要另外收取。所以,对于嵌入式而言,就迫切需要一个更加开放的架构去替代昂贵的 ARM 架构,节省成本,这也是 RV 架构的商业契机。于是非常多的软硬件大厂,小型企业以及国内外开源社区都开始活跃起来,拥抱 RV 架构。
目前的发展:
对于开源而言, 是有相关授权协议的,比方我们常提到的 Linux 内核,是基于 GPLv2 发布的,这意味着如果你对源代码做出了修改就需要将这些内容完全公开,并且源代码并不能私有化(当然你悄悄的藏着开发,别让人类知道也被默许);而对于我们提到的 RV 架构,是基于 BSD 开源协议发布的,意味着,不仅仅可以随意添加私有指令集到 RV 架构,而且公开与否,完全看设计和发布者,是否开源或者完全私有化都不受约束的,并且这种行为也是 BSD 协议完全认可,具有法律效益。
所以从某种角度来看 RV 架构具有更大且更加自由的发展空间,排除了 RV 架构目前已经有的指令集,比方我们都知道的 RV64GC 这样的架构,只要硬件厂商愿意,可以在其中添加自己的指令集,这些指令集即使上游的内核源代码不支持,也可以通过自己的修改内核源码来实现,而这些被修改的内核源代码的下游厂商无论公开与否(修改后的源代码),对于社区来说,只要不合并到上游内核主线,就等于没有。所以,目前整个 RV 的发展除了几个的厂商完全按照标准指南开发 RV 芯片之外,很多厂商在其中是夹带私货的。那么,按照标准指南开发的 RV 芯片,在通用性上和夹带私货的几乎没有区别,而差距在于私有指令集,再搭配上自己的定制内核,更有甚者,魔改了编译工具链,加入了更多的私货,比方说向量指令集优化的工具链,这样的的 RV 芯片在运行某些非通用软件的速度将大大超越通用芯片。从目前来看,这种趋势越来越明显。
笔者的观点:
起先,笔者对目前 RV 的发展是很有情绪的,甚至有些“失去理智”。但还好,人是善于思考且自省的,重新整理头绪,让笔者重新认识和评估。《恶意》中有句话,大概意思是:当你迷茫或者思绪混乱时,重头开始梳理线索,理清关系。
还记得《THE CATHEDRAL AND THE BAZAAR》(《大教堂与集市》)中提到:
I discuss these theories in terms of two fundamentally different development styles, the ‘cathedral’ model of most of the commercial world versus the ‘bazaar’ model of the Linux world.
现如今,Linux 世界依旧保留集市模式的开发模式,而本文谈到的 RV 架构稍有不同,在同样采用了“集市”的发展模式的同时,“集市”中不少“商铺”越来越像“大教堂”了。
RV 架构发展格局就呈现如下的态势(不一定全)。如下表:
架构 | 传统意义开源的 RV 架构 | 夹带私有指令集的 RV 架构(私有指令集仍然开源) | 夹带私有指令集完全闭源的 RV 架构 |
使用场景 | 替代传统意义的台式机和笔记本电脑,嵌入式领域,物联网,人工智能,超算领域 | 替代传统意义的台式机和笔记本电脑,嵌入式领域,物联网,人工智能,超算领域 | 替代传统意义的台式机和笔记本电脑,嵌入式领域,物联网,人工智能,超算领域 |
操作系统 | 直接使用开源社区 Linux 发行版 | 直接使用开源社区 Linux 发行版(某些特定运算具有或者没有加速);商业 Linux 发行版(收费或者免费) | 直接使用开源社区 Linux 发行版(某些特定运算具有或者没有加速);商业 Linux 发行版(收费或者免费,某些特定运算具有加速) |
当然,还有一种情况是非常定制化的 RV 架构芯片专门跑某些特定应用,这种就不在讨论范畴了。
笔者认为,整个格局态势必将导致进一步的“混乱”。但请各位读者注意,这里提到的“混乱”并不是贬义词,而是“中性词”。下面我们结合“软件生态”这种非常商业化的词汇来具体分析。
- 传统开源的 RV 架构,因为本质运作模式与 Linux 模式相同,完全开源且自由,按照标准 RV 架构设计开发,在软件层面使用标准主线内核和GCC工具链(当然 Clang 也是可以的),那么整个硬件发展也是中规中矩,原汁原味,软件生态能够继承现有 x86_64 的几乎所有软件,目前没有的功能也会在将来不断发展中完善,那么在使用场景中替代我们的笔记本,台式机,甚至作为超算也是完全能够升任。这可以看作是传统的开源自由软件发展模式,或者说是集市发展模式,自由开放,因为热爱所以把玩,不急不躁,把代码写的优雅;通过交流,一步一步逐渐完善软件和硬件,用户和开发者协力共建社区。
- 夹带私有指令集的 RV 架构,这里就不细分是否开源私有指令集了。因为讨论的重心在于为什么需要夹带私货。RV 架构本质是精简指令集,具有体积小,发热量小,低功耗的优势。在某些专精领域极具潜力。比方说,人工智能和嵌入式,可能未来鸿蒙系统就不是运行在 ARM 处理器上,而是 RISC-V 处理器(目前实验性测试已经成功)。而在这些领域加入私有指令集加快运算速度将司空见惯。比方说为了人工智能,加入向量指令集或者神经网络算法,虽然 RV 本身就有向量指令集扩展,但不能否认,将来某些厂商是否会添加额外的指令集,以便配合自己的操作系统,从而提升芯片在某些特定场景的运算速度;或者加入转译指令集(笔者认为这很愚蠢,但商业化肯定会考虑这样做),比方说有些软件只能运行在 x86_64 的机器上,为了移植到 RV 架构,添加私有的转译 x86_64 位的指令集,以便让 RV 顺利高效运行 x86_64 上的应用程序。这也可以看作是商业化指导的思维模式,或者说是“教堂”模式,因为市场需要,所以我们这么做,于是为了迎合市场而放下本我对底层诉求的追求。
所以,就 RV 架构而言,现如今,抛开非常特定场景嵌入式下 RV 运行特定软件的情况。有且只能是 Linux 系统。所以重点落回到 Linux,作为开源自由软件,不同的厂商在它的基础上添加了很多代码,以实现自己硬件的兼容和性能提升,有些厂商公开了代码,也积极向上游主线提交合并请求;有些把它们作为所谓的“创新”和“知识产权”当作“私货”放入内核,自己用着很嗨。
放下价值观,只要厂商坚持维护好,不要因为夹带“私货”而带来“漏洞”便是一种“幸运”;如果从本我的角度来看,这些私货代码不提交上游请求代码审核和合并,就别想让 Linux 社区为你们擦屁股。
让我想起了phlipp的这个演讲https://m.bilibili.com/video/BV15P4y1Z73d?is_story_h5=false&p=1&share_from=ugc&share_medium=android&share_plat=android&share_session_id=431ebd01-dc81-4a9e-8f1c-cfd962c0ef4f&share_source=WEIXIN&share_tag=s_i×tamp=1665151292&unique_k=tBbYs0J, phlipp的想法是,即使是私货也应该符合platform spec规范,platform相关的代码理应upstream到内核,个人理解厂商的私货应该是在用户态
作为社区还是将主要精力放在跟随上游,维护主线,将来私货的事,我打算不折腾了。
个人观点独特,有很好的建设性意见。
国内一些厂商的驱动代码不开源,又想别人给他们适配系统