WebAssembly는 스택 기반 머신을 위한 명령어 형식으로, 플랫폼 독립성, 효율적인 크기, 안전한 실행을 목표로 합니다. 웹 외부 런타임도 존재하며, 호스트 시스템 접근 제어 기능을 통해 안전한 외부 프로그램 실행 환경을 제공하여 프로그램 공유의 새로운 표준이 될 잠재력을 지닙니다.
Ruby.wasm 프로젝트는 CRuby 인터프리터를 WebAssembly로 컴파일하여, Ruby를 웹 브라우저 등 다양한 환경에서 실행 가능하게 합니다. 브라우저에서 IRB 터미널을 완벽하게 에뮬레이션하며, Mastodon(Ruby on Rails 애플리케이션)이 C 확장 및 PostgreSQL과 함께 브라우저 내에서 실행되는 강력한 기능이 시연되었습니다. 이는 서비스 워커와 내부 PostgreSQL 통신을 통해 구현되었습니다.
기술적으로, Ruby.wasm은 CRuby 포팅 과정의 난제를 해결하고, 젬과 Ruby 파일을 단일 바이너리로 패키징하기 위한 가상 파일 시스템을 도입했습니다. C 확장을 WebAssembly로 크로스 컴파일할 수 있도록 mkmf
와 RubyGems에 지원을 추가했으며, WebAssembly의 표준 동적 링킹 API 부재 문제를 컴포넌트 모델의 모듈 링킹 기능을 활용하여 극복했습니다. 이를 통해 런타임 시 파일 기반 검색 없이 C 확장을 포함한 젬을 사용할 수 있게 되었습니다.