宝马的Linux之路

761 阅读13分钟

原作者: Helio Chissini de Castro

翻译整理:土豆丝624

原文链接:www.youtube.com/watch?v=gNr…

预警:本人水平有限,欢迎大佬捉虫指正。

前记:这篇文章整理自我在油管Linux foundation订阅号看到的一个小视频,是宝马CarIT OS team的team leader2019年的一次演讲,讲了宝马为什么要选择Linux,在Linux使用过程中碰到了哪些问题。宝马如何解决Linux的safety和security的问题,宝马为什么不得不公开i3 HU的所有源代码。很有意思的一个小视频。英文水平尚可的,建议看原视频。

介绍

大家好,按照德国的传统,我们准时开始。我叫Helio,我来这里是来讲在汽车行业使用Linux碰到的所有困难。前面会讲的快一点留出更多的时间在最后回答问题。我相信讲完之后大家会有很多的问题。

我先介绍下自己。我的名字是Carstro。我是一个巴西人,但在德国差不多5年了。现在在宝马集团的CarIT部门工作。这个部门不像宝马集团那么有名。这个部门在宝马总部慕尼黑和自驾中心翁特尔斯希莱斯海姆之间的乌尔姆。乌尔姆是软件开发中心,负责软件集成和基础的开发工作,图中所示就是办公室。我是一名开源开发者。我曾经是KDE的开发人员,然后来到了一个和巴西完全不一样的国家。

每个行业都不一样

每一个行业都是不一样的,但是人们并没有意识到这一点。我们讨论Linux,并不是指把Linux装到电脑里使用它。每一个行业都有它的特殊性,有许多我们需要了解的细节。

移动行业

移动行业通过安卓系统使用Linux,它是一个真正的嵌入式系统。在我加入宝马之前,我是诺基亚N9项目的一员。这个系统是基于传统的UNIX和Linux的平台。

电信行业

电信行业最早的应用程序都是基于UNIX的。这一点和移动行业完全不一样。但是很容易移植到Linux上。这就是为什么电信是第一个大规模使用Linux的行业。

航空领域

这个行业严重依赖功能安全,所以我们几乎看不到Linux运行在这个领域。

金融行业

金融行业的FTS(Financial Technical Services)应用程序是基于UNIX的,所以移植到Linux上也很容易。

汽车行业

对于汽车行业来说,每条装配线都是唯一的,需要LTS(Long Time Service)。通常我们都认为车至少要维护10年。10年对于电脑来说早都老化了。

装配线的重要性

为什么装配线这么重要。多个车模型在同一个生产线中组装。这些装配线都是两年前,三年前甚至5年前设计的,还在使用当中。在这些装配线上有好多不同的工具。在组装哪辆车并不重要,这条装配线运行直到车装配结束。中间任何地方失败,整条装配线都会停止工作,这些浪费的都是钱。公司很难负担起使用多种不同的工具。工具必须统一,宝马所有的车都必须使用同一种工具,每一步操作都要严格遵守规则。并且,对于许多公司来说,给每一辆车模型都建一条装配线是不可能的,代价太高。

为什么选用Linux?

最主要的障碍之一是用于装配线的最终平台,不会干扰当前的流程。当前的流程是指你已经买的车和已经在装配线上准备刷写软件的新车。我们需要处理的是已经发生的事情。我们不能让装配线停下来,这不是一件简单的事情。不是什么装配线出问题了,我们修复问题就好了。不是这样的。大部分的工具都是以前老的工具,有好几种格式,有些已经老化了。举个例子,宝马运行在某些老化车型上的代码,已经用了很多年了。基本上我们还得使用这些代码,不能影响以前的环境。最终的部署要透明。当你去工厂的时候,工厂的工人不理解。哦,你要用Linux,我们现在用的和你的不一样。最重要的是最终的流程要一样,最终车能够上路跑,这就够了。

宝马已经在使用Linux

如果你去年买了宝马的新车,新车上已经使用了Linux。严格来讲是在HU(Head Unit)上使用了Linux。HU是全部使用Linux。这个项目是大计划的基础。为什么是第一个?有个很重要的元素,HU上不需要safety.

尽管有人说这样我们就可以和HU一样用Linux互联车和其他一切。这样不对。因为汽车领域,对系统的safety有要求。大家都知道,我们对safety有基本的要求。未来也不会改变这一点。但是在HU这个例子中,我们已经看到了实际运行当中一个非常好的例子。

项目背后

我们从零开算做起。我们基于Genivi项目,Linux的构建基于Yocto。我们所有的集成都是基于Yocto。然后把UX集成到Linux。这样你在每个开发版上看到的都是相同的UX。当你提到宝马的时候,你可能听过,哦,你在用I5, I7,8,9. 这些都是每一代宝马的接口。我们在办公室内完成持续集成。这是我们第一次完成每一个步骤。从源代码开始到最终完成集成。这是我来到宝马后的第一个项目。确切的说,我们完成了集成部分。最终直接到工厂。

Linux之路的四个步骤

我现在的职位是OS组的team leader。我们的目标是整个车内都使用Linux,而不是像HU这样其中的一部分。未来宝马的车上所有的部分都使用Linux。达成这个目标真的很难。主要有四个问题。

Safety

第一个也是最重要的一个就是safety. 因为Linux不符合功能安全标准。在汽车行业,和其他行业不同的地方是我们有ASILB, ASILD这样的标准。这些safety级别决定在几千次操作中如何处理失败。它对safety的要求比航空航天领域低,但依旧非常困难。由于Linux不符合功能安全标准,所以在某些情况下我们是冒着危险的。但这不是技术上的难度,主要的是需要大量的规范工作和调研工作。现在我们主要从下面两方面做起。

分析当前的项目。我们需要做大量严苛的工作,比如我们得修复内核,我们得修复编译器,我们甚至得修复编译器的选项。我们需要知道系统构建的每一个细节。然后才能知道系统是不是真的符合功能安全标准。我们不能简单的做些修改。在将来还需要维护更新。它有点像嵌入式项目,因为要求safety所以要求更高。真的非常困难

另外,宝马加入了Linux foundation,创建了ELISA项目,宝马是创始人之一,我们是最早加入这个项目的一批,来实现Linux的功能安全。我们希望未来Linux可以用在汽车的所有领域。这是ELISA这个项目的目标。

Security

第二重要的就是Security。这个就是我们在Linux世界理解的security。我们为什么要讨论security呢。因为我们依旧得处理算法限制。我们需要知道在协议中发生的每一件事情,而不是简单的协议系统。不是简单的几个节点,简单的协议类似MD5这样的。我们需要不断引入各种不同的协议。我们某种程度上需要限制链接和有关的通信。而且它和safety是独立的。我们不能简单的把加密算法放在那里,就说一切都是security的。这只是security的一部分。最终我们在security这里还需要做大量的工作。

Compliance

这其实是一个法律上的问题。大部分公司在考虑使用开源代码的时候并不会考虑这方面的问题,不会认为这是一个雷区。但是当发布产品的时候,就会知道发生了什么。

这样的事情确实发生了。当我们发布i3的时候,有些人就看到了,哦,你在i3的HU上用了Linux。然后他就给卖家写信我想要源代码。这是一个正常的做法,我从卖家那里买了车,有什么事都找卖家。他写信给卖家,认为宝马不会回答他。他认为宝马是不可能这样做到的。他还把这件事写到了网上。他不知道的是,我们回答了他。一般来说,你写信给卖家并不确定是否会得到答案。最终,所有屏幕上显示的,如果license要求我们必须提供的,如果你需要源代码,请写email给我们。这个人发了邮件并且说宝马不会回应。最终我们发了一个DVD给他,里面有i3所有的源代码。然后这个人把源码发到了github上,至今还在那里。我们是不是感到困扰?并不是这样的,我们很乐意这样做。我现在告诉你我们在这个项目上做了什么。每一次构建,这里不是一次编译发布的过程,这里指的是持续集成的时候构建的image. 它会自动构建一个开源软件镜像,并符合所有的软件license许可。我们一开始没有发现这个问题,所以付出了代价。他在博客上道了歉,我就在那里。他甚至在代码里发现了一些安全漏洞,这很棒。这正是我们期待的,这件事情就过去了。

这是合规性的一件事情。我们需要走的更远。现在我们是open source compliance的一员。这是我们可以真正使用的工具的一个例子。开源组成员都可以使用。这是一个很大的项目,涵盖了开源合规所有的工具链。你可以在持续集成中使用。从某种程度上,至少对有些层面的发布是一种保证。但第一次都很困难。

生态

众所周知,汽车行业之前从来没用过Linux或者其他开源的东西。我们内部开发的时候可能用过,在量产的时候并不使用。大部分人还是会使用其他专用的操作系统。这些系统都是经过功能安全认证的,在那个时候存在的操作系统。这就意味着在汽车领域,有大量的公司,不是一个两个三个,而是好多个,都在使用以前的系统。他们从来没有碰过Linux。我们现在完全转到Linux但是他们只懂过去那套系统。对于一个新事物,他们没有时间学习。我们担心会面临大量的问题。因为人们还在用以前的系统开发软件。你得教他们。这个已经发生了,所以非常复杂。最终我们只能祈求将来不要再做这样的事情。

我们应该怎么做呢?我们因为某些原因现在跳转到Linux,所以需要给这些人进行培训,直到他们了解了所有的事情。他们担心害怕,这些事情会威胁到他们的工作。他们知道一种方法,所以不信任现在这种新做法,所以会以另外一种方式做事情甚至会伤害整个流程。所以我们要教会这些人。这真的很困难。我们不能简单的新雇用一些开发者,看起来很简单。即使是有足够的钱付得起这些工程师,也是不可能的,因为大家都在招人。第二件事情就是我们不能简单的改变一个团队然后就要求他们去做事情。这是事实。因为他们会害怕新事物从而以另外一种方式做事。他们需要理解新的做法。而且也不是我们想的那么简单,你会C/C++编程,就可以做所有的事情。不是这样的。你需要清楚这个事实。这就是需要面临的环境。你需要去教他们然后再改变。

未来项目

现在这个项目还有很多问题,但是同时我们也并行开展了车里面其他多个架构的项目。这是都是为未来的车计划的。我们在开发方式上严格分开。我们需要找到一个简单的方法如何分开操作系统,SDK开发和应用程序开发。否则将来做集成,会造成性能下降。这样就会非常困难,逼迫我们做比实际更多的事情。所有的一切都全部集成进CI,没有任何二进制blob。在项目的开始我们是这样要求的,没有任何二进制blob。我们现在用的都是19年之前的LTS。这就是为什么我们现在都在修复之前的问题。一旦新的TLS可用,我们就会切到这个上面了。这些都是为了将来的车的软件。宝马的车将来全部都会使用Linux。这就是我为什么在这里的原因。

Q&A

(问题太远听不清楚,只能捕捉一些关键字)

为什么决定用Linux?

因为第一个HU的项目很成功。这是我们的第一个项目,CarIT部门一直都在做开源软件,然后我们决定先做HU。这个项目很成功,然后管理层就决定以后用Linux。

关于实时性

现在用的是官方的实时性的包。

关于Linux维护的年限

要求至少维护10年,而且必须要safety认证。在上路之前,必须保证安全。这个跟其他的操作系统没有什么区别。现在我们也没找到一个好的方法如何维护Linux。这就是我们为什么参加Linux foundation。希望能找到一个好的方法,将来能够做到。

现在的HU上没有用到video的功能,将来也许会。

谈到self-driving,我们有好几种不同的操作系统选择,但最终选择了Linux。因为我们有这方面的经验,HU的项目很成功。

关于Hypervisor,

现在不打算使用Hypervisor。也许将来会用,现在Hypervisor的技术对我们来说太复杂。

关于Linux

我们所有的车都会使用Linux。这不是开玩笑的,这是官方消息。如果你看了新闻发布会的话。而且我们不是唯一的一家。现在我们正在和梅赛德斯合作一个软件项目。