9P by xguru 1일전 | ★ favorite | 댓글 2개
  • 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

엇 바뀌었나 보네요. 수정해두었습니다. 고맙습니다.