今天周六来公司加班,碎片化时间系统整理下过去一年的工作,以及未来2020年的一些计划和目标。
期间在整理问题时,忽然思考一个问题,未来的车机是什么样的?(当然不能想的太长久,未来的车和出行是什么样的都无法确定)
过去的车机是什么样的?不得不想到我刚入车联网这一行的时候,大概是在2011年,当时是Windows CE系统较多(因为开发界面方便?),Linux系统也有,但开发界面,即所谓的HMI开发太麻烦(当时好像QT还没有那么成熟)。我们团队还不得不经常去找微软解决车机的系统问题。当然本人在加入车联网行业前,是在通讯行业,最早接触的是Vxworks系统(说法是实时性好),虽然我在学校里学的是Windows系统(DOS也有,记得当时的turbo C就是在Dos环境,486机器上进行调试)下的Visual C++ 6.0?Redhat的Linux(一段时间还穿插用过Unix),记得当初以VI操作猛为傲,特鄙视用界面鼠标的。但是在工业界,当初用的是Vxworks和WinCE。
10年11年,Z和C这样的大公司都在全面转向Linux,我当时的感觉就是学校里学的东西,熟悉感来了,不再去搞一些自己不熟悉的操作系统。
也就是所谓的嵌入式开发,都在这些公司转向了Linux化,慢慢的源码和开发环境也在聚焦和变化,车机开始分层,内核用Linux源码,驱动自己做集成(BSP和HAL层的修改),自己做中间层,产生了framework和大量的服务包,跨组件通信方式(MFC编程那套东西慢慢开始遗忘,后来自学的.net技术和知识也在慢慢弱化没有深入),在Z公司,纯嵌入式,Linux不做界面。在C公司,车机涉及到界面,开始接触HMI,QT等,觉得做个界面好复杂,Windows下做界面太轻松了。
在C公司,两个类型的产品,一个是ECU,不用界面,一个是IVI车机,用界面。但很多组件包其实可以共用。当时觉得Linux开源,大势所趋,后来出现的Genivi等慢慢把中间件也开始平台化。
直到Android的出现。
其实彼时,在手机行业,操作系统发生了更剧烈直接的变化,symbian系统昙花一现,IOS系统随着乔神横空出世,树立了一杆旗帜,WindowsCE系统不管如何改名都在苦苦挣扎,Linux系统的衍生品Android系统开始初显锋芒,随着Google的强势崛起,Android系统占有率大规模上升,即使至今我都不觉得它是最好的移动系统从技术上,但是从生态圈开发等综合来看,它确实有优势。
对车机系统的冲击就是,突然移动开发爆发了,成千上亿级的应用在安卓平台上。车机是否可以用安卓系统呢?P公司当时干的就是修改Android系统源码,复制移动互联网开发方式,git/gerrit/redmin/jira等开源方式取代了传统的clearcase/clearrequest,时间大概到了14年。当时最浅显的看法就是,Android系统直接拿来用肯定不行的,有点慢,不是实时响应的,会影响汽车一些关键信号的处理;系统太重,而车机的硬件太落后,跑不动。虽然界面开发方便,人才招聘方便,甚至一些APP可以直接简单修改修改,就可以从手机移植到车机。多方面的好处,吸引到了这个行业的从业者,Android来了。
这个时候是Linux占一部分,QNX占一部分,Android占很小一部分的时代,巨头还是想的是Linux基础上拥有自己的车机系统平台。
在我将注意力转向服务器,云平台,搭建车联网生态集成的时候,车载系统慢慢发生了一些改变。
Hypervisor的方式突然在一些厂家兴起来了。
多套操作系统可以共用一套硬件,是因为PC或者服务器上的虚拟机vmware这些公司的影响吗?时间大概在15年左右。
技术更新的节奏也加快了,集多系统所长的hypervisor方案大行其道,这个时候QNX hypervisor,opensynergy等等,都想推广抢占这个平台,但与之俱来的技术问题也多了起来,至今很多都还在探索中,系统集成的复杂度也多起来了。linux的实时安全不受控制,android的生态,qnx的稳定,开始慢慢分配到了娱乐infotainment应用,汽车电子原生应用,仪表等几个产品上;加上智能汽车,所谓座舱概念的兴起,更是将这些故事串到了一起。
然而,似乎车载OS的故事经历了好几季,下一季又将如何呢?
回到本文初始,车机Android系统,会用Google正大力推的kotlin吗?native app的开发方式还会垄断全部吗?小程序轻应用,甚至15到17年谈的H5开发方式会如何发展呢?Alios, webapp的方式会如何进展下去?
个人初步觉得,部分车机应用轻量化云化必然是大势所趋,正如车机的发展一直跟随着移动系统的发展一样,跟随而不是完全照搬。而汽车整体的电子电器架构在没有翻天覆地的变化前,native app的开发方式必然还有很久的生命力和存在必要性,至于是kotlin还是java,抑或是js,那其实不重要,不是吗?对于前端程序员来说,你都得学!嗯,所以头秃的加班的,一定是这样的!
个人还有一个感觉,hypervisor这种方式只是一个过渡阶段,是没有一个很好的操作系统能满足汽车工业的进步而带来的过渡性解决方案,如果有一个很好的操作系统,能够开发,实时稳定,生态又好,性能又佳,为何要用这么别扭的拼积木的方式呢?
作为车机的程序员,是痛苦的,一定是Java得学,往下走,C/C++一定得学,往前走,Kotlin也得学,至于js,那必然也得学,python,嗯,目前看也当然得有最好!上的天堂(kotlin)下的厨房(c/汇编),至于更电子化的ECU,所谓的simulink等,我从来不觉得那是程序员,是工程师,但不是我眼里的程序员或者CSer...