Почему Python используется в самолетах, хотя он не подлежит сертификации?

Недавно у меня была беседа с людьми, активно работающими в авиационной отрасли, и они сказали мне, что одним из основных языков/инструментов, которые они используют, является Python.

С другой стороны, я всегда знал, что люди избегают C++ или, например , Linux из-за причин сертификации авионики. Сертификация также является одной из причин, по которой вы не видите ИИ и компьютерное зрение в C++ на самолетах. Тем не менее, эти люди используют Python все время.

У меня не было (и не будет) возможности спросить, почему и для чего они его использовали. Может ли кто-нибудь объяснить, почему и для чего люди все еще будут использовать Python, хотя его сертификация может быть очень сложной?

в самолете больше компьютеров, чем авионики, особенно в авиалайнере. Кроме того, в отрасли больше компьютеров, чем в самолете. они могут написать свой веб-сайт на php, свой сервер бронирования на коболе, информационно-развлекательную систему на java или базу данных на sql, что угодно.
Кроме того, только потому, что они используют его, не означает, что они используют его в самолете . Я работаю над (менее критичным) встроенным программным обеспечением, и вся тестовая система написана на Python, хотя реальное программное обеспечение написано на C.
Что вы имеете в виду под сертифицированным?
Это напрашивается на шутку про змей в самолете....
@LangeHaare Практически все, что входит в конструкцию самолета, должно быть сертифицировано соответствующими авиационными властями, прежде чем самолету будет разрешено летать на законных основаниях. Критически важные для безопасности системы, такие как код, управляющий управлением полетом, требуют соблюдения довольно строгих стандартов сертификации.
Чтобы добавить еще один комментарий о C++, компания Lockheed специально написала стандарт кодирования для его использования в программе F-35: stroustrup.com/JSF-AV-rules.pdf . Так что да, C++ используется.
"... сказали мне, что одним из основных языков/инструментов, которые они используют, является Python..." Но для чего? Вопрос действительно должен быть расширен, чтобы включить эту жизненно важную информацию. В противном случае, боюсь, это будет слишком спекулятивно.
@reirab, почему C ++ и Linux подлежат сертификации? Мне кажется разумным иметь возможность сертифицировать программное обеспечение.
@tuskiomi Это зависит от типа рассматриваемого кода. Используете Linux в бортовой развлекательной системе для пассажиров? Не проблема. Используете его на компьютерах, на которых работает система дистанционного управления? Гораздо большая проблема. Среди прочего, недетерминизм будет проблемой. Синхронизация по своей природе недетерминирована в ОС с вытесняющей многозадачностью. ОСРВ или «голое железо», как правило, являются единственным приемлемым выбором для таких сценариев. Динамическое выделение памяти также по своей сути недетерминировано (если только вы точно не знаете каждое выделение, которое произойдет, и в каком порядке).

Ответы (3)

Тот факт, что разработчики авиации используют Python, не означает, что Python действительно летает.

Большая часть разработки авиации связана с тестированием, нагрузкой, проверкой, анализом и документированием кода, который летает.

Python — отличный язык для всей этой работы по проверке, даже если он остается на земле.

Да, Python — это распространенный язык сценариев, используемый для автоматизации тестового оборудования. Основные языки, которые, насколько я знаю, действительно летают, это Ada/SPARK, C/C++ и ассемблер.
@selectstriker2 С++, ты уверен в этом? Я был почти уверен, что у компаний есть проблемы с сертификацией для этого языка. В качестве примера: люди, занимающиеся искусственным интеллектом и компьютерным зрением для БПЛА, пишут весь свой код в плоскости C, а не используют известные библиотеки с открытым исходным кодом, такие как openCV.
Это не язык, который вызывает проблемы с сертификацией. Такие вещи, как динамическая память, обработка исключений, наследование и перегрузка функций, могут увеличить объем необходимой работы по сертификации (проверке). Наибольшее бремя сертификации возникает, когда вы используете RTOS, а не пишете для «голого железа».
Я уверен, что в проектах DO-178B/C на уровне D или уровне E используется множество C++.
И то, что код летает, не означает, что он критичен для безопасности. В наши дни люди используют iPad как часть своей авионики — IPADS!! Но они обычно используются для навигации и составления карт — iPad никогда не управляет никакими управляющими поверхностями, шасси или чем-то механическим.
Существуют подробные рекомендации по разработке программного обеспечения на C и C++. Они запрещают использование более «проблемных» частей языков. См . misra.org.uk/Publications/tabid/57/Default.aspx . Ада «казался хорошей идеей в то время», но он так и не стал основным языком, а это означает, что пользовательская база (вероятно, неустойчиво) мала — если только вы не верите, что у него есть долгосрочное будущее, частью которого вы хотите быть, вы, скорее всего, избегали бы связываться с этим.
@LandonZeKepitelOfGreytBritn: "Самолет C" - это намеренная шутка? :-)
@psmears Учитывая ссылку alephzero, действительно существует подмножество C, которое можно считать «плоскостью C».
В качестве примечания: некоторые программы для проверки должны быть официально квалифицированы в соответствии с DO-330. Общее эмпирическое правило заключается в том, что если программное обеспечение автоматизирует процессы сертификации DO-178, а выходные данные инструмента не проверяются, вам необходимо выполнить процесс квалификации, чтобы доказать надежность вашего программного обеспечения.
Конечно, Python летает! импорт антигравитации
@selectstriker2 Некоторые языки в основном навязывают вам динамическое выделение памяти, нравится вам это или нет. Питон — один из них.
@PeterGreen Вот почему вы не должны использовать Python в приложениях, критически важных для безопасности. Я говорил об использовании C++, который можно использовать, но вам нужно учитывать перечисленные мною пункты.
@selectstriker2 Хе, согласен. Разработчики QNX и C/MISRA, работающие в автомобилестроении, не могут даже внедрить C++ в автомобили, несмотря на значительные усилия. Питон? Это предложение было бы высмеяно из здания, поскольку оно и близко не соответствует требованиям безопасности, сертификатам и т. д.
Я работал на субподрядчике по авионике. Мы использовали C для всего программного обеспечения управления и python для аппаратного обеспечения в циклическом тесте черного ящика ВСЕ. ~ 80%-90% всего написанного кода было тестовым кодом Python. Каждая строка C была протестирована сотнями строк Python.
@ selectstriker2 почти все языковые функции C ++ по сравнению с c вызывают проблемы с детерминизмом. Это в сочетании с непредсказуемыми и не сертифицированными компиляторами означает, что нет смысла писать на языке, где вам нужно быть постоянно бдительным, чтобы убедиться, что функции языка не используются.

Как инженер-программист, работающий в оборонной компании, которая разрабатывает и продает критически важные (но не критически важные для безопасности) системы, я могу подтвердить, что между разработкой на Ada (95) для наших устаревших продуктов и различными разновидностями C/ C++ для наших новых продуктов. Разработка в обоих, конечно же, осуществляется в соответствии с соответствующими стандартами.

Python в значительной степени ограничен плагинами для наших IDE или действиями по проверке и проверке (используемыми как программистами, так и системными инженерами).

Мне очень нравилась Ада 83, когда ее преподавали в моем колледже, отчасти для того, чтобы создать равные условия для студентов. Я обнаружил, что когда я правильно использовал его возможности, вероятность сбоя моих программ была намного ниже, чем при использовании C или C++. Я нахожу особенно C++ чрезвычайно трудным как язык (и я использую его уже> 20 лет и прочитал последние три стандарта - хорошо, может быть, поэтому). C не совсем безопасен, но, по крайней мере, небольшой язык, который легко понять (язык, а не библиотеки). Так действительно ли Ада прекращена даже в авионике? Это было бы грустно.
Я работал над критически важным для безопасности программным обеспечением для авионики последние 10 лет или около того, и за это время я ни разу не видел, чтобы Ада использовалась. Я знаю, что некоторые крупные компании могут использовать его для некоторых проектов, но в большинстве колледжей этому не учат. C/C++, как правило, является наиболее широко изучаемым языком «голого железа».
@Peter Люди SPARK / Ada утверждают, что они используются в двигателях EuroFighter и Rolls-Royce. Мне очень нравится идея доказуемости языка, но она определенно кажется нишевой функцией.
@mbrig Я нахожу забавным, что ADA, разработанная Министерством обороны США, используется в двигателях EuroFighter и британских (ну, вроде ... хорошо только по названию) Rolls-Royce.
@FreeMan Я полагаю, что EuroFighter и Rolls тоже используют Интернет, разработанный Министерством обороны США. :) DoD много чего разрабатывает.
@mbrig В настоящее время работает над Eurofighter, поэтому я могу подтвердить, что это повсюду Тайфун (и Торнадо). Я полагаю, что это было предписано Министерством обороны давным-давно.
@PeterA.Schneider: Основная проблема с C заключается в том, что, хотя в Стандарте отмечается, что реализации часто с пользой раскрывают документированные функции среды выполнения в тех случаях, когда в противном случае Стандарт не налагал бы никаких требований, а низкоуровневое программирование часто требует использования таких функций, нет стандартных средств, с помощью которых код может указать, что ему требуется, например, возможность использовать реляционные операции для проверки того, идентифицируют ли два указателя перекрывающиеся области памяти. Системы с линейной адресацией обычно определяют глобальное транзитивное отношение упорядочения между всеми указателями...
... но компиляторы для таких систем иногда могут решить, что, поскольку Стандарт не налагает требований на то, что произойдет, если код сравнивает два несвязанных указателя, они должны предполагать, что код никогда этого не сделает.
Вот почему мы тестируем и проверяем все, просто убедитесь, что компилятор не сгенерировал машинный код, который ведет себя не так, как ожидается.

Есть три основных области кодирования для авиационных инженеров. Программный код, работающий на бортовых компьютерах и другом авиационном оборудовании, программное обеспечение, формально проверяющее и создающее этот код, и сценарии для автоматизации неформальных рабочих задач. Python имеет разные варианты использования во всех из них.

Во-первых, для фактического бортового программного обеспечения. Здесь есть разные уровни безопасности и разные требуемые уровни тестирования. Python был бы кошмаром для сертификации критического дисплея, автопилота или устройства предупреждения о приближении к земле. Отсутствие в C объектно-ориентированного программирования и жалобы, когда вы злоупотребляете типами переменных, могут раздражать, но они также позволяют легко проверить, что программа не делает что-то неправильно за вашей спиной. С другой стороны, я слышал о некритичных системах, таких как развлечения и обслуживание в полете, даже с использованием таких систем, как Windows NT.

Генерация кода и формальная верификация (такая, которая задокументирована, чтобы доказать органам сертификации, что вы никого не убьете) иногда требует формальной квалификации. Вы не можете просто написать сценарий Python для тестирования всего вашего программного обеспечения с помощью моделирования, формальных методов и т. д., а затем сообщить органам сертификации, что ваш сценарий Python не выявил проблем. Чтобы быть более конкретным, DO-330 содержит рекомендации о том, что если вы используете инструмент для замены процессов DO-178 (таких как тестирование, генерация кода или управление конфигурацией), то этот инструмент должен быть либо официально квалифицирован, либо его выходные данные должны быть быть проверенным (да, даже если вывод более надежен, чем человек, выполняющий тот же анализ).

Наконец, многие рабочие места инженеров связаны со сценариями, и сейчас мало языков, более популярных для написания сценариев, чем python. Под сценариями я подразумеваю решение таких проблем, как:

  • Над какими вопросами я работаю в этой области?
  • Как добавить описание сразу к сотне файлов?
  • Отличается ли этот критерий статистически от тех критериев?
  • Как я могу извлечь сотни строк данных из нашей базы данных и выгрузить их в электронную таблицу для моего инженера проекта?
  • Как я могу каждый день писать своему начальнику письмо с просьбой о повышении?

В этих некритичных, но повседневных делах сценарии Python могут помочь решить множество сложных или повторяющихся задач и сделать их управляемыми.

Я видел более чем несколько терминалов аэропортов, работающих под управлением Win NT — вы можете сказать это по BSOD! (Да, я видел несколько.) Конечно, это связано с авиацией, но не конкретно с самолетами.
Конечно, мы тратим немало времени на написание причудливых электронных таблиц Excel, полных VBA для обработки данных!
... взламывает этот сценарий продвижения
«Отсутствие объектно-ориентированного программирования в C и жалобы, когда вы злоупотребляете типами переменных, могут раздражать, но они также позволяют легко проверить, что программное обеспечение не делает что-то неправильно за вашей спиной». Хм... C ужасен для проверки чего-либо, для этого вам действительно нужна более сильная система типов. Java, C++, очевидно, Ada — все они здесь лучше, не говоря уже о действительно сильных системах типов, которые предлагают такие языки, как O'Caml, Haskell или Idris. И даже Python, возможно, безопаснее, чем C, потому что его система типов сильнее.
(Я полагаю, вы правы, хотя код C, который по существу использует подмножество языка Fortran77, может быть проверен достаточно хорошо, но писать его чрезвычайно сложно.)
Мне нравится, как вы формулируете: «Как я могу каждый день писать своему боссу письмо с просьбой о повышении?» как проблема, для решения которой нужен сценарий. Убедитесь, что в этих электронных письмах вы указываете на достоинства автоматизации. :-)
@leftaroundabout Да, в C достаточно места для ошибок, таких как обработка NaN, инициализация и структуры памяти, но обычно генерация кода для них настроена достаточно последовательно, чтобы избежать проблем (например, избежать динамического распределения и защиты от деления на ноль). ООП и свободная типизация, с другой стороны, требуют много сложных тестов структурного покрытия, потому что вполне возможно, что то, что вы считаете Foo, на самом деле является коварным Bar. См., например, CAST-17.
@CodyP ну, свободная типизация — это то, что я в основном имел в виду под «C ужасен для проверки чего-либо». Опять же, правда в том, что пока вы просто пишете Fortran77 на C, он достаточно жесткий. Но как только вы захотите сделать какой-либо полиморфизм, C вам вообще не поможет, и вам придется пройти через void*это, это самая свободная типизация, которую вы можете получить. А без всякого полиморфизма очень сложно придерживаться DRY, что в принципе очень желательно для безопасности.
C++ OTOH допускает многократное повторное использование кода через шаблоны, которые не полагаются на какие-либо опасные подтипы и полностью проверяемы во время компиляции. И языки Хиндли-Милнера обычно разрешают весь полиморфизм во время компиляции и вообще никогда не делают никаких неявных преобразований. Насчет Java или C#… Я не уверен — они, конечно, не самый безопасный вариант, но, по крайней мере, они разработаны заранее с учетом объектно-ориентированного подтипа и его возможных последствий для безопасности.