프로젝트 소개
Wago는 전체가 Go로 작성된 WebAssembly 런타임입니다. Wasm을 해석하는 대신 모듈을 네이티브 머신 코드로 직접 컴파일하므로, CGO 없이 Go 프로그램에 임베딩할 수 있어 일반적인 Go 빌드와 교차 컴파일을 간편하게 유지할 수 있습니다. 이 프로젝트는 빠르고 컴팩트하며 확장 가능하다는 점을 내세우고 있으며, 현재 베타 단계이므로 API와 생성된 .wago 결과물이 변경될 수 있음을 명시하고 있습니다.
프로젝트가 강조하는 특징은 다음과 같습니다:
- 순수 Go: 임베딩 시 C 툴체인이 필요하지 않습니다.
- 표준 중심: 런타임이 공식 WebAssembly 테스트 스위트뿐만 아니라 퍼징 및 실제 코퍼스를 통과한다고 설명합니다.
- 확장성: WASI, Component Model 및 기타 호스트 기능은 코어 런타임 외부에서 플러그인으로 존재합니다.
- 독립 실행형 실행 파일: .wasm 파일을 작은 네이티브 바이너리로 컴파일할 수 있으며, README에서는 이것이 CLI 도구에 유용하다고 제안합니다.
- 플랫폼: amd64 및 arm64 기반의 Linux, macOS, Windows를 지원하며, WebAssembly 기능 커버리지는 백엔드마다 다릅니다. 정확한 커버리지는 기능 매트릭스 파일에 기록되어 있습니다.
설치
macOS와 Linux에서는 문서에 안내된 한 줄 명령어로 설치 스크립트를 다운로드하여 sh로 전달하며, Windows PowerShell 사용자는 이에 상응하는 irm 명령어를 실행합니다. 이를 통해 매니저가 설치되고, 이후 런타임이 설치됩니다. 문서 사이트에서는 대체 설치 방법, 릴리스 채널 및 소스 빌드에 대해 다룹니다.
모듈 실행
설치 후 모듈을 직접 실행할 수 있습니다. 예를 들어 인수를 가진 작은 Fibonacci Wasm 파일을 실행하면 예상 결과가 출력됩니다. 독립 실행형 바이너리를 생성하려면 compile 하위 명령어로 .wasm 입력 파일과 출력 경로를 지정하며, 결과물인 실행 파일은 동일한 인수를 받아들입니다.
Go에서 Wago 사용하기
Go 개발자는 go get github.com/wago-org/wago를 통해 모듈을 추가합니다. 저장소에는 모듈을 컴파일하고 인스턴스를 생성하며 내보낸 함수를 호출하는 타입 지정 런타임 예제를 포함하여 번호가 매겨진 예제들이 제공됩니다. 별도의 문서 가이드에서 Go에 Wago를 임베딩하는 방법을 다룹니다.
호스트 기능 및 플러그인
호스트 통합 기능은 의도적으로 코어 런타임 외부에 유지됩니다. init 명령어로 프로젝트를 초기화할 수 있으며, wago-org/wasi와 같은 WASI 구현체 플러그인을 이름으로 추가할 수 있습니다. 사용 가능한 플러그인을 찾아볼 수 있는 플러그인 레지스트리 사이트가 제공됩니다.
성능
README에 따르면 Wago는 수 킬로바이트의 RAM을 사용하며, 컴파일 시간은 wazero보다 약 3배 빠르고 실행 속도는 약 40% 더 빠르다고 주장합니다. 프로젝트는 벤치마크 페이지와 저장소 내의 벤치마크 디렉토리를 링크하고 있습니다. 이러한 수치는 유지 관리자의 자체 측정값이므로, 실제 적용 전 사용자의 워크로드로 확인해야 합니다.
프로젝트 상태 및 라이선스
Wago는 Apache License 2.0 하에 릴리스되었으며 무료로 개발되고 있으며 후원을 권장합니다. 저장소에는 문서, 예제, 기능 매트릭스, 아키텍처 문서, 로드맵, 기여 가이드 및 이슈 트래커가 포함되어 있습니다.
전반적으로 Wago는 C 의존성 없이 WebAssembly를 실행하거나 임베딩하고자 하며, 호스트 기능이 플러그인을 통해 추가되는 작은 런타임 코어를 선호하는 Go 개발자를 타겟으로 합니다. 베타 상태라는 점과 벤치마크 수치가 프로젝트 자체에서 제공되었다는 점이 도입 전 고려해야 할 주요 사항입니다.
Comments
0 Rating appears after 10 ratings
Sign in to join the discussion.