RubyKit에서 RubyKit으로

[28M07-2] Toward creating a single stand-alone executable of Ruby (ja)

작성자
RubyKaigi
발행일
2025년 10월 05일

핵심 요약

  • 1 Ruby/Tk의 Tcl/Tk 의존성 문제를 해결하고 Ruby 실행 환경을 단일 파일로 배포하는 RubyKit 개념을 제안합니다.
  • 2 Tcl/Tk 라이브러리를 가상 파일 시스템으로 통합하여 Ruby/Tk의 외부 의존성을 제거한 단일 실행 파일을 생성하는 기술을 설명합니다.
  • 3 이 기술을 Ruby 본체에 적용하여 '복사로 설치, 삭제로 제거'가 가능한 단일 파일 Ruby 실행 환경 및 애플리케이션 배포를 목표로 합니다.

도입

발표는 Ruby의 표준 GUI 라이브러리인 Ruby/Tk가 겪는 Tcl/Tk 라이브러리 의존성 문제에서 시작됩니다. Ruby/Tk는 Tk의 래퍼로 GUI 생성을 용이하게 하지만, Tcl/Tk 라이브러리가 별도로 필요하여 설치 및 환경 설정 시 'Tk가 작동하지 않는다'는 오류를 자주 유발합니다. 특히 Ruby 바이너리 배포 시 다른 라이브러리 의존성이 문제가 되며, 기존 Tcl/Tk 설치와 충돌 가능성 때문에 강제 도입이 어렵다는 한계를 가집니다. 이러한 문제들을 해결하기 위해 Tcl/Tk Kit의 아이디어를 차용한 'RubyKit' 개념이 제안됩니다.

Ruby/Tk의 Tcl/Tk 의존성 문제 해결

발표자는 Ruby/Tk의 핵심 DLL인 tcltk-libte에 Tcl/Tk 환경 전체를 결합하여 단일 실행 파일로 만드는 방안을 제시합니다. 이는 Tcl/Tk Kit(tclkit)에서 영감을 받은 것으로, 다음과 같은 과정을 거칩니다.

  • Tcl/Tk 라이브러리 트리를 압축하여 가상 파일 시스템(VFS) 데이터셋으로 만듭니다.

  • 이 데이터셋을 tcltk-libte와 결합하여 Tcl/Tk 라이브러리가 내장된 단일 tcltk-lib 파일을 생성합니다.

  • 실행 시 이 파일은 VFS로 마운트되어 Tk가 내부 파일 트리를 시스템에 연결된 것처럼 인식합니다.

이 방식은 Tcl/Tk를 포함한 형태로 배포되므로 기존 설치와의 충돌을 방지하고, Ruby 바이너리 배포 시 외부 라이브러리 의존성 문제를 해결하여 단순한 배포가 가능해집니다.

RubyKit 개념의 확장: Ruby 본체 및 애플리케이션 단일화

발표자는 이 아이디어를 Ruby 인터프리터 본체로 확장하여 ‘RubyKit’을 제안합니다.

  • 단일 파일 Ruby 실행 환경: 기존 Ruby 코어에 VFS 라이브러리를 정적 링크하고, Ruby 라이브러리 파일 트리 및 Ruby/Tk, Tcl/Tk 라이브러리 전체를 하나의 파일로 묶습니다.

  • 간편한 설치/제거: 이 단일 파일은 ‘복사로 설치, 삭제로 제거’가 가능하며, 실행 파일 자체로 IRB를 시작할 수 있습니다.

  • 유연한 활용: 내장된 파일 트리를 추출하여 일반적인 설치 파일로 사용하거나, 라이브러리를 추가/삭제하여 재구축하는 것도 가능합니다. 여러 버전을 동시에 두어도 충돌 걱정이 없습니다.

애플리케이션 또한 동일한 가상 파일 시스템 구조를 채택하여 ‘AppKit’ 형태로 단일 파일화할 수 있습니다. AppKit은 압축 해제 없이 바로 실행 가능하며, RubyKit과 AppKit을 결합하면 애플리케이션을 단일 실행 파일 형태로 배포할 수 있습니다. 이는 크로스 플랫폼 환경에서 DLL을 제외하고 임시 파일을 최소화하며 필요한 파일만 포함하는 경량화된 배포를 목표로 합니다.

결론

RubyKit은 Ruby/Tk의 고질적인 Tcl/Tk 의존성 문제를 해결하는 것을 넘어, Ruby 실행 환경과 애플리케이션을 단일 파일 형태로 배포할 수 있는 혁신적인 방안을 제시합니다. 이는 '복사로 설치, 삭제로 제거'라는 극도로 단순화된 배포 및 관리 방식을 가능하게 하며, 여러 Ruby 버전의 동시 운용을 용이하게 합니다. 특히, 크로스 플랫폼 환경에서 최소한의 의존성으로 구동되는 경량화된 실행 파일을 제공함으로써 Ruby 개발 및 배포의 편의성을 크게 향상시킬 잠재력을 가집니다. 현재 개발 협력자를 모집 중이며, 이러한 비전이 실현될 경우 Ruby 생태계에 큰 변화를 가져올 것으로 기대됩니다.

댓글 0

댓글 작성

0/1000
정중하고 건설적인 댓글을 작성해 주세요.

아직 댓글이 없습니다

첫 번째 댓글을 작성해보세요!