Warum wird Python in Flugzeugen verwendet, obwohl es möglicherweise nicht zertifizierbar ist?

Ich hatte kürzlich eine Diskussion mit Leuten, die in der Luftfahrtindustrie aktiv waren, und sagte mir, dass eine der wichtigsten Sprachen/Tools, die sie verwenden, Python ist.

Andererseits habe ich immer gewusst, dass Leute C++ oder zB Linux aus Zertifizierungsgründen für die Avionik meiden. Die Zertifizierung ist auch einer der Gründe, warum KI und Computer Vision in C++ in Flugzeugen nicht zu sehen sind. Dennoch verwenden diese Leute die ganze Zeit Python.

Ich hatte (und werde nie) die Gelegenheit zu fragen, warum und wofür sie es benutzt haben. Könnte jemand erklären, warum und wofür Leute Python immer noch verwenden würden, obwohl es sehr schwierig sein könnte, es zu zertifizieren?

Es gibt mehr Computer in einem Flugzeug als Avionik, insbesondere in einem Verkehrsflugzeug. Außerdem gibt es in der Industrie mehr Computer als in einem Flugzeug. sie können ihre website in php schreiben, ihren buchungsserver in cobol, infotainment in java oder ihre datenbank in sql, was auch immer.
Nur weil sie es verwenden, heißt das nicht, dass sie es im Flugzeug verwenden . Ich arbeite an (weniger kritischer) eingebetteter Software und das gesamte Testsystem ist in Python geschrieben, obwohl die eigentliche Software in C ist.
Was meinst du mit zertifiziert?
Das schreit nach einem „Schlangen im Flugzeug“-Witz....
@LangeHaare So ziemlich alles, was in die Konstruktion eines Flugzeugs einfließt, muss von den zuständigen Luftfahrtbehörden zertifiziert werden, bevor das Flugzeug legal geflogen werden darf. Sicherheitskritische Systeme – wie zum Beispiel der Code, der die Flugsteuerung ausführt – erfordern die Erfüllung ziemlich strenger Zertifizierungsstandards.
Um einen weiteren Kommentar zu C++ hinzuzufügen, hat Lockheed speziell einen Codierungsstandard für seine Verwendung im F-35-Programm geschrieben: stroustrup.com/JSF-AV-rules.pdf . Also ja, C++ wird verwendet.
"...sagte mir, dass eine der wichtigsten Sprachen/Tools, die sie verwenden, Python ist..." Aber wofür? Die Frage sollte wirklich um diese wichtigen Informationen erweitert werden. Sonst befürchte ich, dass es zu spekulativ wird.
@reirab warum sollten c++ und linux zertifizierbar sein? Es erscheint mir vernünftig, die Software zertifizieren zu können.
@tuskiomi Es hängt von der Art des betreffenden Codes ab. Verwenden Sie Linux auf dem Inflight-Entertainment-System für Passagiere? Kein Problem. Verwenden Sie es auf den Computern, auf denen das Fly-by-Wire-System ausgeführt wird? Viel größeres Problem. Unter anderem wird Nichtdeterminismus ein Thema sein. Das Timing ist auf einem Betriebssystem mit präemptivem Multitasking von Natur aus nicht deterministisch. RTOS oder Bare Metal sind in der Regel die einzig praktikable Wahl für solche Szenarien. Die dynamische Speicherzuweisung ist ebenfalls von Natur aus nicht deterministisch (es sei denn, Sie kennen genau jede Zuweisung, die auftreten wird, und in welcher Reihenfolge.)

Antworten (3)

Nur weil Luftfahrtentwickler Python verwenden, heißt das nicht, dass Python tatsächlich fliegt.

Ein Großteil der Luftfahrtentwicklung dreht sich um das Testen, Stressen, Validieren, Analysieren und Dokumentieren des Codes, der tatsächlich fliegt.

Python ist eine ausgezeichnete Sprache für all diese Validierungsarbeiten, auch wenn sie am Boden bleibt.

Ja, Python ist eine gängige Skriptsprache, die für die Automatisierung von Testgeräten verwendet wird. Die primären Sprachen, von denen ich weiß, dass sie tatsächlich fliegen, sind Ada/SPARK, C/C++ und Assembler
@selectstriker2 C++ bist du dir da sicher? Ich war mir ziemlich sicher, dass Unternehmen auch einige Probleme mit der Zertifizierung für diese Sprache hatten. Als Beispiel: Leute, die KI und Computervision für UAVs machen, schreiben ihren gesamten Code in Ebene C, anstatt die bekannten Open-Source-Bibliotheken wie openCV zu verwenden.
Es ist nicht die Sprache, die Zertifizierungsprobleme verursacht. Dinge wie dynamischer Speicher, Ausnahmebehandlung, Vererbung und Funktionsüberladung können den erforderlichen Arbeitsaufwand für die Zertifizierung (Verifizierung) erhöhen. Die größte Zertifizierungslast entsteht, wenn Sie ein RTOS verwenden, anstatt für Bare Metal zu schreiben.
Ich bin sicher, dass in DO-178B/C-Projekten auf Level D oder Level E viel C++ verwendet wird.
Und nur weil Code fliegt, heißt das nicht, dass er sicherheitskritisch ist. Heutzutage verwenden die Leute iPads als Teil ihres Avionik-Setups – IPADS!! Aber diese werden normalerweise für Navigation und Karten verwendet - das iPad kann niemals Steuerflächen oder Fahrwerke oder irgendetwas Mechanisches steuern
Es gibt umfassende Richtlinien für die Softwareentwicklung in C und C++. Diese verbieten die Verwendung der "lästigeren" Teile der Sprachen. Siehe misra.org.uk/Publications/tabid/57/Default.aspx . Ada "schien damals eine gute Idee zu sein", aber es ist nie eine Mainstream-Sprache geworden, was bedeutet, dass die Benutzerbasis (wahrscheinlich nicht nachhaltig) klein ist - es sei denn, Sie glauben, dass es eine langfristige Zukunft hat, an der Sie teilnehmen möchten, Sie würden es höchstwahrscheinlich vermeiden, sich darauf einzulassen.
@LandonZeKepitelOfGreytBritn: „Plane C“ – ist das ein absichtlicher Witz? :-)
@psmears Angesichts des Links von alephzero gibt es tatsächlich eine Teilmenge von C, die als "Ebene C" betrachtet werden könnte.
Als Nebenbemerkung muss ein Teil der Verifizierungssoftware formal unter DO-330 qualifiziert werden. Die allgemeine Faustregel lautet: Wenn Software DO-178-Zertifizierungsprozesse automatisiert und die Ausgabe des Tools nicht überprüft wird, müssen Sie einen Qualifizierungsprozess durchführen, um zu beweisen, dass Ihre Software zuverlässig ist.
Natürlich fliegt Python! Antigravitation importieren
@selectstriker2 Einige Sprachen erzwingen Ihnen grundsätzlich eine dynamische Speicherzuweisung, ob Sie es mögen oder nicht. Python ist einer von ihnen.
@PeterGreen Aus diesem Grund würden Sie Python nicht in sicherheitskritischen Anwendungen verwenden. Ich habe über die Verwendung von C++ gesprochen, das verwendet werden kann, aber Sie müssen die von mir aufgelisteten Elemente berücksichtigen.
@selectstriker2 Heh, einverstanden. Die Leute von QNX und C/MISRA, die in der Automobilindustrie arbeiten, können trotz beträchtlicher Bemühungen nicht einmal C++ in Fahrzeuge bekommen. Python? Der Vorschlag würde aus dem Gebäude gelacht, da er nicht annähernd den Sicherheitsspezifikationen, Zertifikaten usw. entspricht.
Ich habe für einen Avionik-Subunternehmer gearbeitet. Wir haben C für alle Steuerungssoftware und Python bis Hardware im Blackbox-Test ALLES verwendet. ~80%-90% des gesamten geschriebenen Codes war Python-Testcode. Jede Zeile von C hatte Hunderte von Python-Zeilen, die sie testeten.
@selectstriker2 Fast alle Sprachfunktionen von C++ über c verursachen Determinismusprobleme. Zusammen mit unvorhersehbaren und nicht zertifizierten Compilern bedeutet dies, dass es keinen wirklichen Sinn macht, in einer Sprache zu schreiben, in der Sie ständig wachsam sein müssen, um sicherzustellen, dass Sprachfeatures nicht verwendet werden

Als Softwareingenieur, der bei einem Verteidigungsunternehmen arbeitet, das geschäftskritische (aber nicht sicherheitskritische) Systeme entwickelt und verkauft, kann ich bestätigen, dass es eine ziemlich gleichmäßige Aufteilung zwischen der Entwicklung in Ada (95) für unsere Legacy-Produkte und verschiedenen Varianten von C/ C++ für unsere neuen Produkte. Die Entwicklung in beiden erfolgt selbstverständlich nach den entsprechenden Standards.

Python beschränkt sich weitgehend auf Plugins für unsere IDEs oder Validierungs- und Verifizierungsaktivitäten (die sowohl von Software- als auch von Systemingenieuren verwendet werden).

Ich habe Ada 83 sehr genossen, als es an meinem College gelehrt wurde, teilweise um gleiche Wettbewerbsbedingungen für die Studenten zu schaffen. Ich stellte fest, dass meine Programme viel weniger wahrscheinlich abstürzten als mit C oder C++, wenn ich ihre Funktionen sinnvoll nutzte. Ich finde besonders C++ als Sprache außerordentlich mühsam (und ich benutze es jetzt seit >20 Jahren und lese die letzten drei Standards -- ok, vielleicht ist das der Grund). C ist nicht gerade sicher, aber zumindest eine kleine Sprache, die leicht vollständig zu verstehen ist (die Sprache, nicht die Bibliotheken). Ist Ada also tatsächlich auch in der Avionik ausgemustert? Das wäre traurig.
Ich habe in den letzten 10 Jahren an sicherheitskritischer Avioniksoftware gearbeitet, und in dieser Zeit habe ich Ada noch nie benutzt gesehen. Ich weiß, dass einige große Unternehmen es für einige Projekte verwenden, aber es wird an den meisten Hochschulen nicht gelehrt. C/C++ ist tendenziell die am häufigsten gelehrte Bare-Metal-Sprache.
@Peter Die SPARK / Ada-Leute behaupten, dass es in den EuroFighter- und Rolls-Royce-Motoren verwendet wird. Ich mag die Idee der Sprachbeweisbarkeit sehr, aber es scheint definitiv ein Nischenfeature zu sein.
@mbrig Ich finde es amüsant, dass das vom US-Verteidigungsministerium entwickelte ADA im EuroFighter und den britischen (na ja, irgendwie ... nur dem Namen nach OK) Rolls-Royce-Motoren verwendet wird.
@FreeMan Ich würde mir vorstellen, dass EuroFighter und Rolls auch das vom US-Verteidigungsministerium entwickelte Internet verwenden. :) DoD entwickelt eine Menge Dinge.
@mbrig Arbeite derzeit am Eurofighter, also kann ich bestätigen, es ist alles über dem Taifun (und dem Tornado). Ich glaube, es wurde vor langer Zeit vom MOD vorgeschrieben.
@PeterA.Schneider: Ein großes Problem mit C besteht darin, dass der Standard feststellt, dass Implementierungen häufig dokumentierte Funktionen der Ausführungsumgebung in Fällen nützlich machen, in denen der Standard sonst keine Anforderungen stellen würde, und die Low-Level-Programmierung häufig die Verwendung solcher Funktionen erfordert. Es gibt kein Standardmittel, mit dem Code anzeigen kann, dass er zB die Fähigkeit benötigt, relationale Operationen zu verwenden, um zu testen, ob zwei Zeiger überlappende Speicherbereiche identifizieren. Systeme mit linearen Adressen definieren im Allgemeinen eine globale transitive Ordnungsbeziehung zwischen allen Zeigern ...
... aber Compiler für solche Systeme können manchmal entscheiden, dass sie davon ausgehen sollten, dass Code dies niemals tun wird, da der Standard keine Anforderungen an das stellt, was passiert, wenn Code zwei unabhängige Zeiger vergleicht.
Deshalb testen und verifizieren wir alles, stellen Sie nur sicher, dass der Compiler keinen Maschinencode generiert hat, der sich anders verhält als erwartet

Es gibt drei grundlegende Codierungsbereiche für Luftfahrtingenieure. Softwarecode, der auf Flugcomputern und anderen Avionikgeräten ausgeführt wird, Software, die diesen Code formal verifiziert und erstellt, und Skripterstellung zur Automatisierung informeller Arbeitsaufgaben. Python hat in allen unterschiedliche Anwendungsfälle.

Zunächst einmal zur eigentlichen Software im Flugzeug. Hier gibt es unterschiedliche Sicherheitsstufen und unterschiedliche erforderliche Prüfstufen. Es wäre ein Albtraum, Python für ein kritisches Display, einen Autopiloten oder eine Warneinheit für Bodenannäherung zu zertifizieren. Cs Mangel an objektorientierter Programmierung und Klagen, wenn Sie Variablentypen missbrauchen, mögen ärgerlich sein, aber sie führen auch zu einer einfachen Überprüfung, dass die Software hinter Ihrem Rücken nichts falsch macht. Andererseits habe ich von unkritischen Systemen wie Bordunterhaltung und Wartung gehört, die sogar Systeme wie Windows NT verwenden.

Codegenerierung und formale Verifizierung (die Art, die dokumentiert wird, um den Zertifizierungsstellen zu beweisen, dass Sie niemanden töten werden) müssen manchmal formal qualifiziert werden. Sie können nicht einfach ein Python-Skript schreiben, um Ihre gesamte Software durch Simulation, formale Methoden usw. zu testen, und dann den Zertifizierungsstellen sagen, dass Ihr Python-Skript keine Probleme gezeigt hat. Genauer gesagt bietet DO-330 eine Anleitung, dass, wenn Sie ein Tool zum Ersetzen von DO-178-Prozessen (wie Testen, Codegenerierung oder Konfigurationssteuerung) verwenden, dieses Tool entweder formal qualifiziert sein muss oder seine Ausgabe muss überprüft werden (ja, auch wenn die Ausgabe narrensicherer ist als ein Mensch, der die gleiche Analyse durchführt).

Schließlich beinhalten viele Jobs von Ingenieuren Skripterstellung, und es gibt derzeit wenige Sprachen, die für die Skripterstellung beliebter sind als Python. Mit Scripting meine ich das Lösen von Problemen wie:

  • Welche Themen bearbeite ich in diesem Bereich?
  • Wie füge ich hundert Dateien auf einmal eine Beschreibung hinzu?
  • Unterscheidet sich dieses Kriterium statistisch von diesem Kriterium?
  • Wie kann ich Hunderte von Datenzeilen aus unserer Datenbank ziehen und sie in einer Tabelle für meinen Projektingenieur ablegen?
  • Wie kann ich meinen Chef jeden Tag per E-Mail um eine Beförderung bitten?

In diesen unkritischen, aber alltäglichen Angelegenheiten kann Python-Skripting helfen, viele komplexe oder sich wiederholende Aufgaben zu bewältigen und sie handhabbar zu machen.

Ich habe mehr als ein paar Flughafenterminals gesehen, auf denen Win NT läuft - das kann man am BSOD erkennen! (Ja, ich habe ein paar gesehen.) Das bezieht sich natürlich auf die Luftfahrt, ist aber nicht flugzeugspezifisch.
Sicherlich verbringen wir viel Zeit damit, ausgefallene Excel-Tabellen voller VBA zu schreiben, um Daten zu verarbeiten!
... hackt dieses Promotion-Skript weg
„Der Mangel an objektorientierter Programmierung und Beschwerden in C, wenn Sie Variablentypen missbrauchen, mag ärgerlich sein, aber sie führen auch zu einer einfachen Überprüfung, dass die Software hinter Ihrem Rücken nichts falsch macht.“ Ähm ... C ist schrecklich, um irgendetwas zu verifizieren, dafür brauchen Sie wirklich ein stärkeres Typsystem. Java, C++, offensichtlich Ada haben hier einen besseren Stellenwert, ganz zu schweigen von den wirklich starken Typsystemen, die Sprachen wie O'Caml, Haskell oder Idris bieten. Und sogar Python ist wohl sicherer als C, weil sein Typsystem stärker ist.
(Ich nehme an, Sie haben Recht, obwohl dieser C-Code, der im Wesentlichen die Fortran77-Teilmenge der Sprache verwendet, ziemlich gut verifiziert werden kann, aber es ist äußerst schmerzhaft zu schreiben.)
Mir gefällt, wie Sie sagen: "Wie kann ich meinen Chef jeden Tag per E-Mail um eine Beförderung bitten?" als ein Problem, für dessen Lösung ein Skript erforderlich ist. Stellen Sie sicher, dass Sie in diesen E-Mails auf die Vorzüge der Automatisierung hinweisen. :-)
@leftaroundabout Ja, C bietet viel Platz für Fehler wie NaN-Behandlung, Initialisierung und Speicherstrukturen, aber normalerweise wird die Codegenerierung für diese konsistent genug eingerichtet, um Probleme zu vermeiden (wie das Vermeiden der dynamischen Zuweisung und des Schutzes vor der Division durch Null). OOP und lose Eingaben erfordern andererseits viele komplexe strukturelle Abdeckungstests, da es möglich ist, dass das, was Sie für ein Foo halten, tatsächlich eine heimtückische Bar ist. Siehe zum Beispiel CAST-17.
@CodyP Nun, lose Eingabe ist das, was ich hauptsächlich mit "C ist schrecklich, um irgendetwas zu überprüfen" gemeint habe. Nochmal – wahr ist, solange du Fortran77 im Grunde nur in C schreibst, ist es einigermaßen starr. Aber sobald Sie irgendeine Art von Polymorphismus machen wollen, hilft Ihnen C überhaupt nicht mehr und Sie müssen durchgehen void*, was ungefähr die lockerste Typisierung ist, die Sie bekommen können. Und ohne jeglichen Polymorphismus ist es sehr schwierig, DRY einzuhalten, was im Prinzip aus Sicherheitsgründen sehr wünschenswert ist.
C++ OTOH ermöglicht die Wiederverwendung von Code in großem Umfang durch Vorlagen, die nicht auf gefährliche Untertypen angewiesen sind und zur Kompilierzeit vollständig verifizierbar sind. Und die Hindley-Milner-Sprachen lösen im Allgemeinen alle Polymorphismen zur Kompilierzeit auf und führen überhaupt keine impliziten Zwänge durch. Über Java oder C# ... Ich bin mir nicht sicher – sie sind sicherlich nicht die sicherste Option, aber zumindest wurden sie im Voraus mit dem Bewusstsein für OO-Subtyping und seine möglichen Auswirkungen auf die Sicherheit entwickelt.