“Shit happens”, — гласит американская поговорка. Но некоторые неприятности не просто случаются, они обязаны рано или поздно произойти просто в силу закона больших чисел. Скажем, в шести миллионах строк кода непременно скрывается какое-то количество ошибок, и дайте возможность — рано или поздно одна из них проявит себя катастрофически. Шесть миллионов строк — это длина программного обеспечения, работающего в бортовых компьютерах современного среднестатистического автомобиля. А ошибка, которую теоретики так долго и упрямо ждали, найдена и сутки назад признана компанией Toyota в системном софте знаменитого гибрида Prius.

Toyota Prius — самый востребованный представитель племени гибридных авто и вообще одна из самых популярных моделей на авторынке. Тому есть причины: машина сравнительно безопасная и недорогая, плюс экономичная и чрезвычайно надёжная, что хорошо экономию по топливу дополняет (по данным авторитетного в Штатах журнала Consumer Reports — голоса общества защиты прав потребителей — одна миля обходится в 47 центов). И вот теперь для устранения дефекта отзываются все 1,9 миллиона этих красавиц, произведённых и проданных с 2010 года: половина придётся на Японию, четверть – на Штаты и Канаду, остальное соберётся из Европы, Австралии и других стран.

На самом деле одновременно Toyota отзывает ещё 300 тысяч своих авто других моделей — и тоже из-за (менее опасной) программной ошибки.
На самом деле одновременно Toyota отзывает ещё 300 тысяч своих авто других моделей — и тоже из-за (менее опасной) программной ошибки.

Дефект, заставивший Toyota решиться на эту меру, описан, прямо скажем, мутно, но даже в таком виде понятно, что случай беспрецедентный. В программном обеспечении автомобиля, управляющем, в частности, двигателем и генератором, допущено несколько ошибок. Проявляются они чрезмерной нагрузкой на мощные транзисторы, что чревато выходом их из строя и последующим аварийным отключением бортовой электроники. Произойти это может в том числе и во время движения: двигатель без предупреждения глохнет, машина сбрасывает скорость с возможной потерей управления. Эксплуатировать Prius после этого возможно, но ехать он будет очень медленно. По сообщению самой Toyota, вызванных ошибками в софте инцидентов (тем более с человеческими жертвами) не зафиксировано, хотя американские СМИ говорят о «сотнях поломок».

Что ж, тема потенциальной небезопасности системного софта, управляющего критически важными узлами автомобиля, весьма популярна в последние годы. Периодически всплывают страшные истории о том, как очередная группа исследователей, вломившись в электронные мозги, отключает тормоза на полном ходу или заставляет машину выкинуть какой-то ещё финт. А Toyota лично перенесла жуткий скандал из-за дефектной педали газа (в том числе и на Prius). Вы должны его помнить: лет пять назад обнаружилось, что машины компании склонны к неожиданному неконтролируемому ускорению, за чем последовали судебные иски, многочисленные расследования на высшем уровне, собственно суды, штрафы и компенсации, отзывы миллионов авто и даже приостановка производства (см., в частности, «Обратная сторона педали»). Многие грешили на софтверный дефект, но Toyota отстаивала версию о чисто механической неисправности — и следователи в конце концов один за другим встали на её сторону.

Таким образом, до вчерашнего дня все разговоры о «смертельно опасных багах в автомобильном софте» ограничивались либо чистой наукой, либо подозрениями, доказать которые так и не удалось. А вчера была пройдена веха: ошибка, заставляющая «Приусы» глохнуть, уже не воображаемая, не подозреваемая — она самая что ни на есть настоящая и признана официально. И это позволяет и даже требует сделать минимум три вывода, которые понадобятся нам, чтобы идти дальше.

140214-2

Итак, во-первых, необходимо признать, что степень зависимости автомобильных узлов и агрегатов от программного обеспечения перешла черту, за которой чисто программные ошибки способны привести к аппаратным поломкам (персональные компьютеры, например, её так и не перешагнули) и где ошибка действительно представляет опасность для человека.

Во-вторых, даже простое обновление программного обеспечения автомобиля (то есть без вмешательства в аппаратную часть, что, собственно, и собирается проделать Toyota в данном случае) может потребовать дорогостоящей — с точки зрения денег, времени и нервов — процедуры отзыва автомобиля или как минимум визита к официальному дилеру. Кроме того, хоть установка патча занимает лишь полчаса, его ещё требуется разработать и проверить, разослать дилерам и оповестить клиентов. В настоящий момент продавцы «Приусов» в США, например, всё ещё «заплатку» не получили.

В-третьих, даже активное добровольное участие вендора в исправлении обнаружившихся недостатков — а Toyota после многомиллиардных выплат в той истории с педалью стала сильно сговорчивей и теперь отзывает чаще, больше и охотней любого другого автопроизводителя — не решает самой проблемы софтверных дефектов. Отзыв — всего лишь реакция, следствие. Причина (баг) в следующий раз найдётся новая, ведь программ без ошибок не бывает.

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

Имеющийся опыт, к сожалению, мало что даёт. Там, где цена программной ошибки слишком высока, — в космосе, например — проблему решают грубо: введением чрезмерно жестоких требований к разработке программного обеспечения. О российской практике ничего не скажу (может быть, поделятся читатели? В одной из предыдущих дискуссий уже всплыла интереснейшая ссылка на отечественный язык программирования ДРАКОН, мешающий писать с ошибками), но о том, как работает НАСА, известно хорошо. Скажем, приступая к разработке софта для «Шаттлов», заказчик и исполнители (в том числе IBM) исходили из предположения, что программное обеспечение является наиболее важным элементом всего комплекса, потому что именно оно связывает воедино всю механику и электронику на борту. Отсюда и процесс: над проверкой софта трудится почти половина команды, каждое вносимое изменение проверяется несколькими независимыми группами на разных уровнях абстракции — и всё равно пилотам пришлось иметь дело с сотнями страниц исключений и особенностей работы софта!

140214-3

Не стоит даже спрашивать, применимо ли это к автомобилям: слишком дорого! Однако выход есть. Помочь способно свободное ПО. Возьмись сегодня кто-нибудь разработать ядро Linux «с нуля», это обошлось бы ему в невероятную сумму. Но, понятное дело, никто «Линукс» не изобретает: желающие просто адаптируют его к своему железу и задачам. Точно так могла бы работать и воображаемая свободная ОС для автомобилей: одна на всех, адаптируемая конкретным вендором к конкретным моделям авто. Возможно даже, эту нишу Linux и займёт — если не подсуетится никто другой.

Камнем преткновения здесь остаётся тщательно охраняемая секретность электронных блоков управления автомобилем (ECU). Если прочие запчасти давно уже тяготеют к универсализации, то есть применимы на авто различных марок (и аналитики, кстати, упоминают эту тенденцию в числе причин, из-за которых отзыв становится дороже: ведь, если дефект обнаружился в универсальной запчасти, отзывать придётся не одну модель и, может быть, не одного производителя), то ECU остаются тайной за семьюдесятью замками.

Мы ничего не знаем об их устройстве, мало что – об алгоритмах работы. Спасибо Toyota, теперь по крайней мере признано, что в них случаются ошибки – и ошибки эти могут быть опасны для «железа» и человека. Но чтобы пустить туда свободную ОС – а значит, дать энтузиастам (и конкурентам!) заглянуть внутрь, – придётся попотеть. Даже производители видеокарт всё ещё — двадцать лет спустя после начала дискуссии — не отважились на гласность и скрывают схематику своих чипов. Что говорить об автомобилях!