Hyperlight WASM: 빠르고, 안전하고 OS-Free
(opensource.microsoft.com)- Hyperlight Wasm은 Microsoft가 CNCF에 기부한 초경량 가상 머신(VM) 기술 Hyperlight의 최신 확장 버전으로, WebAssembly(Component Model 기반) 워크로드를 빠르고 안전하게 실행함
- 전통적인 VM과 달리 OS나 가상 디바이스 없이 메모리 슬라이스와 CPU만 노출, 1~2ms의 빠른 부팅 시간 제공
- 다양한 언어(C, Rust, Go, Python, JS 등)로 작성된 wasm 컴포넌트를 하이퍼바이저 보호 하에 실행 가능
Hyperlight Wasm의 주요 특징
-
전통적인 VM 대비 빠른 성능
- 전통적인 VM: 디바이스 초기화 → 커널 로딩 → OS 부팅 → 애플리케이션 실행 (약 125ms)
- Hyperlight Wasm: 메모리 슬라이스 생성 + Wasm 로딩만으로 실행 가능 (1~2ms, 미래에는 <1ms 목표)
- 빠른 실행 속도는 온디맨드 서버리스 실행 또는 최소한의 warm pool 구성에 유리
-
운영체제 없이도 다양한 언어 실행
- 표준인 WASI와 WebAssembly Component Model 기반으로 대부분의 언어에서 작성된 컴포넌트 실행 가능
- wasmtime 런타임을 내장하여 Python, JavaScript, C# 등 인터프리터 언어도 런타임 포함 형태로 실행 가능
- 개발자 입장에서는 단순히
wasm32-wasip2
타겟으로 컴파일하면 Hyperlight에서 실행 가능
-
보안성 향상 (2중 샌드박스)
- Wasm 샌드박스 + 하이퍼바이저 기반 VM 샌드박스의 이중 보호 구조
- 공격자가 wasm을 탈출하더라도 VM 샌드박스를 추가로 우회해야 함
개발 예시: Rust 기반 UDP Echo 서버 실행
-
wkg
CLI로 wasm 바이너리 다운로드 및 컴파일 - WASI 인터페이스 정의 파일(
.wit
)을 바이너리로 변환하여 바인딩 생성 -
hyperlight_component_macro
와host_bindgen!
을 통해 Wasm의 import/export 인터페이스 바인딩 자동 생성 - UdpSocket 인터페이스 구현을 통해 echo 서버 로직 정의
-
hyperlight-wasm
샌드박스를 생성해 wasm 컴포넌트 로딩 및 실행 -
Ahead-of-Time 컴파일
-
hyperlight-wasm-aot
도구를 이용해 wasm을 AOT 컴파일하여 실행 시간 단축 -
cargo run
으로 서버 실행,nc -u
명령으로 UDP 테스트 가능
-
확장성 및 향후 계획
- Hyperlight Wasm은 x86뿐 아니라 Arm64 아키텍처 지원 예정
- 현재는 WASI 인터페이스를 직접 구현해야 하지만, 향후 기본 바인딩 제공 예정
- HTTP 서버 등 간단한 서비스를 빠르게 샌드박싱 가능하게 할 계획
오픈소스 커뮤니티 참여 안내
- Hyperlight는 Apache 2.0 라이선스로 공개된 Microsoft의 오픈소스 프로젝트이며, CNCF Sandbox에 등록됨
- Hyperlight Wasm은 클라우드 네이티브 컴퓨팅에 적합한 빠르고 안전한 실행 환경 제공을 목표로 함
- GitHub 저장소를 통해 코드 확인 및 기여 가능
👉 GitHub 저장소: hyperlight-wasm
Hacker News 의견
-
몇 달 전부터 WebAssembly를 본격적으로 사용하여 여러 언어에서 작동하는 백엔드 인증 라이브러리를 만들기 시작했음
- Extism을 기반으로 하여 인터페이스 복잡성을 줄였음
- 마법 같은 경험이었음
- WASM은 흥미로운 위치에 있음
- 최소한의 핵심 사양으로 가치를 증명했음
- 이제 WASI와 Component Model을 위한 더 큰 API 표면을 구현하려는 큰 추진력이 있음
- 커뮤니티의 많은 사람들이 이 방향에 대해 우려하고 있음
- 개인적으로 WASM이 너무 복잡해져서 대형 기술 기업만 구현과 실험이 가능한 웹 브라우저의 길을 걷지 않기를 바람
-
몇 달 전 Hyperlight라는 경량 VMM을 발표했음
- 약 1밀리초 만에 새로운 VM을 생성할 수 있음
- 오늘 Wasmtime 런타임 기반의 Hyperlight Wasm 게스트를 발표하게 되어 기쁨
- VM의 게스트 OS 없이 WASI 인터페이스 위에서 Wasm Component 바이너리를 실행할 수 있게 됨
- 이 게시물에서 작동 방식을 설명하고 예제를 통해 설명함
-
매우 기대됨
- WASM/WASI가 90년대 JVM의 꿈으로 성장하길 바람
- 여러 플랫폼에서 쉽게 포팅하고 테스트할 수 있는 메모리 안전 개발 타겟이 될 수 있음
- WASM은 브라우저 이상의 많은 것들을 위해 사용될 수 있기를 바람
-
흥미로워 보임
- WASM으로 Cloudflare Workers나 Lambda와 같은 것을 직접 구현하고 싶을 때 사용할 수 있는 사례인가?
-
멋짐
- 여기서의 가치 추가는 무엇인지 이해하려고 함
- wasmtime를 통해 실행하는 것과 어떻게 다른가?
-
모든 멋지고 흥미로운 프로젝트들이 WASM이 브라우저를 제외한 모든 곳에서 성공적이라는 생각이 듦
- Web Assembly에서 Web을 빼고 다른 이름을 붙여야 할지도 모름
-
프로모스 설정에 이걸 어떻게 넣을 수 있을지 아이디어가 있는가?
- 이게 베어 메탈에서 작동하도록 설계된 것으로 이해하고 있음
- 여분의 베어 메탈 x86이 없어서 약간 어색함
- 그냥 VM에 넣고 중첩 가상화를 받아들여야 할 것 같음
-
인스턴스는 어떻게 시작되고 관리되는가?
- 어떤 API를 통해서인가?
- Wasm Component 바이너리에 연결된 Wasm Components의 트리를 실행하고, 기능을 위임하며, 수명 주기를 관리할 수 있는 기능을 줄 수 있는가?
-
기본적으로 하드웨어 VM에서 프로그램을 샌드박스하기 위한 VM(wasm)이 있고, 이는 사용자 공간 프로세스(Linux 프로세스)에서 프로그램을 격리하기 위한 추상화임
- 프로그램을 격리하기 위해 Unix 프로세스를 사용하는 것에 대해 생각해 본 적이 있는가?
-
유니커널/라이브러리 OS인가?