Lind is a single-process sandbox that provides an option to safely execute programs. Lind executes applications using software fault isolation and a kernel microvisor to limit the potential of reaching bugs or security flaws in the application.
In Old Norse, Old High German and Old English a “lind” is a shield constructed with two layers of linden wood. Linden wood shields are lightweight, and do not split easily, an appropriate metaphor for a sandboxing system which employs two technologies.
lind-wasm is a WebAssembly-focused extension of the Lind project. It integrates multiple components—both in-house and third-party—to enable execution of POSIX-like applications in WebAssembly runtimes, such as Wasmtime.
Check out the Getting started guide for a Hello World! example and our docs to learn more about Lind!
Supported platforms: lind-wasm targets linux/amd64. A native build
requires x86-64 Linux (tested on Ubuntu 22.04) and roughly 20 GB of free disk
space.
| Host | How to run |
|---|---|
| x86-64 Linux | native build, or the development image |
| Windows | Ubuntu 22.04 under WSL2, covered in the Native Linux setup guide; or Docker Desktop with --platform=linux/amd64 |
| macOS (Intel or Apple Silicon) | the development image with --platform=linux/amd64; on Apple Silicon this runs under emulation and is slower |
On Windows and macOS, clone into a case-sensitive filesystem — the WSL2 ext4
filesystem rather than /mnt/c, for example. The glibc sources contain
case-colliding filenames (see
#1246).
Run make checkenv to verify a machine.
This monorepo combines various subprojects and dependencies that work together to support Lind's goals. Below is an overview of the major components:
| Component | Location | Description |
|---|---|---|
fdtables |
src/fdtables |
Provides file descriptor table management, used to emulate POSIX semantics |
rawposix |
src/rawposix |
Implementation of raw POSIX syscall wrappers used internally by Lind |
threei |
src/threei |
System call mediation layer for policy deployment |
typemap |
src/typemap |
Defines custom data structures and type conversion functions used across Lind |
cage |
src/cage |
Implements the custom Cage structure and its subsystems, including vmmap (virtual memory mapping) and signal handling |
sysdefs |
src/sysdefs |
Shared system call definitions and constants for cross-platform support |
lind-boot |
src/lind-boot |
Execution entry point that initializes our modified Wasmtime runtime, 3i, and RawPOSIX |
| Project | Location | Description |
|---|---|---|
glibc |
src/glibc |
Modified version of glibc to support WebAssembly and Lind interfaces |
wasmtime |
src/wasmtime |
Embedded Wasmtime runtime for running and debugging Lind-Wasm modules |
| Tool | Location | Description |
|---|---|---|
binaryen |
tools/binaryen |
Provides wasm-opt and other utilities used for optimizing wasm binaries |
Contributions are welcome. See the repository-specific contribution guide for development setup, testing, and code style. Project-wide policies and community information are maintained in the Lind community repository:
Please report vulnerabilities privately according to our Security Policy.
Lind-Wasm is licensed under the Apache License 2.0.