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을 제외하고 임시 파일을 최소화하며 필요한 파일만 포함하는 경량화된 배포를 목표로 합니다.