# Hako - 임베드 가능한 고성능/경량 자바스크립트 엔진

> Clean Markdown view of GeekNews topic #20794. Use the original source for factual precision when an external source URL is present.

## Metadata

- GeekNews HTML: [https://news.hada.io/topic?id=20794](https://news.hada.io/topic?id=20794)
- GeekNews Markdown: [https://news.hada.io/topic/20794.md](https://news.hada.io/topic/20794.md)
- Type: news
- Author: [xguru](https://news.hada.io/@xguru)
- Published: 2025-05-09T10:03:01+09:00
- Updated: 2025-05-09T10:03:01+09:00
- Original source: [andrews.substack.com](https://andrews.substack.com/p/hako)
- Points: 12
- Comments: 2

## Summary

**Hako**는 **PrimJS**를 기반으로 한 경량 **JavaScript 엔진**으로, **WebAssembly**로 컴파일되어 보안성과 이식성이 뛰어납니다. 강력한 **샌드박스 구조**와 **fail-fast 전략**을 통해 메모리 안전성과 리소스 제어 기능을 제공합니다. 단일 **.wasm 파일**로 다양한 플랫폼에 손쉽게 임베드할 수 있으며, 크기는 약 800KB입니다. **SIMD 최적화**와 JIT 환경에서 **QuickJS 대비 최대 28% 향상된 실행 속도**를 보여줍니다.

## Topic Body

- 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 임베딩하는 예제](https://gist.github.com/andrewmd5/197efb527ef40131c34ca12fd6d0a61e) 제공  
- 릴리즈 빌드는 **단 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/andrewmd5/hako)

## Comments



### Comment 38392

- Author: secret3056
- Created: 2025-05-09T13:36:32+09:00
- Points: 1

https://github.com/fernvenue/hako-go-example  
은 없는 링크 같네요. Go 임베딩 예제는  
https://gist.github.com/andrewmd5/197efb527ef40131c34ca12fd6d0a61e  
인듯 합니다.

### Comment 38395

- Author: xguru
- Created: 2025-05-09T14:05:56+09:00
- Points: 1
- Parent comment: 38392
- Depth: 1

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