Hako - 임베드 가능한 고성능/경량 자바스크립트 엔진
(andrews.substack.com)- PrimJS 기반의 경량화된 JavaScript 엔진으로, WebAssembly로 컴파일되어 안전하고 이식성이 뛰어남
- 메모리 안전성과 자바스크립트 기능 제한을 제공하는 강력한 샌드박스 구조와 ‘fail-fast’ 철학으로 보안성과 확장성 확보
- 단일 머신에서도 수백 개의 VM을 병렬로 실행 가능하며, 스크립트의 메모리 및 연산량(gas) 제한도 설정 가능
- 복잡한 빌드나 FFI 없이 단일
.wasm
파일로 거의 모든 플랫폼에 임베딩 가능하며, 크기 또한 약 800KB로 매우 작음 - QuickJS보다 최대 28% 향상된 성능, JIT 환경에서는 네이티브 수준의 실행 속도 제공
Hako: 작고 빠르고 안전한 JavaScript 엔진
Hako란?
- PrimJS를 기반으로 개발된 포터블, 보안 중심, 고성능의 JavaScript 엔진
- 이름 Hako는 “상자(箱)”라는 뜻의 일본어에서 유래
- 누구나 어떤 환경에서든 쉽게 내장할 수 있도록 설계된 WebAssembly 기반 엔진
보안성: 메모리 안전과 기능 제한
- C/C++로 작성되었지만 WebAssembly로 컴파일됨 → 메모리 안정성과 실행 샌드박스 보장
- JavaScript 기능 자체도 제한 가능:
- 특정 함수 제거
- 메모리 할당 불가로 제한
- 실행 시간, 메모리 사용량, 가스(gas) 등 제한
-
VMContext
를 통해 악성 사용자를 식별하고 리소스 제어 가능 - fail-fast 전략으로 불안정하거나 과도한 리소스 사용 코드를 조기에 중단
임베디드 용이성: 그냥 .wasm
하나로 충분
- Emscripten을 사용하지 않음 → 모던 WebAssembly 런타임만 있으면 임베딩 가능
- 다양한 언어에 대한 FFI 래퍼 불필요 → 복잡한 빌드 과정 없이도 사용 가능
- 예시: Go에서 Hako 임베딩하는 예제 제공
- 릴리즈 빌드는 단 800KB 크기의
.wasm
파일로 구성됨
성능: QuickJS보다 더 빠름
- PrimJS가 QuickJS보다 빠른 것처럼, Hako도 QuickJS 대비 평균 28% 성능 향상
- SIMD 최적화 및 일부 핫패스 경로 개선으로 성능 극대화
- WebAssembly로 인한 성능 저하는 없음 — V8, Wasmtime, JavaScriptCore에서 JIT 최적화 덕분에 거의 네이티브 수준
- 성능 측정 및 프로파일링 API도 내장되어 있음
제한 사항 및 향후 계획
- PrimJS에서 사용되던 일부 기능(템플릿 인터프리터, GC 스냅샷)은 아직 완전 지원되지 않음
- ByteDance의 스냅샷 툴이 아직 오픈소스화되지 않아, 개발자가 독자적인 도구를 구현 중
- 현재는 초기 베타 단계이며, API/ABI 안정화를 위해 피드백이 매우 중요
- GitHub - hako
https://github.com/fernvenue/hako-go-example
은 없는 링크 같네요. Go 임베딩 예제는
https://gist.github.com/andrewmd5/197efb527ef40131c34ca12fd6d0a61e
인듯 합니다.