Dünya'da yazılım hatası bir hata raporudur; uzayda ise kaybedilmiş bir görev. Yörüngede bir yazılım çöktüğünde teknik servis yoktur, yeniden başlatma düğmesi yüz binlerce kilometre uzaktadır ve hatayı onaracak mühendisin o gece telefonuna bakması bir şey değiştirmez. Bu yüzden uzay yazılımı, kendi disiplinidir: yavaş, temkinli, tekrarlı ve şüpheci.

Uzay yazılımının bir diğer zorluğu, sonunu bilmektir: fırlatma sonrası 15-20 yıl görev yapması beklenen bir sistem, bugünün dilinde yazılır ama on yıl sonra da anlaşılır olmalı. Yorum satırları, mimari dokümanlar ve kodun okunabilirliği uzayda süs değil, zorunluluk. Ekip değiştiğinde kodu okuyamayan kurum, yörüngedeki aracı da yönetemiyor.

Radyasyon: bitleri mahveden sessiz düşman

Atmosfer korumasından çıktığınızda kozmik ışınlar ve yakalanan protonlar, yarı iletkenlerin belleğini değiştirebilir. Buna tek olay bozulması (single event upset) denir: bellekteki bir bit kendiliğinden döner, sayı 42'den 106'ya dönüşür. Çözüm, yazılımdan çok mimaride: hata düzeltme kodlu bellek, üçlü fazlalık (üç kopya çalıştırıp çoğunluk oyu) ve izlemeçiler. Ama yazılım tarafında da disiplin gerekir: kritik hesaplamalar iki kez yapılır, sonuçlar karşılaştırılır; ölümsüz görünen bir döngü, bekçi köpeği (watchdog) zamanlayıcısıyla periyodik olarak tepkisizlik testine tabi tutulur.

Donanım hızlı, uzay yazılımı yavaş

Uzay sertifikalı işlemciler, masaüstü işlemcilerinden yüzyıllarca geridedir. Bir Mars aracının bilgisayarı, 2000'lerin başındaki telefonla bile yarışamaz; çünkü seçilen çipin radyasyon geçmişi, test kayıtları ve hatasız yılları vardır. Yani uzay yazılımı, kısıtlı bellekte ve megahertz'lik işlemcilerde çalışır. Bu, kodun her satırının hesaplandığı anlamına gelir: dinamik bellek kullanımı sınırlıdır, özyineleme risklidir, kütüphaneler minimeldir. NASA'nın yazılım standartları ve MISRA gibi kural setleri, dilin tehlikeli köşelerini yasaklayarak bu dünyaya uyarlanır.

Otomom, uzaklıkla artar

Görev uzaklaştıkça otonomi şart olur. Bir Mars aracı, Dünya'dan gelen komutun sırasını beklerken günler kaybeder; bu yüzden bilimsel hedefleri kendisi seçebilir, yolunu kendisi planlayabilir, acil durumda kendi güvenli moduna geçebilir. Bu yazılımın hata yönetimi, masaüstü dünyasındaki "try-catch" kültüründen farklıdır: her kusur, önceden tanımlı bir güvenli duruma geçişle sonuçlanır. Uzay aracı, hata aldığında çökmeye çalışmaz; evine döner.

Sonuç olarak uzayda yazılım, mükemmelliyet değil, felaket senaryolarıyla barışık bir mühendisliktir. Kod, en kötü günü düşlenerek yazılır: belleği bozulan, sinyali kaybolan, gücü düşen bir gün. Dünya'daki sistemler de bu düşünceden şeyler öğrenebilir; belki de ofis yazılımının asıl sorunu, uzay kadar acımasız bir eleştirmenin olmamasıdır. Yörüngedeki her başarılı görev, arkasında onlarca "olması muhtemel" felaketi önceden düşünüp koda dökmüş mühendislerin ortak eseridir.

Bu disiplinin bireysel yazılımcıya da bir dersi var: hata yönetimi, mutlu yolun (happy path) süsü değil, ürünün kendisidir. Uzay yazılımı, kaza anında ne olacağını önceden yazmayan hiçbir sistemi yörüngeye çıkarmaz. Bu da okunabilirliği bir stil tercihi olmaktan çıkarıp görev güvenliğinin parçası haline getirir.