
저는 리눅스 커널 개발자는 아닙니다. 학생 때 리눅스 코드를 들여다 보는 일과 임베디드 보드에 리눅스를 올려 뭔가 만드는 일을 꽤 좋아했습니다. 그래서 리눅스와 친숙한 일을 하게될 줄 알았는데 막상 현업에서는 지난 15년 간 다른 플랫폼에서만 개발을 해오며 리눅스의 존재를 잊고 살았습니다. 돌고돌아 지금 회사에서 다시 리눅스를 만나게 되었습니다. 리눅스를 정말 좋아했었는데 다시 리눅스를 들여다 보려니 쉽지 않네요.
다행히 저희 팀에는 리눅스 커널 파트 개발을 전담해주시는 시니어 개발자가 한 분 계십니다. 그 분과 함께 업무를 대략 훑어보며 리눅스 파트는 애플리케이션 개발과는 결이 다르다며, 너무 어렵다며 푸념하게 됩니다. 그 분이 제 말을 들으시고는 한 마디 하십니다. “책임님, 이런거 모르셔도 됩니다. 이런거 몰라도 애플리케이션 개발할 수 있게 해드리는게 저희 역할입니다” 그 분의 말이 너무 인상 깊습니다. 한 동안 리눅스에 대해 잊고 살았는데 리눅스는 자기가 하는 수 많은 일들을 우리가 몰라도 되도록 조용히 자기 일을 하며 성장해오고 있었던 것 같습니다. 웹을 너머 AI 시대를 맞이한 요즘, 리눅스는 애플리케이션 영역의 화려한 변화를 묵묵히 지원하고 있었구나 생각하게 됩니다. 비단 이것이 리눅스만의 역할은 아니겠구나 싶기도 합니다. 무언가를 만드는 사람이라면 모두 이렇게 생각할 수 있어야 하겠습니다.
리눅스는 돌아보면 IT 세계를 떠 받치고 있는 거대한 기둥 같다는 생각이 듭니다. 지구상 곳곳에서 리눅스는 자기 일을 하고 있습니다. 클라우드 컴퓨팅 서버로, 가상 컴퓨팅 환경의 도커로, 개인의 안드로이드 휴대폰, 네비게이션과 TV 등 리눅스가 일하지 않는 곳이 없습니다. 저는 Windows 운영체제만 있었다면 IT 기술이 지금 수준까지 빠르게 발전되지 못했을 거라는 생각을 합니다. 무료이기에 쉽게 사용할 수 있고, 무료이기에 마음껏 도전해 볼 수 있는 것 같습니다. 뿐만 아니라 공개되어 있기에 숨겨진 내부를 보고 학습할 수 있고, 공개되어 있기에 그것을 누구나 발전시킬 수 있었던 것 같습니다. 저는 이런 리눅스 커뮤니티를 무척 존경합니다.
최근에 리눅스는 우주에서도 빛을 발하고 있습니다. SpaceX의 RideShare 서비스와 재사용 가능한 발사체로 인하여 인공위성 발사에 대한 허들이 낮아지며 민간 주도의 뉴스페이스 시대가 열렸습니다. 기존에는 고가의 VxWorks 운영체제나 오픈소스로서 실시간성을 제공하는 RTEMS가 주로 사용되었다면, 뉴스페이스에서는 개발 인프라가 풍부하고 대중적인 Linux가 더 많이 활용되고 있는 것 같습니다. 아마도 실시간성에 대한 요구는 시스템에서 아주 일부분이거나, 실시간성의 요구가 그 정도로 Hard 하지 않기 때문일 수도 있다고 저는 생각합니다. 어쨋든 이로 인해 인공위성에서도 리눅스의 활용이 활발해지고 있는 것 같습니다. 저희 회사에서도 2025년 1월 SpaceX의 Falcon9을 통해 저희의 첫 지구 관측 위성을 우주로 쏘아올렸고, 오늘도 촬영 미션이 우주로 보내지고 위성은 우리에게 전 세계 곳곳을 촬영한 사진을 성공적으로 보내주고 있습니다. 이런 저희의 위성 시스템에도 리눅스가 있습니다. 잠깐 세어보니 위성에 리눅스가 탑재된 3개의 서브 시스템이 있습니다. 공기처럼 그 자리에 있어서 너무 당연하게 여기고 있었는데 리눅스의 서비스가 새삼 감사하게 느껴집니다. 화려하게 드러나진 않지만 묵묵히 일하며 성장해온 리눅스 덕분에 우리의 프로젝트가 성공할 수 있었다고 해도 과언은 아닙니다. 우주에서 리눅스는 공기처럼 당연한 듯 메모리와 프로세스를 관리하고 쓰레드 스케줄링도 해줍니다. 그리고 커스터마이징된 하드웨어 보드를 지원하고, 카메라에서 촬영된 고속 이미지 데이터를 저장하여 지구로 내려주는 일을 지원하기도 합니다. 뿐만아니라 리눅스의 거대한 개발 생태계는 다양한 라이브러리와 도구들을 안정적으로 지원하기에 우리의 개발은 지금처럼 신속하고 안정적으로 이루어질 수 있었습니다. 정말 리눅스가 없었다면 우리의 위성은 제때에 안정적으로 개발되지 못했을 것 같습니다.
이처럼 위성 개발에서 리눅스의 영향력은 큽니다. 하지만 애플리케이션이나 FPGA, 전자, 기계, 광학, 열 엔지니어링과 함께 조화롭게 융합되어야만 우주 환경에서 살아남는 안정적인 위성을 만들 수 있습니다. 위성은 우주에서 지구에서 겪는 것과는 차원이 다른 위협에 노출됩니다. 우주로 향하는 동안 발생하는 진동이나 충격으로 인해 시스템이 물리적으로 망가질 수도 있고, 전력 공급이 임의의 시점에 차단되며 온보드 컴퓨터에 문제를 야기할 수 있습니다. 적은 확률이지만 갑작스런 전원 차단으로 파일시스템이 깨질 수 있고, 만에 하나 시스템의 중요 영역이 깨지기라도 한다면 수십억을 들여 개발한 위성이 단번에 접근이 불가능한 상태가 될 수도 있습니다. 또 위성은 대기 밖에 있기에 태양의 불규칙한 방사능에 노출되기도 합니다. 이로 인해 메모리의 특정 비트가 1에서 0으로 플립되거나 순간적인 과전류로 인해 전자회로가 망가지는 문제가 발생할 수도 있습니다. 이런 물리적인 위협에서 리눅스는 혼자서 시스템을 방어할 수 없습니다. 시스템 차원에서 리던던시 구조를 구축하고, 과전류 방지 회로와 차폐, 메모리 오류 탐지와 자동 복구 기능이 탑재된 하드웨어 지원 등이 필요하고 리눅스는 이런 하드웨어를 지원하는 서포터의 역할을 함으로 시스템을 보호할 수 있습니다. 앞서 리눅스는 전 세계 IT 업계를 떠 받치고 있는 기둥 같은 존재라고 말했지만 한편으로는 다른 존재에 의존해야만 하는 전체의 일부분이기도 합니다. 리눅스의 가치는 정말 대단하지만, 리눅스 역시 혼자서 스스로 존재할 수 없는 유기적인 존재입니다.
지금 회사에 입사해 인공위성 개발을 시작하며 책상에 앉아 있는 죽은 개발자 라는 글을 썼던게 생각납니다. 책상에 앉아서 코딩만 한다는 생각을 버리자는 취지의 글이었습니다. 위성을 개발하는 동안 리눅스 파트 뿐만아니라 앞서 소개한 FPGA, 전자, 기계, 광학, 열 파트 사람들과 협업해야했고, 책상에 앉아 있지 않고 여러 국내외 환경시험장과 통합시험을 위해 해외를 오가며 시험을 했던 기억이 납니다. 위성 개발에서 소프트웨어 엔지니어는 소프트웨어 외에 다른 일들에 많이 의존하게 됩니다. 다른 것들과 완전히 격리된 환경에서 편안히 소프트웨어를 개발할 수 없고, 하드웨어나 기계적인 영향도 심지어 받습니다. 이게 어떨 때는 무척 싫을 때도 있었는데 돌아보니 덕분에 다양한 환경을 경험하게 되었고 소프트웨어만 잘 개발하면 된다는 편협한 시선 대신 전체 시스템을 바라보는 넓은 시야를 가지게 된 것 같습니다.
앞으로 리눅스 뿐만 아니라 다양한 파트들과 잘 협력하여 더 나은 위성 제품을 시기적절하게 만들어 세상에 기여하면 좋겠습니다. 그래서 리눅스가 자신이 하는 복잡한 일은 숨기고 애플리케이션에 추상화된 좋은 서비스를 제공 하듯 우리도 사람들이 우주에 대해, 인공위성에 대해 잘 몰라도 우주에서 지구와 별을 촬영하여 가치있는 일을 할 수 있도록 서비스하는 일을 해야겠습니다. 리눅스에게 한 수 배웁니다.