1. 仮想化環境におけるバイナリー・ポータビリティの考察 (WebAssemblyの場合)
1
# uname -sr ; tail -1 /etc/lsb-release
Linux 4.15.0-72-generic
DISTRIB_DESCRIPTION="Ubuntu 18.04.3 LTS"
# curl https://get.wasmer.io -sSfL | sh
# source /root/.wasmer/wasmer.sh
# cd /opt
# git clone https://github.com/wasmerio/wasmer.git
# cd wasmer/examples/nginx
# wasmer run nginx.wasm -- -p . -c nginx.conf &
# strace -p 25673
select(7, [6], [], NULL, NULL) = 1 (in [6])
accept(6, {sa_family=AF_INET, sin_port=htons(55813), sin_addr=inet_addr("172...
ioctl (3, FIOCLEX) = 0
ioctl (3, FIONBIO, [1]) = 0
select(7, [3 6], [], NULL, NULL) = 1 (in [3])
recvfrom(3, "GET / HTTP/1.1¥r¥nHost: 172.17.159"..., 1024, 0, 0x7f2fc805a000, …
stat ("././html/index.html", {st_mode=S_IFREG|0644, st_size=958, ...}) = 0
openat(AT_FDCWD, "././html/index.html", O_RDONLY|O_NONBLOCK|O_LARGEFILE) = 7
fstat (7, {st_mode=S_IFREG|0644, st_size=958, ...}) = 0
write (3, "HTTP/1.1 304 Not Modified¥r¥nServe"..., 180) = 180
write (5, "172.17.159.225 - - [28/Dec/2019:"..., 192) = 192
close (7) = 0
setsockopt(3, SOL_TCP, TCP_NODELAY, [1], 4) = 0
select(7, [3 6], [], NULL, NULL) = 1 (in [3])
# netstat -anp
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:8080 0.0.0.0:* LISTEN 25673/wasmer
wasmer
WebAssembly runtime with WASI (API)
WebAssembly System Interface (SOCKET, I/O ..etc)
Linux (OS)
CPU, Networking, Storage I/O …etc
INTERNET
(ポータビリティあり)
source: SAKURA Internet Research Center (2019/12)
x86 or Aarch64
wasmer is a standalone WebAssembly runtime for running WebAssembly outside of the browser, supporting WASI ...
wasmtime - a small and efficient runtime for WebAssembly & WASI
WAMR (WebAssembly Micro Runtime) is a standalone WebAssembly (WASM) runtime with small footprint.
wagon is a WebAssembly-based interpreter in Go, for Go.
wasmi - a Wasm interpreter.
WAVM is a WebAssembly virtual machine, designed for use in non-web applications.
life is a secure & fast WebAssembly VM built for decentralized applications, written in Go. ...etc etc