Python 安全关键应用的编码标准

Python coding standard for Safety Critical Applications

来自 C/C++ 背景,我知道在嵌入式系统环境中适用于安全关键应用程序(如经典的医疗-汽车-航空航天三重奏)的编码标准,例如 MISRA, SEI CERT、Barr 等

跳过它是否应该或它是否适用于一种语言的问题,我想为嵌入式系统创建 Python 应用程序,这些应用程序 - 甚至模糊地 - 遵循一些安全标准,但找不到任何搜索,除了通用 Python 编码标准(如 PEP8

是否有专门适用于安全关键系统的Python编码指南?

IEC 61508(工业)、ISO 26262(汽车)或 DO-178(航空航天)等“功能安全”的顶层安全标准带有软件部分(例如 IEC 61508-3),它​​们在其中列出一些合适的编程语言。这些都是经过长期使用证明的完全古老的语言,其中所有缺陷和 poorly-defined 行为都被视为 well-known 并且执行可以被视为可预测的。

实际上,对于最高安全级别,这意味着您几乎只能使用具有安全子集的 C (MISRA C) 或具有安全子集的 Ada (SPARK)。还提到了一些其他旧语言,如 Modula-2、Pascal 和 Fortran,但在现代安全 MCU 的背景下对这些语言的工具支持是 non-existent。对此类 MCU 的 Python 支持也是如此。

像 Python 和 C++ 这样的语言甚至没有提到最低的安全级别,因此在字里行间,它们被认为完全不合适而被忽略。甚至还不如纯汇编程序,它实际上被称为可能用于较低安全级别的东西。

可能 根据安全案例和管理标准机构在安全关键系统中使用 Python。

技术 - 可用性和实时性

但是,为了持续安全,总有时间上的要求。例如,anti-lock 中断系统必须始终准备好执行。即,高可用性。它还将有时间保证。如果 anti-skid 机制在鱼尾开始后才起作用,那就不好了。这将是一个 real-time 贵族。

许多更高级的语言,例如 python 包括垃圾收集。如果垃圾收集器不是增量的或可控的(当垃圾收集发生时),就不可能实现时间保证。在Python.

中很难有时间要求

有些系统不是连续的,例如 Covid 检测(我有 Covid-19 yes/no)。 可靠更重要,这意味着我是否始终获得正确的结果。

标准

正如 Lundin 所暗示的,一些标准是 规定性的 ,例如汽车标准 (ISO-26262) 和基本标准 IEC 61508。它们给出了实现安全的方法列表。

IEC 62304(医疗软件)等一些标准是目标导向的,但允许使用规定 IEC 61508。A安全案例必须通过技术论证来提出,即 Python 是用例的一个很好的技术选择。这可能非常困难,因此默认使用规定标准是常态。

坦率地说,我认为在更多情况下,Rust 可能是比 Python 更好的选择。一些监管机构允许您在大规模开发开始之前预览您的安全案例。如果您有一个以目标为导向的标准,那么让审计机构接受您对语言的论点是非常谨慎的。

现实

根深蒂固的语言将拥有工具和 pre-certification。例如,您可以获得 TUV-Sud 个经过认证的编译器。不仅代码,而且开发中使用的所有方面都必须针对安全案例进行分析。这包括静态检查器、版本控制工具、代码审查工具、CIT 系统等。根据 'safety level',您可能需要对所有这些元素进行认证。即,C 级起搏器或 ASIL-4 汽车部件。如果该语言以前从未在安全标准中使用过,则可能很难找到经过认证的工具,OS 或 run-time 库。

同样,证明一项新技术是安全的可能相当昂贵。这意味着最初进行这项工作的公司将增加成本。一个成功的产品,进入市场并帮助挽救生命比失败的智力练习更好。