ErosZy/sablejs

Run user plugins, rules, formulas, and AI-generated JavaScript safely in browsers.

해결하는 문제

Sablejs는 임베디드 가상 머신의 오버헤드 없이 사용자 또는 AI가 생성한 JavaScript 코드를 빠르고 안전하게 실행할 수 있는 방법을 제공합니다. 신뢰할 수 없는 코드를 안전하게 실행(샌드박싱)하면서도 소스맵을 통해 디버깅이 가능하고 높은 성능을 유지하는 문제를 해결합니다.

작동 방식

VM을 사용하는 대신, sablejs는 AOT(Ahead-of-Time) 방식으로 게스트 JavaScript(ES5.1)를 호스트 JavaScript로 컴파일합니다. "샌드박스" 모드를 사용하여 호스트에서 게스트로 순환적으로 단순한 데이터를 복사함으로써, 게스트 코드 내부의 변경이 호스트의 객체 그래프에 영향을 주지 않도록 보장합니다. 호스트 함수는 게스트에 "능력(capabilities)"으로 노출되며, 이는 오류를 정제하고 인수/결과를 복사하는 매개화된 래퍼입니다.

무한 루프나 메모리 고갈을 방지하기 위해, 컴파일된 프로그램을 전용 Web Worker에서 실행하는 것을 권장하며, 이를 통해 호스트는 벽시계 타임아웃을 강제하고 실행 에이전트를 종료할 수 있습니다.

대상 사용자

Node.js, 브라우저, Deno 및 Bun과 같은 다른 JS 런타임에서 동적, 사용자 제공 또는 AI 생성된 JavaScript 로직(예: 플러그인 시스템 또는 규칙 엔진)을 실행해야 하는 개발자들입니다.

주요 특징

  • AOT 컴파일: 임베디드 VM 방식을 피하고 게스트 코드를 호스트 JS로 컴파일하여 속도를 높입니다.

  • 안전한 샌드박싱: 기본적으로 게스트 코드가 호스트 객체나 플랫폼 API(예: window 또는 fs)에 접근하는 것을 방지합니다.

  • 능력 시스템: 호스트가 호스트 함수에 대해 좁고 제어 가능한 접근 권한을 명시적으로 부여할 수 있도록 합니다.

  • 디버깅 가능: 생성된 코드를 원본 게스트 소스로 매핑하기 위한 Source Map v3를 생성합니다.

  • 워커 격리: 타임아웃을 강제하기 위한 워커에서 프로그램을 실행하는 내장 헬퍼를 포함합니다.

  • 고성능: 여러 벤치마크에서 QuickJS-WASM보다 뛰어난 성능을 보입니다(예: V8 Benchmark Suite 7).

"Sablejs는 신뢰할 수 없는 코드를 안전하게 실행하면서도 높은 성능과 디버깅 가능성을 유지하는 데 있어 혁신적인 접근을 제공합니다." — @sablejs

관련

  • 프로젝트
  • 프로젝트
  • 프로젝트
  • 프로젝트
  • 프로젝트