热门标签 | 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++开发能力的软件工程师。


推荐阅读
  • 2018年人工智能大数据的爆发,学Java还是Python?
    本文介绍了2018年人工智能大数据的爆发以及学习Java和Python的相关知识。在人工智能和大数据时代,Java和Python这两门编程语言都很优秀且火爆。选择学习哪门语言要根据个人兴趣爱好来决定。Python是一门拥有简洁语法的高级编程语言,容易上手。其特色之一是强制使用空白符作为语句缩进,使得新手可以快速上手。目前,Python在人工智能领域有着广泛的应用。如果对Java、Python或大数据感兴趣,欢迎加入qq群458345782。 ... [详细]
  • 本文介绍了RPC框架Thrift的安装环境变量配置与第一个实例,讲解了RPC的概念以及如何解决跨语言、c++客户端、web服务端、远程调用等需求。Thrift开发方便上手快,性能和稳定性也不错,适合初学者学习和使用。 ... [详细]
  • Oracle优化新常态的五大禁止及其性能隐患
    本文介绍了Oracle优化新常态中的五大禁止措施,包括禁止外键、禁止视图、禁止触发器、禁止存储过程和禁止JOB,并分析了这些禁止措施可能带来的性能隐患。文章还讨论了这些禁止措施在C/S架构和B/S架构中的不同应用情况,并提出了解决方案。 ... [详细]
  • 本文介绍了绕过WAF的XSS检测机制的方法,包括确定payload结构、测试和混淆。同时提出了一种构建XSS payload的方法,该payload与安全机制使用的正则表达式不匹配。通过清理用户输入、转义输出、使用文档对象模型(DOM)接收器和源、实施适当的跨域资源共享(CORS)策略和其他安全策略,可以有效阻止XSS漏洞。但是,WAF或自定义过滤器仍然被广泛使用来增加安全性。本文的方法可以绕过这种安全机制,构建与正则表达式不匹配的XSS payload。 ... [详细]
  • 背景应用安全领域,各类攻击长久以来都危害着互联网上的应用,在web应用安全风险中,各类注入、跨站等攻击仍然占据着较前的位置。WAF(Web应用防火墙)正是为防御和阻断这类攻击而存在 ... [详细]
  • React 小白初入门
    推荐学习:React官方文档:https:react.docschina.orgReact菜鸟教程:https:www.runoob.c ... [详细]
  • 本文介绍了Python高级网络编程及TCP/IP协议簇的OSI七层模型。首先简单介绍了七层模型的各层及其封装解封装过程。然后讨论了程序开发中涉及到的网络通信内容,主要包括TCP协议、UDP协议和IPV4协议。最后还介绍了socket编程、聊天socket实现、远程执行命令、上传文件、socketserver及其源码分析等相关内容。 ... [详细]
  • 开发笔记:加密&json&StringIO模块&BytesIO模块
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了加密&json&StringIO模块&BytesIO模块相关的知识,希望对你有一定的参考价值。一、加密加密 ... [详细]
  • Voicewo在线语音识别转换jQuery插件的特点和示例
    本文介绍了一款名为Voicewo的在线语音识别转换jQuery插件,该插件具有快速、架构、风格、扩展和兼容等特点,适合在互联网应用中使用。同时还提供了一个快速示例供开发人员参考。 ... [详细]
  • 腾讯安全平台部招聘安全工程师和数据分析工程师
    腾讯安全平台部正在招聘安全工程师和数据分析工程师。安全工程师负责安全问题和安全事件的跟踪和分析,提供安全测试技术支持;数据分析工程师负责安全产品相关系统数据统计和分析挖掘,通过用户行为数据建模为业务决策提供参考。招聘要求包括熟悉渗透测试和常见安全工具原理,精通Web漏洞,熟练使用多门编程语言等。有相关工作经验和在安全站点发表作品的候选人优先考虑。 ... [详细]
  • 浅解XXE与Portswigger Web Sec
    XXE与PortswiggerWebSec​相关链接:​博客园​安全脉搏​FreeBuf​XML的全称为XML外部实体注入,在学习的过程中发现有回显的XXE并不多,而 ... [详细]
  • 篇首语:本文由编程笔记#小编为大家整理,主要介绍了VoLTE端到端业务详解|VoLTE用户注册流程相关的知识,希望对你有一定的参考价值。书籍来源:艾怀丽 ... [详细]
  • flowable工作流 流程变量_信也科技工作流平台的技术实践
    1背景随着公司业务发展及内部业务流程诉求的增长,目前信息化系统不能够很好满足期望,主要体现如下:目前OA流程引擎无法满足企业特定业务流程需求,且移动端体 ... [详细]
  • 众筹商城与传统商城的区别及php众筹网站的程序源码
    本文介绍了众筹商城与传统商城的区别,包括所售产品和玩法不同以及运营方式不同。同时还提到了php众筹网站的程序源码和方维众筹的安装和环境问题。 ... [详细]
  • Hello.js 是一个用于连接OAuth2服务的JavascriptRESTFULAPI库,如Go ... [详细]
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社区 版权所有