간만에 어디서 관련 이야기가 나오는 것을 보고 포트란계에 왜 속설들이 많이 퍼져있는가 같은 고민을 다시 한번 해봅니다.
그래도 무려 '전문 과학인'의 언어로 취급되는 프로그래밍 언어임에도 제 미천하지만 경험에 비추어보면 꽤나 미신에 휩싸여있는 언어라는 느낌이 있습니다. 사실 오래전에 한 생각이고 어딘가에는 정리된 형태로 적어볼 생각을 가졌다가.. 그냥 기분나는대로 보이저와 관련된 이야기를 하나 해볼까 합니다.
1. '보이저호에 탑재된 프로그램이 포트란으로 작성되어 발사되었다'라는 이야기를 들어보셨을까요?
2. '나사에서 보이저 유지와 관련하여 포트란과 어셈블리어 사용이 가능한 인력을 구하고 있다' 라는 뉴스는 들어보셨나요?
3. '포트란으로 작성된 초기 프로그램을 나중에 원격 리프로그래밍으로 FORTRAN77로 업그레이드 했다'라는 이야기는 들어보셨나요?
네, 저도 2 정도는 뉴스로 들어봤고 어딘가의 웹에서 포트란을 언급하며 1, 3까지 이야기하는 것들을 봐오기도 했습니다. 영어로된 기사에도 보이저 탑재 프로그램에 포트란을 관련짓는 것도 보였습니다. 국내 뿐만 아니라 해외의 과학전문 잡지나 신문사의 과학뉴스란에서도 말입니다.
https://www.google.com/search?q=%ED%8F%AC%ED%8A%B8%EB%9E%80+%EB%B3%B4%EC%9D%B4%EC%A0%80
https://search.daum.net/search?q=%EB%B3%B4%EC%9D%B4%EC%A0%80+%ED%8F%AC%ED%8A%B8%EB%9E%80
보이저 1,2 호는 1977년에 발사된 나사의 우주 탐사선이죠. 역사이야기같은 것은 주절댈 필요는 없으니 스킵해도 될 것 같습니다.
그 시절 포트란이 사용되던 컴퓨터들을 봐볼까요? 1970년대의 컴퓨터를 이야기할 때 007같은 헐리웃 영화에서본 방안의 벽면을 가득채운 우람하며, 자기테이프저장장치가 돌아가는 멋진 녀석들이 막 떠오르십니까? 네 거대한 메인프레임들이 보통 포트란을 사용하던 환경이었습니다. 사실 대부분의 그 시절의 컴퓨터들은 한덩치 했지요. 그렇지 않은 소형 컴퓨터들은 미니컴퓨터(그래도 요즌 보이이는 PC들보다 크기적으론 좀 컷습니다) 등으로 불리던 시절이죠.
그리고 그 시절 포트란 프로그래밍 모습도 봐봐야 할 것입니다. 네 80년대 까지도.. 90년대까지도 포트란을 배우거나 해보신 분들은 코딩용지에 코드를 작성해서 카드펀칭을 통해 작성된 카드를 카드리더기기에 삽입해서 뭔가 기계를 돌리면 코드가 실행되고 커다란 프린터에서 코드와 계산 결과가가 나오던 시절을 떠올립니다. '포트란' 하면 가지는 바로 그 이미지로 말입니다. 네 그렇게 사용하던 시절입니다. 어느 분들에겐 추억의 그 시절이군요. 저는 겪어보진 못했습니다. 포트란의 문법은 어쨌든 FORTRAN 66(FORTRAN4, 5 등 이름을 달고 쓰이던 것들) 근방의 것과 각 시스템별 약간의 사투리문법들의 편차가 있는 정도를 떠올릴 수 있습니다.
확인해볼게 있습니다.
포트란은 뭐죠? '고급 프로그래밍 언어'입니다. 고급 이란 것은 인간의 언어(정확히는 영어)를 이용해서 프로그램을 작성한다는 것이죠. 어쨌든 CPU에 맞는 어셈블리코드와 기계어코드로 변환하기 위해서 '컴파일러'가 있어야 합니다. 우리는 소스코드를 영어로 작성하고 항상 본인의 CPU에 맞는 코드를 작성해주는 '컴파일러'에게 건네주어, '이것 좀 어셈블리어로 바꿔줘' 라며 명령을 내립니다. 그리고 다시 이진수 바이너리로 바뀝니다.
프로그래밍에 대한 상식적인 부분을 언급해야합니다. 메인프레임의 CPU및 시스템환경과 보이저 우주선에 탑재된 CPU와 시스템환경은 완전히 다릅니다. A라는 cpu에 맞게 '목적파일'이 생성되었다면 그 것은 A cpu를 위한 것입니다, '호환시스템'이 아닌 이상 B cpu가 탑재된 곳에서 소스코드는 해당환경을 위한 '컴파일러'로 컴파일을 해야합니다. 예를 들면 IBM 호환PC기종에서 일반적으로 개발한 프로그램을 애플에서 돌릴 수 없습니다. IBM 호환PC에서 애플의 iOS를 타겟으로 앱개발을 한다면 해당 시스템용 바이너리를 생산하도록 개발된 컴파일러를 통해 개발합니다. 크로스컴파일이라고 합니다. 단순화시키면 해당 CPU용 '컴파일러'의 개발이 선행되야 합니다. 메인프레임에서 사용되던 실행프로그램을 우주로 내보낸 컴퓨터(그게 호환되는 종류의 컴퓨터일 것으로 생각되지 않네요.)의 환경에서 동일하게 사용할 수 없습니다. 변환작업이 필요하죠. 또는 해당 CPU 전용의 컴파일러의 개발이란 작업이 필요하죠.
FORTRAN 5가 사용되었으며, 나중에 FORTRAN77로 재프로그래밍 되었다 라는 이야기도 나옵니다. 역시 위에 같은 문제가 있습니다. 보이저 시스템(CPU)용 FORTRAN77 컴파일러의 개발 또는 크로스컴파일이 가능한 컴파일러의 개발이 선행 있어야 합니다.
피곤하네요. 사실 현대적 관점에서 대단히 복잡한 명령셋을 가진 CPU가 아닐 것으로 생각됩니다. 어셈블리어 명령세트만 좀 마련하고 그걸로 프로그래밍하면 그만일 상황이 합리적입니다. 딱 거기까지 생각하면 될것입니다. 왜 굳이 포트란이라는 고급프로그래밍언어를 사용하고 다시 변환을 고집해야할까요? 도대체 얼마나 복잡하고 다양한 계산과정을 넣기 위해서?
기계장치를 제어하기위한 최소한의 프로그래밍과 사진데이터의 수집, 저장, 전송을 위한 명령을 가지고 있으면됩니다. 포트란은 예나 지금이나 저런일과는 아주 먼 녀석입니다. 현대적 다목적 위성도 아닌 보이저 내부에서 수학계산을 복잡하게 할 필요도 없고, 굳이 포트란을 동원해야만 할 합리적이유가 없습니다.
언급되는 FORTRAN5라는 녀석은 뭐일까?에 대해서도 생각해봅니다. 그 시절 FORTRAN 4 (IBM FORTRAN 4로 비롯되어 다양한 벤더에서 IBM과 비슷하게 포트란 제품의 이름을 넘버링하던시절입니다)는 여러 벤더에서 사용되는 이름의 녀석이었습니다. 추적상으로는 Univac에서 사용되던 녀석이라고 합니다. 다시 돌아가서 Univac용 바이너리가 보이저에 그대로 사용될 수 있었는가? 라는 것에 의문을 제기해야죠. 크로스컴파일을 했을까? 바이너리 파일을 뜯어서 이식했을까? 왜 그렇게 포트란을 고집해서 여러단계를 거쳐야하는가? 라는 뺑뺑이 질문으로 회기합니다.
해당 영상에 보이저에 대한 전반적인 시스템 설명이 나와있습니다. 17분15초 근방을 보세요. 포트란요? 사용되었다는 '소문 (레퍼런스)이 있지만 증거는 찾지 못했다' 정도로 마무리 하셨네요. 네 그냥 어셈블리어로 다 짜여져 있습니다. 사용되었을 가능성은 perhaps it was 뭐 열린자세로... 뭐 네 열린자세로...
도대체 '왜'
네 어딘가 와전된 포인트가 있을 겁니다. 가장 합리적이고 당연한 것은 지상의 관제용 소프트웨어들이 포트란으로 작성된 것이 많다는 것이겠죠. 사실 뭐 어쩌면 당연한 이야기입니다. 그 시절 가장 컴퓨팅 파워를 요구하는 작업에 메인프레임 컴퓨터에서 수행되는 포트란을 이용한 계산은 뗄래야 뗄 수 없는 관계에 있습니다. 다만 '우주선에 탑재'라는 것과 지상에서의 데이터 분석과 관제는 전혀 다른 이야기고 이는 꽤 큰 오해를 불러옵니다. 물론 메인프레임에서 쓰이든 주변 장치에서 쓰이든 다른 프로그래밍 언어도 많이 쓰이게 되겠죠. 보이저가 송신한 데이터를 주로 포트란으로 작성한 프로그램으로 계산, 분석한다 정도면 적당한 언급일 듯 합니다.
'과거의 지난 것'에 대한 추억으로 언급하기위해 또는 과거의 무림고수의 절대무공 쯤으로 언급되며 포트란이 '과학'분야 얼굴마담으로 내세우려 합니다. 꽤 오래 포트란을 해왔다고 생각하는 1인으로 포트란이 사실 어느 정도는 업계에서 종교적으로 언급되는 듯 느낌을 받을 때도 있습니다.
사실 저의 이런 의문과 비슷하게 해외에서도 같은 질문을 한 분이 있고 그 분은 방대하게 이 소문에 대해 파헤친 자료를 제시하기도 합니다. 이 글은 그분의 글에서도 간단한 언급은 가져온 것이 있으나, 제가 생각한 부분이고 그 분의 많은 자료를 굳이 다 읽어보거나 하진 않고 쓰는 글입니다. 어짜피 비슷한 질문을 했고 비 합리적이다 라고 느끼는 부분에 대한 생각일 것이기 때문입니다.
관심있는 분은 Alex Measday라는 분의 웹페이지로 정리된 다음 글을 읽어보시고 레퍼런스나 와전된 부분의 이야기를 더 상세하게 살펴보실 수 있을 것 같습니다.
Forget Crazy Earth, Look to the Future: Voyager and Fortran 5
http://www.geonius.com/writing/other/voyager.html