Spójrz na swoje auto. Tak, to stojące na podjeździe lub w garażu. Służy Ci do dojazdów do pracy, na zakupy, może na weekendowe wypady za miasto. Jest pożyteczne, bądźmy jednak szczerzy – rzadko kiedy zapiera dech w piersiach. Teraz pomyśl o myśliwcu F-35 Lightning II – szczytowym osiągnięciu inżynierii wojskowej, zdolnym do lotów z naddźwiękową prędkością, naszpikowanym czujnikami i praktycznie niewidzialnym dla radarów. To maszyna, od której zależy życie pilota i bezpieczeństwo całego kraju.
A teraz przygotuj się na informację, która może lekko zburzyć Twój porządek świata. Twoje poczciwe auto, które właśnie walczy z porannym korkiem, jest napędzane przez większą liczbę linii kodu niż wspomniany supernowoczesny myśliwiec. I nie jest to żart.
Zanim jednak zaczniesz z dumą opowiadać znajomym, że Twój rodzinny SUV jest bardziej zaawansowany technologicznie od samolotu wartego setki milionów dolarów, zatrzymajmy się na chwilę. Bo jak to w życiu bywa, diabeł tkwi w szczegółach, a ta absurdalna dysproporcja opowiada fascynującą historię o współczesnej technologii, priorytetach i, nie bójmy się tego słowa, o bałaganie.
Zimne liczby, które rozpalają dyskusję
Szacuje się, że oprogramowanie sterujące nowoczesnym samochodem klasy premium może zawierać nawet 100 milionów linii kodu. Niektóre źródła podają, że przeciętne nowe auto przekroczyło już tę barierę.
A myśliwiec F-35? Jego kluczowe oprogramowanie pokładowe, odpowiedzialne za awionikę, systemy uzbrojenia i kontrolę lotu, to około 8 milionów linii kodu. Całkowity system F-35, wliczając w to naziemne platformy logistyczne i diagnostyczne (ALIS), dobija do 24 milionów linii, co wciąż stanowi zaledwie ułamek tego, co drzemie pod maską i w desce rozdzielczej Twojego pojazdu. Nawet taki gigant przestworzy jak Boeing 787 Dreamliner do funkcjonowania potrzebuje około 6,5 miliona linii kodu.
Co tu się właściwie dzieje? Czy inżynierowie z branży motoryzacyjnej są po prostu bardziej wylewni w pisaniu kodu, a programiści Lockheed Martin to minimalistyczni geniusze? Prawda jest znacznie bardziej złożona i znacznie ciekawsza.
Tutaj nie ma wyścigu na ilość, jest za to walka o jakość
Podstawowa różnica sprowadza się do filozofii i celu, dla którego powstaje oprogramowanie. W przypadku myśliwca F-35 priorytetem jest absolutna, niezachwiana niezawodność. Każda pojedyncza linijka kodu musi być napisana w sposób przemyślany, a następnie poddana setkom godzin testów, walidacji i weryfikacji. Błąd w oprogramowaniu sterującym przepływem paliwa albo systemem katapultowania nie jest opcją. Tutaj nie ma miejsca na komunikat „wystąpił nieoczekiwany błąd, uruchom ponownie system”. Taki błąd oznacza katastrofę.
Proces certyfikacji oprogramowania lotniczego, zwłaszcza w zastosowaniach wojskowych, jest horrendalnie drogi i czasochłonny. Koszt napisania i zweryfikowania jednej linii kodu w systemie krytycznym dla bezpieczeństwa może sięgać astronomicznych kwot. Dlatego w lotnictwie panuje zasada: mniej znaczy lepiej. Każda linia kodu to potencjalne źródło problemu, więc pisze się ich tylko tyle, ile jest absolutnie niezbędne do wykonania zadania. Mamy tu do czynienia z kodem wydajnym, zoptymalizowanym i do bólu przetestowanym.
W motoryzacji jest… inaczej. Oczywiście, systemy jak ABS, ESP czy kontrola poduszek powietrznych również podlegają rygorystycznym testom. Nikt nie chce, żeby hamulce przestały działać z powodu błędu w oprogramowaniu. Mimo wszystko, czy widziałeś kiedyś, żeby Twój system zawiesił się podczas próby połączenia z telefonem? No właśnie. Dla producenta samochodu taka sytuacja jest niedogodnością i materiałem na przyszłą aktualizację, a nie powodem do uziemienia całej floty. Skutki błędu są nieporównywalnie mniejsze.
Zupa z wielu składników, czyli patchwork w twoim aucie
Proces tworzenia oprogramowania dla współczesnego samochodu przypomina próbę ugotowania wykwintnej zupy, do której każdy składnik – marchewkę, ziemniaki, seler, mięso – dostarcza ktoś inny. Sęk w tym, że każdy z owych dostawców ma własny przepis, własne przyprawy i własne pojęcie o tym, jak długo co gotować. Zadaniem producenta jest wrzucenie wszystkiego do jednego garnka w taki sposób, by powstało spójne, jadalne danie. Misja prawie niemożliwa.
Właśnie tak wygląda tworzenie oprogramowania dla współczesnego samochodu. Twój pojazd nie jest monolitycznym dziełem jednego producenta. To składanka dziesiątek, a czasem setek, modułów i sterowników (ECU – Electronic Control Unit) pochodzących od różnych poddostawców. Bosch dostarcza system wtrysku paliwa, Continental moduł ABS, firma Harman Kardon system audio, a jeszcze ktoś inny elektronikę sterującą fotelami.
Każdy z poszczególnych komponentów przyjeżdża do fabryki z własnym, wbudowanym oprogramowaniem. Zadaniem producenta samochodu, na przykład Volkswagena czy BMW, jest połączenie całej menażerii w jeden sprawnie działający organizm. Musi on napisać tony tak zwanego „kodu klejącego” (glue code), który sprawi, że system audio wyciszy się, gdy czujniki parkowania wykryją przeszkodę, a nawigacja wyświetli wskazówki na głównym ekranie.
Ten proces integracji generuje gigantyczną złożoność i prowadzi do nieprawdopodobnego rozdęcia objętości kodu. Oprogramowanie samochodowe często porównuje się dlatego do „wielkiej kuli spaghetti” – plątaniny zależności i połączeń, w której trudno się połapać. A każda kolejna generacja auta i każda nowa funkcja dokłada do kuli kolejne metry makaronu.
Cześć, tu twoja kanapa… i też mam oprogramowanie 🙂
Zastanówmy się, czego tak naprawdę oczekuje pilot myśliwca od swojej maszyny. Ma go dowieźć z punktu A do punktu B w ekstremalnych warunkach, pozwolić na wykonanie misji i bezpiecznie sprowadzić na ziemię. Ergonomia interfejsu jest ważna, ale ma ona służyć wyłącznie prezentacji kluczowych danych w jak najbardziej czytelny sposób. Pilot nie potrzebuje wybierać spośród 64 kolorów oświetlenia nastrojowego kokpitu.
A Ty w swoim samochodzie? Owszem, chcesz bezpiecznie dojechać do celu, ale przy okazji miło by było, gdyby:
- Fotel zapamiętał Twoje ustawienia i automatycznie dostosował się po otwarciu drzwi.
- Klimatyzacja utrzymywała inną temperaturę dla Ciebie, a inną dla pasażera.
- System multimedialny płynnie obsługiwał Apple CarPlay lub Android Auto.
- Można było sparować pięć różnych telefonów przez Bluetooth.
- Wycieraczki same włączały się, gdy pada deszcz, a światła dostosowywały się do warunków na drodze.
- I oczywiście, wspomniane już nastrojowe oświetlenie, które absolutnie musi mieć odcień „neonowego amarantu”, bo bez tego jazda nie ma sensu.
Każda, pozornie błaha, funkcja z listy wymaga tysięcy linii kodu. Pamięć foteli, sterowanie szyberdachem, podgrzewane lusterka, animacje na ekranie powitalnym, obsługa gestów – wszystko to składa się na miliony linii kodu, które w żaden sposób nie przyczyniają się do podstawowej funkcji pojazdu, jaką jest przemieszczanie się. Po prostu sprawiają, że korzystanie z niego jest przyjemniejsze. Mówimy o oprogramowaniu nastawionym na komfort i doznania użytkownika, a nie na krytyczne wykonanie misji. Pilot F-35 nie ma nawet uchwytu na kubek, a co dopiero podgrzewanej kierownicy.

Koszmar dziedziczenia, czyli oprogramowanie na sterydach
W świecie idealnym inżynierowie projektujący nowy model samochodu zaczynaliby z czystą kartą. W rzeczywistości, ze względu na koszty i czas, jest to niemożliwe. Nowe modele aut budowane są na bazie istniejących już platform, a ich oprogramowanie to w dużej mierze ewolucja kodu z poprzednich generacji.
Zjawisko to, znane w programowaniu jako „kod odziedziczony” (legacy code), jest prawdziwym przekleństwem i błogosławieństwem jednocześnie. Pozwala szybko wprowadzać nowe modele na rynek, ale jednocześnie prowadzi do kumulacji warstw kodu, jedna na drugiej. Inżynierowie często boją się usuwać stare fragmenty, nawet jeśli wydają się już niepotrzebne, z obawy, że niechcący zepsują coś, czego działania do końca nie rozumieją. Sytuacja przypomina remont stuletniego domu – boisz się zburzyć podejrzaną ścianę, bo nie masz pewności, czy w rezultacie nie zawali ci się cały sufit na głowę.
W rezultacie oprogramowanie w samochodach puchnie, obrastając w kolejne funkcje dobudowywane do starego fundamentu. F-35, mimo że jego rozwój trwa od dekad, ma znacznie bardziej rygorystyczne podejście do zarządzania kodem – jego architektura jest bardziej zwarta i celowa.
Czy to dobrze, że twoje auto jest tak skomplikowane?
Uważam, że ten trend ma swoje jasne i ciemne strony. Z jednej strony, dzięki tak ogromnej ilości oprogramowania, nasze samochody są bezpieczniejsze, wygodniejsze i bardziej funkcjonalne niż kiedykolwiek. Adaptacyjny tempomat, asystent pasa ruchu czy systemy automatycznego hamowania realnie ratują życie. Funkcje komfortu, choć wydają się fanaberiami, po prostu umilają nam czas spędzany w pojeździe.
Z drugiej strony, owa rosnąca złożoność jest tykającą bombą. Im więcej kodu, tym większa powierzchnia ataku dla hakerów. Im więcej zależności między systemami od różnych dostawców, tym większe ryzyko nieprzewidzianych błędów, które mogą objawić się w najmniej oczekiwanym momencie. Historia zna już przypadki, gdy wady oprogramowania prowadziły do poważnych problemów, jak choćby głośna sprawa niezamierzonego przyspieszania w samochodach Toyoty, gdzie jakość kodu pozostawiała wiele do życzenia.
Dodatkowo taka hermetyzacja technologii utrudnia naprawy. Coraz częściej prosta usterka mechaniczna wymaga podłączenia specjalistycznego komputera i interwencji w oprogramowanie, co skutecznie uzależnia właścicieli od autoryzowanych serwisów i ogranicza prawo do naprawy. Zepsuty czujnik parkowania? Kiedyś wymiana trwała 15 minut. Dzisiaj może wymagać kalibracji całego systemu, której nie wykona niezależny warsztat.
Podsumowanie, które niczego nie upraszcza
Porównanie liczby linii kodu w samochodzie i myśliwcu jest więc genialnym punktem wyjścia do dyskusji, lecz wprowadza w błąd, jeśli traktujemy je jako miarę zaawansowania. Mamy tu do czynienia z porównaniem dwóch różnych światów, dwóch odmiennych filozofii projektowania.
Samochód to dziś jeżdżący gadżet, komputer na kołach, który musi pogodzić wymagania bezpieczeństwa z presją rynku na dostarczanie coraz to nowszych, bardziej widowiskowych funkcji. Jego oprogramowanie jest rozbudowane, bo obsługuje setki drobiazgów i integruje pracę wielu niezależnych systemów.
F-35 to precyzyjne, śmiercionośne narzędzie. Jego oprogramowanie jest zwarte, bo koncentruje się wyłącznie na zadaniu, a każda jego część jest wielokrotnie sprawdzana pod kątem niezawodności.
Dlatego następnym razem, gdy system multimedialny w Twoim aucie odmówi posłuszeństwa, nie denerwuj się. Uśmiechnij się pod nosem i pomyśl, że to cena, jaką płacisz za posiadanie urządzenia, które – przynajmniej pod jednym, bardzo specyficznym względem – jest bardziej „rozbudowane” niż jeden z najdroższych samolotów bojowych świata.








