
Red가 뭐냐면
먼저 Red라는 언어부터 짚고 갈게요. 처음 들어보는 분도 많을 거예요. Red는 Rebol이라는 오래된 언어에서 영감을 받아 만들어진 언어인데요, 목표가 꽤 야심 차요. 저수준의 시스템 프로그래밍(운영체제나 드라이버처럼 하드웨어에 가까운 코드)부터 고수준의 GUI 앱 만들기까지, 하나의 언어로 다 하겠다는 거예요. 이걸 '풀스택 언어'라고 부르는데, 보통은 C로 시스템을 짜고 파이썬으로 스크립트를 짜고 하는 식으로 언어를 나눠 쓰잖아요. Red는 그 경계를 하나로 합치려는 시도예요.
게다가 Red로 만든 프로그램은 컴파일 결과물이 굉장히 작아요. 수백 KB 수준의 작은 실행파일이 나오는데, 요즘처럼 앱 하나 받으면 수백 MB씩 하는 세상에서는 오히려 신선하죠.
이번 소식: 정적 링킹 지원
이번에 Red가 정적 링킹(static linking)을 지원하기 시작했어요. 이게 뭐냐면, 프로그램이 돌아가려면 보통 여러 외부 라이브러리(다른 사람이 미리 만들어둔 코드 묶음)의 도움을 받아야 하거든요. 라이브러리를 붙이는 방식에는 크게 두 가지가 있어요.
하나는 동적 링킹(dynamic linking)이에요. 실행파일 안에는 라이브러리를 안 넣고, '이건 실행할 때 컴퓨터에 깔려 있는 걸 가져다 쓸게'라고 표시만 해두는 방식이죠. 파일은 가벼운데, 문제는 그 라이브러리가 상대방 컴퓨터에 없거나 버전이 다르면 '이 파일을 실행할 수 없습니다' 하고 뻗어버려요. 윈도우에서 'DLL을 찾을 수 없습니다' 에러 보신 적 있죠? 딱 그거예요.
다른 하나가 이번에 추가된 정적 링킹이에요. 필요한 라이브러리 코드를 아예 실행파일 안에 통째로 넣어버리는 방식이에요. 파일 크기는 조금 커지지만, 대신 그 파일 하나만 상대에게 던져주면 다른 거 아무것도 안 깔아도 그냥 돌아가요. 도시락으로 비유하면, 동적 링킹은 '반찬은 현지에서 사 먹어'라고 말하는 거고, 정적 링킹은 '밥이랑 반찬을 다 도시락에 싸서 준다'는 거예요. 어디 가서든 뚜껑만 열면 바로 먹을 수 있는 거죠.
왜 이게 의미 있냐면
작은 언어 커뮤니티에게 배포(만든 프로그램을 사용자에게 전달하는 일)는 생각보다 큰 골칫거리예요. 아무리 좋은 프로그램을 만들어도 '이거 돌리려면 뭐뭐를 먼저 설치하세요'라는 안내가 붙는 순간 사용자 절반은 도망가거든요. 정적 링킹이 되면 '이 파일 하나 받아서 더블클릭하세요'로 끝나요. 진입 장벽이 확 낮아지는 거죠.
요즘 Go 언어가 인기 있는 이유 중 하나도 바로 이거예요. Go는 처음부터 '컴파일하면 의존성 없는 단일 실행파일이 뚝 떨어진다'는 걸 강점으로 내세웠거든요. Rust도 비슷하게 자족적인 바이너리를 잘 뽑아내고요. Red가 정적 링킹을 갖췄다는 건, 이 배포 편의성 경쟁에 한 발 들여놓았다는 의미예요.
한국 개발자에게 주는 시사점
당장 Red를 실무에 도입하라는 얘기는 아니에요. 여전히 소수 언어니까요. 다만 여기서 배워둘 개념이 정적 링킹과 동적 링킹의 차이예요. 이건 Red만의 얘기가 아니라 C, C++, Go, Rust 어디서든 마주치는 근본 개념이거든요. 사내 도구나 CLI(명령어로 쓰는 프로그램)를 만들어 동료에게 나눠줄 때, '왜 내 컴퓨터에선 되는데 저쪽에선 안 되지?' 하는 일의 상당수가 바로 이 링킹 방식 때문에 생겨요. 파일 하나로 깔끔하게 배포하고 싶다면 정적 링킹을, 용량과 보안 패치 관리가 중요하면 동적 링킹을 고르면 된다는 감을 잡아두면 두고두고 도움이 됩니다.
마무리
정리하면, Red의 정적 링킹 지원은 '만든 걸 남에게 건네주기 쉬워졌다'는 실용적인 진전이에요. 여러분은 프로그램 배포할 때 파일 하나로 다 되는 쪽을 선호하시나요, 아니면 용량 아끼려고 의존성을 따로 관리하는 쪽을 선호하시나요? 각자 경험담이 궁금해요.
🔗 출처: Hacker News