WASI

최근 편집: 2022년 12월 27일 (화) 21:53
인쇄용 판은 더 이상 지원되지 않으며 렌더링 오류가 있을 수 있습니다. 브라우저 북마크를 업데이트해 주시고 기본 브라우저 인쇄 기능을 대신 사용해 주십시오.

WASI는 WebAssembly System Interface의 준말로, CPU 아키텍처에 관계없이 작동하는 WebAssembly를 OS에 관계없이 실행시킬 수 있는 인터페이스이다.[1]

Docker의 공동 설립자 솔로몬 하이크스는 2008년에 WASI가 존재했다면 Docker를 만들 필요도 없었을 것이라고 평했다.[2]

탄생 배경

기존에는 WebAssembly를 브라우저 밖에서 실행할 때 시스템 호출을 이중 모방한 인터페이스를 사용하였다. WebAssembly 컴파일러로 많이 쓰이는 emscripten의 경우 자바스크립트로 모방된 시스템 호출 인터페이스를 통해 브라우저를 조작하여 시스템과 상호 작용했는데, 이를 브라우저 없이 시스템과 직접 상호 작용하도록 만들기 위해 emscripten의 인터페이스를 다시 모방하여 사용한 것이다. 그러나 emscripten의 인터페이스는 표준화되지 않았고 타입 안전하지 않으며 인자를 넘길 때 레지스터 대신 을 이용하므로 성능도 떨어진다. emscripten의 목적이었던 자바스크립트의 제한적 환경에서는 관계없는 단점들이지만, 자바스크립트가 아닌 다른 환경에서까지 이 단점들을 그대로 모방할 필요는 없었다. 따라서 WASI란 이름으로 여러 환경에서 사용할 수 있는 표준화된 인터페이스를 만들게 된다.[1]

샌드박싱

기존 OS의 인터페이스는 사용자가 접근할 수 있는 리소스라면 애플리케이션 또한 문제 없이 접근이 가능한 점 때문에 악성 코드가 사용자 정보를 쉽게 탈취할 수 있는 문제가 있었다. WASI는 샌드박싱을 이용해 애플리케이션이 가진 권한에 따라 해당 권한에 맞는 함수를 제공하여 이런 문제를 해결한다. 파일 시스템의 경우 WASI에서는 각 애플리케이션은 기본적으로 따로 할당된 디렉토리 안에 있는 파일에만 접근이 가능하며, 각 모듈 또한 권한이 구별되기 때문에 파일 시스템 접근이 허가되지 않은 모듈은 모듈 외부에서 파일 디스크립터를 넘겨받아야만 비로소 파일 접근이 가능하다.[1]

출처