——从软件视角看波音737事故系列述评之二
波音737坠机事故对全球航空业的发展带来了巨大冲击,尽管事故调查尚未得出最终结论,但MCAS(自动纠正失速系统)软件漏洞确系是导致事故发生的重要原因。波音公司在推进工业技术软件化过程中投入巨大,但为何依然无法避免软件带来的安全隐患,这也许与软件自身的开发与应用特点紧密相关。
一般而言,产品开发包括了需求分析、产品设计、开发、测试等环节。对于大多数硬件产品而言,往往生产完成后一个开发周期也就完成了。而软件却大不相同,一个软件的开发完成只是代表其生命周期的开始,软件的持续维护和更新才是一个具有生命力的软件的关键。因此,可以说,任何软件都是不完美的,都是需要持续迭代的。例如,已拥有28年历史的Linux内核每两三个月就会有新的版本供用户更新,平均每两年就会有一次重大版本的迭代。再比如,微软公司的视窗操作系统每个月都会发布新的补丁以保证系统安全漏洞的及时修复。比特币公有链之所以能承载千亿美元的数字资产而保持稳定,其背后依赖的就是每年3000多次以上的代码更新提交。综合来看,软件持续更新的主要驱动力有三个:一是软件功能的增加与完善,二是与新硬件设备的适配,三是安全漏洞的修复。对于任何一款软件特别是面向行业应用的软件而言,安全漏洞的修复是最为重要的。没有绝对的安全,要想保证软件的持续安全应用,就必须对它进行持续的更新。事实上,在去年狮航737MAX事故发生后,波音公司就已经认识到MCAS软件漏洞的存在,而正是因为软件没能得到及时更新,才为埃航事故的发生埋下隐患。
软件系统要想实现持续的更新迭代,就要求软件提供者具备对软件更新的可控能力。这种可控能力既包括对用户更新行为的影响力,也包括对软件开发团队的管理能力,以及自身进行软件开发的创新能力。在这其中,对核心代码的理解程度和管理能力至关重要。在软件领域,代码是核心技术的载体,可以说,谁掌握了代码,谁就拿到了核心技术创新的主动权;谁主导技术创新,谁就拥有更多软件可控力。软件可控力的重要性在于:一是对软件的设计细节做到了然于胸,避免出现设计缺陷和低级漏洞;二是可提高软件更新迭代的效率,在出现问题后能够及时补救。波音空难的发生,就与波音对MCAS系统可控力弱有密切相关,原定的MCAS系统软件更新一再推迟,究其原因,可能与波音公司软件开发依赖他国公司外包、自身缺乏主导权且疏于管理有关。当前,围绕软件可控力,软件代码的控制权以及软件创新的主导权在未来市场竞争中的价值正在凸显,2018年微软花费75亿美元收购全球最大的开源代码托管平台Github就是例证。当然,不可否认的是,提高软件可控力也不完全等同于系统框架下每个软件都需要完全自主开发,我国C919飞机就使用了来自派克宇航、霍尼韦尔、利勃海尔等国外公司的多类系统,实现多类软件的高效管理,做到及时更新亦是提高软件可控力的表现。
没有任何一款软件是无暇的,是绝对安全的,软件的生命力就体现在对其外部环境如硬件设备、用户需求等的匹配水平和对其自身问题如系统bug、安全漏洞等的修复水平。要想使软件发展好,其核心路径就在于持续地更新迭代,关键环节即是软件开发和管理的可控。对于我国软件产业发展而言,一方面,应引导软件开发企业加强对软件代码层面创新能力的建设,持续对主要软件产品进行完善和优化,并积极参与国际开源项目,以大量的代码贡献获取前沿技术创新的主动权;另一方面,应依托主要系统集成商和大型设备制造商,建立完善有效的软件管理体系,及时向软件提供方反馈应用需求和使用问题,促进必要的软件产品和系统更新,防范应用风险。(本文作者系赛迪智库信息化与软件产业研究所博士)