[Industry News] vivo在北京举办的蓝河操作系统(BlueOS)技术沙龙(Rust交流)
Tofloor
poster avatar
流浪的加菲
deepin
2024-08-02 14:01
Author

7月27号,vivo在北京举办的蓝河操作系统技术沙龙——寻找领航者,此次技术沙龙有数十位行业专家以及超过300名开发者参会。沙龙从OS发展现状到未来趋势再到蓝河操作系统的开发与应用进行了多方面的分享探讨。

1722577259386.jpg

BlueOS 简介

蓝河操作系统(BlueOS)是vivo 面向通用人工智能时代自主研发的智慧操作系统,于2023年11月发布。系统核心特性是天生更智慧、天生更流畅、天生更安全。蓝河从性能和安全两个维度选择了 Rust 语言作为系统开发语言,蓝河也是行业首个系统框架由 Rust 语言编写的操作系统,Rust 语言的所有权模型、生命周期等一系列安全特性,保障了在编译阶段就可以发现内存使用不当导致的安全漏洞,从源头保障了内存安全和并发安全。

Rust是一种现代的系统编程语言,它注重性能、安全性和并发。

Rust最初由Mozilla研究院的Graydon Hoare于2006年开始设计,最早的目标是为了解决C++在系统编程领域的一些痛点。在2010年,Mozilla正式开始支持这个项目,从那时起,Rust开始迅速发展并逐渐成为一个强大的编程语言。它主要的应用方向有网络编程、WebAssembly、游戏开发、嵌入式系统、操作系统、区块链技术等。而本文主角BlueOS,就是用Rust开发的。

BlueOS的安全性和稳定性

1722578391492.jpg

保障操作系统的安全性,是最核心也是最基础的一个诉求。在万物互联的一个设备场景下,对于操作系统来讲,它的可靠性是非常关键的。原来开发操作系统,基本上都是C/C++,因为没有其它更好的选择,C/C++开发的系统,存在的安全漏洞大多都是一些内存使用不当相关的错误。拿Android举例,高严重性安全漏洞的70%左右源自内存错误

内存错误的发现过程有两个明显的特点:

  • 一是测试阶段,系统各个模块大规模集成到一起之后,这种错误才会慢慢的显现出来;
  • 二是产品交付后,用户的使用场景可能比测试场景更复杂,这个时候很有可能把隐藏的一些错误暴露出来;

对应的,内存错误的修复也很麻烦。

首先,这种问题排查起来就很困难。

系统各个模块大规模集成到一起之后出现的错误,排查会耗费大量的时间。像Mozilla FireFox。它的一个工程师就介绍他们有一个bug,七年了还没有解掉。因为涉及到内存错误,这种bug很难排查,也很难去解。众多的模块集成到大型的系统。具体是哪个模块出错导致,是很复杂的相互调用逻辑,难度非常大,以至于七年都没有解决掉这个bug。因此决定大力的支持Rust,把内存安全做到极致。因为使用Rust开发的软件不会出现这样的问题,因为它“天生安全”。

其次,它修复起来也很困难。

一些问题在测试阶段因为覆盖的使用场景有限,在交付给用户之后才暴露出来,修复起来也很麻烦。比如近期因 CrowdStrike 故障导致全球约 850 万台 Windows 电脑蓝屏死机,初步排查是因为有问题的内容导致内存读取越界,从而触发异常。

1722578313104.jpg

Rust语言相关机制能很好解决C/C++内存相关问题,在C/C++中内存越界读写、操作,整型溢出,UAF,溢出检查,类型检查,借用规则,存在NULL值等情况,在Rust中会在编译期间检查出来并规避,因此不会产生相关的内存问题。

所有权、可变性,配合借用机制和生命周期控制是Rust内存安全性的基石。在Rust中所有权唯一且可以转移,可以共享(被借用)但失去所有权则不可再引用,有健全的借用生命周期控制和严格的共享限制等来保证Rust开发的内存安全。在并发特性上,除了内存上的安全,通过Arc、Mutex、RwLock、Atomic、Send、Sync等特性和机制,再加上严格的编译期及运行期检查来保证了Rust编写的程序的并发上的安全。

拿指针(或引用)和内存对象举例,把内存对象比作上了锁的房间,而指针便是钥匙。在C语言中,内存就像是无主之地,谁拥有了钥匙(指针)谁就可以用这个房间,不论这把钥匙是复制的还是抢来的,甚至可以直接破门而入(野指针),只是出了segment fault(内存错误) 要开发者苦苦追查。而在Java这种带有垃圾回收(GC)语言中,存在一位管理员(JVM),你(开发者)可以尽情的访问内存对象,一切都有管理员来帮你打理而不用担心出错,只是管理员的工资相当高(耗资源),且忙不过来的时候可能会打盹(GC时可能会STW(发生卡顿))。而在Rust中,则有一位免费的监工(编译器以及运行时检查系统),他只允许你自己使用房间,如果房间给别人或者放弃了则不再让你使用这个房间(所有权转移)。如果想有多处使用此房间,那么必须登记在案(RC引用计数,Reference Counting 缩写),如果想多个人同时使用(并发、异步),那么也得登记在案(Arc)。在登录信息的时候(开发代码)可能会感觉到繁琐,但监工检查通过后,便可以高效安全的使用。


本文转自博客园,对此感兴趣的可以点击了解:全方位深度解析:为什么vivo自研蓝河操作系统选择Rust编程语言

Reply Favorite View the author
All Replies

No replies yet