리눅스 커널에 '러스트' 쓰는 날 올까

토발즈 "드라이버가 첫 시도로 적합할 것"

컴퓨팅입력 :2021/03/30 07:56    수정: 2021/03/31 14:16

오픈소스 운영체제 리눅스에 모질라가 만든 프로그래밍 언어인 러스트를 접목하려는 시도가 이어지고 있다. 리눅스 커널의 취약점은 메모리 안전성과 관련된 것이 많은데, 안전성 높은 메모리 관리가 특장점인 러스트가 도움이 될 수 있다는 기대가 반영된 흐름이다.

근시일 내에 리눅스 커널이 C언어에서 러스트로 포팅될 가능성은 낮지만, 드라이버나 사용자공간에서 작동하는 프로그램부터 러스트를 접목하려는 시도가 이어지다 보면 커널까지 확산되는 날이 올 것이란 기대가 높아지고 있다.

최근 미국 지디넷은 리눅스 개발자 커뮤니티 동향과 리눅스 창시자 리누스 토발즈와의 인터뷰 등을 종합해 "느리지만 분명히 러스트가 리눅스 안으로 들어가고 있다"고 분석한 기사(☞원문 링크)를 게시했다.

미국 지디넷은 먼저 리눅스 안으로 러스트를 들여오려는 다양한 시도를 소개했다.

지난해 '리눅스 플러머스 컨퍼런스'에서 구글 엔지니어 닉 디소니어스는 러스트를 리눅스 인라인 코드 언어로 사용하는 방안에 대한 진지한 논의를 제안했다. 그는 컴퍼일러 기반구조인 LLVM과 C언어 컴파일러 프론트엔드 클랭(Clang)에 기여한 인물로도 잘 알려진 개발자다.

(이미지=리눅스 플러머스 컨퍼런스 2020서 닉 디소닌어스 발표 장표 캡처)

아마존웹서비스(AWS)는 최근 컨테이너에 최적화된 리눅스 배포판인 '보틀로켓'을 공개했는데, 보틀로켓에는 상당한 양의 러스트 코드가 포함돼 있기도 하다.

러스트를 개발한 모질라 재단의 디렉터이자 리눅스 배포판 데비안 개발에 기여하고 있는 실베스트리 레드루는 LLVM과 클랭을 이용해, 리눅스에서 작동하는 러스트 버전의 '코어유틸'을 만들기도 했다. 코어유틸은 GNU 셸 핵심 유틸리티다.  레드루는 러스트 버전 코어유틸로 리눅스를 부팅하고 데비안 패키지를 실행시키는 데 성공했다. 아직 프로덕트 수준이 아니기 때문에 사용하려면 추가 작업이 필요하지만, 작동에는 문제 없다는 게 지디넷의 설명이다.

그렇다면, 리눅스 커널 언어를 C에서 러스트로 바꾸려는 시도는 왜 계속 되는 걸까? 러스트는 소프트웨어의 보안성을 쉽게 높여준다는 점에서 인기를 끌고 있다.

AWS 제품 매니저 사마르타 찬드라 셰카르는 러스트가 "스레드 안정성을 보장하고 보안 취약점으로 이어질 수 있는 버퍼 오버플로 같은 메모리 관련 오류 방지하는 데 효과적이다"고 설명했다. 다른 많은 개발자들도 비슷한 의견을 보이고 있다.

리눅스 커널은 메모리 안전 문제가 전체 보안에 상당한 영향을 미치는 것으로 알려졌다. 2019년 '리눅스 시큐리티 서밋'에서 알렉스 게이너와 제프리 토마스는 리눅스 커널 취약점의 3분의2는 메모리 안전 이슈에서 비롯된다는 내용의 연구를 발표한 바 있다.

이론적으로 러스트의 더 안전한 API를 사용하면, 리눅스 커널 메모리 안전 문제를 해결할 수 있다는 얘기다.

그렇다고 리눅스 러스트 지지자들이 리눅스커널을 러스트로 재작성하자고 주장하는 것은 아니다. 새로 작성하는 코드만이라도 러스트로 만들어 보자는 게 그들의 생각이다.

리눅스에서 러스트를 지원하고자 할 때 우려되는 문제도 있다. 커널에서 기존 API 사용하고 아키텍처를 지원하는 문제도 있고, 러스트와 C 사이 애플리케이션 바이너리 인터페이스(ABI)의 호환성을 확보하는 일도 과제다.

■'리눅스의 아버지' 리누스 토발즈 입장은?

리눅스 창시자 리누스 토발즈는 리눅스에 러스트를 접목하는 것을 어떻게 생각할까?

토발즈는 드라이버 같이 작고 독립적인 부분부터 러스트 도입 시도를 하면서, 천천히 지켜보자는 입장이다.

토발즈는 미국 지디넷과 인터뷰에서 "이 프로젝트에 관심을 가지고 있지만, 이 일은 러스트에 매우 빠져 있는 사람들이 주도하고 있다. 실제로 어떻게 작동하는지 보고싶다"고 말했다.

그는  "개인적으로 러스트로 전환을 추진하지는 않는다"며 "안정성 등 이점 생각하면 고려할만 하지만 때로 이점이 생각만큼 발휘되지 않을 수 있다는 점도 알고 있다"고 말했다.

토발즈는 러스트의 첫 번째 목표는 드라이버가 될 것이라고 봤다. "(러스트를 적용할 수 있는) 다양한 타깃이 존재하고, 커널의 이러한 개별 부분은 상당히 작고 독립적이기 때문"이라고 그 이유를 설명했다.  또 "어떤 사람들은 이런 일에 흥미를 느끼지 못할 수 있지만 명확한 목표가 될 수 있다"고 덧붙였다.

관련기사

아키텍처 측면에서도 드라이버가 먼저 시험대에 오르는 것이 유리하다는 게 그의 생각이다. 상당수의 드라이버는 몇 가지 타깃 아키텍처에만 관련돼 있으므로 러스트 코드에 문제가 생기더라도 그 영향이 전체에 미치진 않을 것이란 설명이다.

미국 지디넷은 "리눅스가 C언어에서 러스트로 포팅되는 일은 근시일 내에 일어나지 않을 것이 확실하지만, 사용자 프로그램, 드라이버에 러스트를 적용하려는 많은 관심과 시도가 생겨나고 있고, 궁극적으로 러스트 기반 리눅스 커널을 리눅스 운영체제에 추가하려는 시도로 이어질 것이다"고 내다봤다.