热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Rust来了,汽车软件工程师准备迎接又一个“涨薪潮”

一直以来,汽车ECU的编程语言90%都是C语言编写(大部分是涉及到MCU的控制编程),还有部分C语言。比如,大

一直以来,汽车ECU的编程语言90%都是C语言编写(大部分是涉及到MCU的控制编程),还有部分C++语言。比如,大多数主流的机器学习框架实际上都是依赖C++。

过去几年时间,通过尽可能少的代码简化任务也催生了大量的新编程语言的应用,然而,特斯拉仍然依赖于最基础的语言:C和C++。

“原因是C和C++可以在几乎任何一种系统上运行,尤其是对于安全关键的嵌入式系统来说,可以帮助工程师优化软件。”这是特斯拉的结论,实际上英伟达也在大量使用C和C++。

不过,考虑到整车系统的复杂性以及越来越多的应用功能开发,不同语言的组合也是趋势。但毋庸置疑的是,核心软件价值仍然在芯片和域控制器这一级别。

近日,有消息称,AUTOSAR(汽车开放系统架构)组织正在考虑保持经典AUTOSAR(基于C++14编程语言)的基础上,寻求为AUTOSAR Adaptive启动Rust编程语言的导入。

按照计划,AUTOSAR决定从2022年4月开始,在功能安全工作组(WG-SAF)内成立一个子小组,制定两份和Rust相关的指南文件,包括在AUTOSAR Adaptive使用Rust的指导文件以及相应的编码指南。

这意味着,对于处于起步期的AUTOSAR Adaptive以及域控制器电子架构、软件定义汽车开发模式来说,有可能会产生深远的影响。

一、

众所周知,Rust是一种多范例、通用的系统编程语言,目标是提高性能和安全性,特别是并发安全。Rust在语法上类似于c++,但可以在不进行垃圾回收的情况下保证内存安全。除了函数式编程等高级特性外,它还提供低内存管理机制。

这种语言在2006年前后出现,此后在Firefox浏览器引擎的开发中进行了一系列改进(通过使用Rust语言重建组件来提高浏览器的速度),也在过去十几年时间获得了包括亚马逊、Facebook、谷歌和微软等软件巨头的支持,也多次被选为“最受欢迎的编程语言”。

Rust在语法上和C++类似 ,但是设计者想要在保证性能的同时提供更好的内存安全。这一点,已经在过去几年成为汽车行业的最大完全风险之一。

有数据显示,当今汽车中使用的代码超过1亿行。在接下来的十年,汽车中使用的代码平均将达到3亿行。随着汽车联网越来越多,黑客也会越来越多地瞄准汽车应用。

此前,静态代码分析安全公司Veracode曾发布一份应用程序分析报告,结果发现比起Javascript和Python等语言,C++的安全漏洞要严重得多。原因之一就是C++不是内存安全的语言,代码库中频频出现内存漏洞,大量的时间被耗费在修补漏洞上。

比如,易受攻击的嵌入式Web服务器是用C++编写的,并通过智能汽车的WiFi网络对外暴露,致使攻击者在访问WiFi网络后可攻击web服务器。

按照谷歌Linux内核安全工程师的说法,C语言是一种高级的汇编程序,但C语言也带来了一些导致安全缺陷和基础设施漏洞。C语言中存在大量的开源漏洞是有原因的。而C语言的使用时间相对其他语言要长,并且拥有最多的编写代码量。

相比较而言,Rust试图从一开始就阻止许多漏洞进入代码。如果有语法错误或其他内存安全漏洞,根本不会编译。这是设计上的内存安全编程,确保没有对无效内存的访问(无论软件如何执行)。

而对于汽车,尤其是智能汽车来说,多核多线程处理是主流。这意味着,运行在多个核上的多线程应用程序可能会导致更多的问题。此前,工程师可以通过使用静态代码分析器来完成bug的定位,解析源代码并报告任何潜在的错误。

在AUTOSAR的C++14语言编程指南中,有这样一句话,“如果本文档的用户使用了并行计算、C++标准库或开发了与安全相关的软件,那么他们有责任为这些应用自己的指导方针。”

依赖于静态代码分析和手工审核,已经是一种“常规”的解决方案,大部分工程师也已经习惯了这种解决方案,而在过去几年时间,C++也成为了高性能编程的首选语言。

这意味着,如果软件是多线程的,并且使用了多核,那么工程师就只能靠自己了,而Adaptive AUTOSAR对于这些问题没有任何指导。

但大多数新的软件系统都是多线程,并运行在多个核上,尤其是多核SoC逐步成为主流搭载平台,而非传统的MCU(MCU本身也处于多核、大算力的趋势发展,控制系统本身也越来越复杂,融合集成度越来越高)。

从这个角度来说,Rust编译器在编译时执行所有检查,因此不会产生任何运行时的开销。性能可与C++相媲美。此外,Rust的目标是零成本的抽象,一旦代码编译完成,就可以确信它能够正常工作。

一些汽车行业人士认为,多核系统是未来的趋势,而Rust正是一种适用于复杂嵌入式软件的优秀编程语言,潜力不可估量。

二、

不过,任何一种语言都存在自己的天然弊端。作为一种适合于系统软件开发的语言,Rust的开发人员也要跨越一些已知的障碍。

比如,Rust保证安全性的代价就是学习门槛很高,对于习惯了脚本语言或者C语言的程序员来说,Rust显得不是那么友善,同时学习成本也很高。比如,Rust还没有一套完善的开发栈可供参考,这也是长期被“吐槽”的地方。

但,Rust的独特优势也已经明确。比如,在过去几年时间,全球已经有不少知名互联网或科技公司都在采用Rust重构技术栈,不过,生态还不是很丰富,有些领域还没有很好的库支撑。

而在汽车行业,尤其是关键安全领域,Rust编程语言可以进行安全关键型软件开发,来改善安全关键型软件质量,这是对现有编程语言的重大改进。

比如,Rust目前只有一个主编译器,这意味着,关键安全系统开发对于严谨性和稳定性的关注被视为Rust的一个主要竞争优势,也是一种比其他语言更容易分析和检查的语言。

目前,全球已经有一些公司在汽车行业应用Rust语言提供相关的开发和培训支持。比如,Ferrous Systems是一家德国的公司,主要服务就是验证Rust语言和编译器在安全关键领域的使用。要知道,在汽车行业,目前还没有安全认证的Rust工具链。

按照计划,该公司的第一个目标是ISO 26262/ASIL-B认证,并在2022年底正式对外,为关键任务和高安全性环境中的开发人员提供了一个健全的、经过验证的、可寻址的基础架构和验证工具,以构建关键库、分析工具和进一步的系统保证。

在今年初,AdaCore(软件开发和验证工具提供商)宣布与Ferrous Systems建立战略合作伙伴关系,进一步开发后者的Rust开发工具链,以支持嵌入式任务和安全关键应用,并使其符合相关行业软件安全标准。

而AdaCore同样也是类似英伟达这样的全球芯片巨头的合作伙伴,前者的工具链可以在在软件生命周期的早期检测代码缺陷,并通过集成到英伟达的芯片,来最大限度地降低软件发生故障或者恶意漏洞攻击的可能性。

“自动驾驶很复杂,需要软件的复杂程度超过了目前最严格的标准。”在英伟达软件安全副总裁Daniel Rohrer看来,软件必须与硬件具有一样的功能安全标准,并经过同样严格的安全评估。

实际上,以目前车载座舱操作系统的主流安卓平台为例,过去主要是基于C和C++开发,但内存安全漏洞成为最难以解决的错误代码来源,占到了约70%的高严重安全漏洞比例。

在谷歌看来,Rust有几个关键特性,比如内存安全性、数据并发性、默认情况下不可变的引用和变量、更安全的整数处理、标准库中更好的错误处理等等特点。

去年,谷歌首次表示,一直在为安卓开源项目增加对Rust的支持。但是在Android平台上添加一种新的语言是一项巨大的任务。一些工具链和依赖关系需要维护,测试基础设施和工具必须更新,开发人员需要接受培训。

谷歌的策略,就是从一部分新的代码开发入手。

比如,安卓最新的蓝牙软件栈重写代码名为“Gabeldorsche”,就是用Rust编写。Keystore 2.0模块(存放开发者信息、私钥、公钥的容器)也是用Rust编写。一些行业人士表示,使用Rust写安卓库也是一个重要方向,之前大多数都是基于C/C++。

此外,丰田此前公布的汽车级开发平台OS—Arene,其中的API就是用Rust编写的,是一个预编译的C/C++库(目前是为x86和arm构建的)。它被部署在一个ECU上可以读取、编写和验证丰田官方CAN信息,并将在未来扩展到支持更多车型。

而作为实时操作系统的供应商,风河公司开发的VxWorks,同样支持Rust编程语言,并允许构建和部署多线程的Rust应用程序,作为实时进程运行。

同样,作为汽车芯片IP核的主流供应商,Arm在去年底宣布加入Rust基金会,被视为对这种编程语言未来大范围应用的巨大推动,同时加入的还有丰田汽车。这个基金会由亚马逊、谷歌、华为、微软和Mozilla建立。

这意味着,Rust编程语言已经进入快速发展周期。高工智能汽车研究院监测数据显示,目前国际一线汽车零部件供应商已经开始在大量招聘同时具备Rust和C/C++开发能力的软件工程师。


推荐阅读
  • 如何有效解决MySQL中预编译语句失效的问题及专业应对策略 ... [详细]
  • Shell脚本编译器的全面解析与应用指南 ... [详细]
  • Python 数据可视化实战指南
    本文详细介绍如何使用 Python 进行数据可视化,涵盖从环境搭建到具体实例的全过程。 ... [详细]
  • 浏览器作为我们日常不可或缺的软件工具,其背后的运作机制却鲜为人知。本文将深入探讨浏览器内核及其版本的演变历程,帮助读者更好地理解这一关键技术组件,揭示其内部运作的奥秘。 ... [详细]
  • 作为140字符的开创者,Twitter看似简单却异常复杂。其简洁之处在于仅用140个字符就能实现信息的高效传播,甚至在多次全球性事件中超越传统媒体的速度。然而,为了支持2亿用户的高效使用,其背后的技术架构和系统设计则极为复杂,涉及高并发处理、数据存储和实时传输等多个技术挑战。 ... [详细]
  • 如何创建和使用快捷链接:掌握打开链接的快捷方式技巧 ... [详细]
  • 利用 Python 实现 Facebook 账号登录功能 ... [详细]
  • 本文简要介绍了 MacOS 系统的分区与引导机制。通过详细解析系统分区结构和引导加载过程,帮助用户更好地理解 MacOS 的启动流程。文章还涵盖了不同版本 MacOS 的分区特点,以及如何在遇到引导问题时进行故障排除。对于希望深入了解 MacOS 内部运作机制的用户来说,本文提供了丰富的技术细节和实用建议。 ... [详细]
  • 本文将带你快速了解 SpringMVC 框架的基本使用方法,通过实现一个简单的 Controller 并在浏览器中访问,展示 SpringMVC 的强大与简便。 ... [详细]
  • 深入解析HTML5字符集属性:charset与defaultCharset
    本文将详细介绍HTML5中新增的字符集属性charset和defaultCharset,帮助开发者更好地理解和应用这些属性,以确保网页在不同环境下的正确显示。 ... [详细]
  • 应用链时代,详解 Avalanche 与 Cosmos 的差异 ... [详细]
  • 本文详细介绍了如何在 Django 项目中使用 Admin 管理后台,包括创建超级用户、启动项目、管理数据模型和修改用户密码等步骤。 ... [详细]
  • 近期在研究逆向工程,因此尝试了一些CTF题目。通过合天网络安全实验室的CTF实战演练平台(http://www.hetianlab.com/CTFrace.html),我对Linux逆向工程的掌握还不够深入,因此暂时跳过了RE300题目。首先从逆向100开始,将文件后缀名修改为.apk进行初步分析。这一过程不仅帮助我熟悉了基本的逆向技巧,还加深了对Android应用结构的理解。 ... [详细]
  • 您的数据库配置是否安全?DBSAT工具助您一臂之力!
    本文探讨了Oracle提供的免费工具DBSAT,该工具能够有效协助用户检测和优化数据库配置的安全性。通过全面的分析和报告,DBSAT帮助用户识别潜在的安全漏洞,并提供针对性的改进建议,确保数据库系统的稳定性和安全性。 ... [详细]
  • NoSQL数据库,即非关系型数据库,有时也被称作Not Only SQL,是一种区别于传统关系型数据库的管理系统。这类数据库设计用于处理大规模、高并发的数据存储与查询需求,特别适用于需要快速读写大量非结构化或半结构化数据的应用场景。NoSQL数据库通过牺牲部分一致性来换取更高的可扩展性和性能,支持分布式部署,能够有效应对互联网时代的海量数据挑战。 ... [详细]
author-avatar
355301_01c00c
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有