F-35 개발 언어

F-22까지는 탑재 소프트웨어가 ADA라는 고전적이지만 극도로 안정성을 중시한 언어로 작성됐다. 미국과 유럽 전투기 비행제어 컴퓨터는 역사적으로 대부분 ADA를 사용해 왔다. F-15, F-16, F-18, Gripen, Typhoon, Rafale 등이 모두 ADA 기반이다. F-35가 등장하면서야 비로소 현대언어가 도입되는데, 현대언어라고 해봤자 C++다. 러스트는 당시 인증된 컴파일러조차 없었고 파이썬은 타입도 느슨하고 가비지 콜렉터가 언제 돌지 예측할 수 없어서 전혀 후보가 아니었다. 미사일을 피하는 순간에 단 10밀리초라도 프로그램이 멈췄다가는 조종사와 기체를 통째로 잃을 수 있기 때문이다. 파이썬은 지상 관제 시스템에서만 사용되고 있다.

C++로 완전히 전환한 건 아니고 C도 사용하고, 이미 잘 작동하는 ADA 코드들은 그대로 재활용 됐다. 워낙 큰 예산과 사람 목숨이 걸린 프로젝트들이라 수십년 잘 작동한 코드는 절대 포트하지 않고 그냥 그대로 사용한다한다. 사실 ADA를 계속 사용하고 싶었는데 개발자 양성이 불가능해서 C++로 전환 중이다.

C++이라고 해서 자유롭게 쓸 수 있었던 것도 아니다. 실시간 운영체제에서는 비행 중 메모리 단편화가 생기면 끝장이라 malloc이 금지됐고 재귀함수도 쓰지 않는다. 예측 불가능한 실행 흐름은 전부 배제됐다. 결과적으로 이름만 C++이지 사실상 일종의 제한 모드 전용 C++에 가깝다. 심지어 표준 라이브러리조차 상당 부분 사용할 수 없다. 메모리를 어디서 어떻게 쓰는지 한 줄 한 줄 통제해야 하는 세계다.

이런 문화는 오래된 역사가 있다. 1990년대부터 미 국방성은 소프트웨어 오류 때문에 사고가 나는 일을 막으려고 JSF++ (Joint Strike Fighter Air Vehicle C++ Coding Standards)라는 엄격한 코딩 규칙을 만들어왔다. 패트리어트 미사일 시스템이 걸프전에서 시간 계산 오류로 미군 막사에 떨어져 미군 28명이 사망한 사건도 그런 규칙이 강화되는 계기가 됐다. 또 B-2 스피릿 스텔스 폭격기는 항공기 중량과 무게중심 계산에서 단 하나의 부동소수점 처리 문제를 잡느라 개발팀이 수개월을 보냈다. 전투기만의 문제가 아니라 항공우주 업계 전체가 이런 초정밀 코딩 문화를 공유한다.

ADA 코드