SkiffOS: Minimal Cross-compiled Linux for Embedded Containers
Authors: Stewart, Christian
Type: Software
Published: 2026-08-03

<p><a href="https://github.com/skiffos/SkiffOS/blob/master/resources/paper.pdf">SkiffOS</a> is a config package system for the <a href="https://buildroot.org">Buildroot</a> OS cross-compiler.</p>
<ul>
<li><strong>Run any distribution anywhere</strong>: decouples hardware support from user distro environments.</li>
<li><strong>Reliable</strong>: minimal read-only host system for unbreakable boot-ups and over-the-air updates.</li>
<li><strong>Reproducible</strong>: offline builds, pinned package versions, source-controlled custom configs.</li>
</ul>
<p>Configuration packages are merged together to configure the system:</p>
<ul>
<li>SKIFF_CONFIG=pi/4,core/debian - run Debian desktop on a Raspberry Pi 4.</li>
<li>SKIFF_CONFIG=odroid/xu4,core/fedora - run Fedora desktop on a Odroid XU4.</li>
<li>SKIFF_CONFIG=virt/qemu,custom/config - run a custom config in a Qemu VM.</li>
</ul>
<p>There is a <a href="https://github.com/skiffos/skiff-ext-example">project template</a> you can use for version-controlled customizations.</p>
<p>Linux devices have varying requirements for kernel, firmware, and other hardware support packages. SkiffOS decouples this support from the containerized environments. The containers are portable across devices with the same CPU architecture, while ordinary OS images (Board Support Packages) are not.</p>
<p>Supports <a href="https://linux-hardware.org/index.php?d=SkiffOS">any Linux-compatible computer</a>, ranging from <a href="https://linux-hardware.org/?probe=c3d8362f28">RPi</a>, <a href="https://linux-hardware.org/?probe=927be03a24">Odroid</a>, <a href="https://linux-hardware.org/?probe=184d1b1c05">NVIDIA Jetson</a>, to <a href="https://linux-hardware.org/?probe=267ab5de51">Desktop PCs</a>, Laptops (i.e. <a href="https://linux-hardware.org/?probe=6dc90bec41">Apple MacBook</a>), <a href="https://linux-hardware.org/?probe=329e6f9308">Phones</a>, <a href="https://imgur.com/a/PXCYnjT">Cloud VMs</a>, and even <a href="https://copy.sh/v86/?profile=copy/skiffos">Web Browsers</a>.</p>
<p>---</p>
<p>This release corresponds to Buildroot 2026.05.</p>
<p>Highlights:</p>
<ul>
<li><strong>virt/wasm</strong>: New WebAssembly userspace config targeting the wasivm Go kernel</li>
<li><strong>browser/v86min</strong>: New minimal in-browser v86 image with BusyBox init and a stripped kernel</li>
<li><strong>core/libreelec</strong>: New LibreELEC Generic x86_64 core config</li>
<li><strong>core/jellyfin</strong>: New Jellyfin media server core config</li>
<li><strong>util/hardened</strong>: New layer enabling upstream Linux kernel hardening</li>
<li><strong>skiff/core</strong>: skiff-core v1.15.0, sftp subsystem routing, and a host D-Bus bridge</li>
<li><strong>configs-base</strong>: Update kernel to 7.1.3, GCC 15, and binutils 2.46</li>
<li><strong>buildroot</strong>: Update to 2026.05 and Go 1.26.x</li>
<li><strong>apps/podman</strong>: Removed; use apps/docker or apps/crio</li>
</ul>
<p>Fixes and improvements:</p>
<ul>
<li>pi/common: bump kernel to rpi-6.18.y (6.18.42) (<a href="https://github.com/skiffos/SkiffOS/commit/5258e292">5258e292</a>)</li>
<li>configs-base: preserve udev seat tags without host logind (<a href="https://github.com/skiffos/SkiffOS/commit/b9cd5ced">b9cd5ced</a>)</li>
<li>skiff/core: bump skiff-core to v1.15.0 (<a href="https://github.com/skiffos/SkiffOS/commit/bbf33053">bbf33053</a>, <a href="https://github.com/skiffos/SkiffOS/commit/e2a1d905">e2a1d905</a>)</li>
<li>skiff/core: route sftp subsystem into the core container (<a href="https://github.com/skiffos/SkiffOS/commit/22f7b4ab">22f7b4ab</a>)</li>
<li>skiff/core: bridge allowlisted host D-Bus services (<a href="https://github.com/skiffos/SkiffOS/commit/2523634a">2523634a</a>)</li>
<li>configs-base: update kernel through the 6.18.x, 6.19.x, 7.0.x, and 7.1.x series (<a href="https://github.com/skiffos/SkiffOS/commit/1e7c4e62">1e7c4e62</a>, <a href="https://github.com/skiffos/SkiffOS/commit/68934ab5">68934ab5</a>, <a href="https://github.com/skiffos/SkiffOS/commit/3091287c">3091287c</a>, <a href="https://github.com/skiffos/SkiffOS/commit/a16756dc">a16756dc</a>)</li>
<li>buildroot: fix NetworkManager initrd and target modprobe paths (<a href="https://github.com/skiffos/SkiffOS/commit/c21ae9df">c21ae9df</a>, <a href="https://github.com/skiffos/SkiffOS/commit/f06fdd7a">f06fdd7a</a>, <a href="https://github.com/skiffos/SkiffOS/commit/8afe3c80">8afe3c80</a>)</li>
<li>configs-base: force online root resize via resize2fs -o (<a href="https://github.com/skiffos/SkiffOS/commit/aa040c01">aa040c01</a>)</li>
<li>configs-base: fix persist label device matching (<a href="https://github.com/skiffos/SkiffOS/commit/66358f7b">66358f7b</a>)</li>
<li>configs-base: show boot status on tty1 (<a href="https://github.com/skiffos/SkiffOS/commit/6db39e72">6db39e72</a>)</li>
<li>util/hardened: add Linux hardening config (<a href="https://github.com/skiffos/SkiffOS/commit/3d056670">3d056670</a>)</li>
<li>apps/docker: enable the containerd snapshotter safely and move Docker networking out of configs-base (<a href="https://github.com/skiffos/SkiffOS/commit/ee19c9aa">ee19c9aa</a>, <a href="https://github.com/skiffos/SkiffOS/commit/28228769">28228769</a>)</li>
<li>virt/wsl: preserve Windows PATH entries (<a href="https://github.com/skiffos/SkiffOS/commit/944c4761">944c4761</a>)</li>
<li>core/nixos: add architecture compatibility checks and drop a missing hardware config import (<a href="https://github.com/skiffos/SkiffOS/commit/218ce9ee">218ce9ee</a>, <a href="https://github.com/skiffos/SkiffOS/commit/1b8e4e5a">1b8e4e5a</a>)</li>
<li>core/jellyfin: add Jellyfin media server config (<a href="https://github.com/skiffos/SkiffOS/commit/8c624d6c">8c624d6c</a>)</li>
<li>core/libreelec: add LibreELEC core config (<a href="https://github.com/skiffos/SkiffOS/commit/19a0fa74">19a0fa74</a>, <a href="https://github.com/skiffos/SkiffOS/commit/31548019">31548019</a>)</li>
<li>pi/common: support large-disk formatting (<a href="https://github.com/skiffos/SkiffOS/commit/a51a55d3">a51a55d3</a>)</li>
<li>pi/0: use installed firmware filenames (<a href="https://github.com/skiffos/SkiffOS/commit/ba234c07">ba234c07</a>)</li>
<li>pi/common: drop removed RPI_USERLAND and vcdbg references (<a href="https://github.com/skiffos/SkiffOS/commit/a8587fd4">a8587fd4</a>, <a href="https://github.com/skiffos/SkiffOS/commit/586278fe">586278fe</a>)</li>
<li>browser/v86: update to the forked 7.1-v86 kernel, add v86 filesystem and virtio memory support, and enable SSE3 (<a href="https://github.com/skiffos/SkiffOS/commit/549e99ae">549e99ae</a>, <a href="https://github.com/skiffos/SkiffOS/commit/1e3e34fa">1e3e34fa</a>, <a href="https://github.com/skiffos/SkiffOS/commit/07450476">07450476</a>, <a href="https://github.com/skiffos/SkiffOS/commit/d332278a">d332278a</a>)</li>
<li>browser/v86min: add and optimize the minimal browser image (<a href="https://github.com/skiffos/SkiffOS/commit/451b89c5">451b89c5</a>, <a href="https://github.com/skiffos/SkiffOS/commit/442123b3">442123b3</a>, <a href="https://github.com/skiffos/SkiffOS/commit/7f6a5e42">7f6a5e42</a>, <a href="https://github.com/skiffos/SkiffOS/commit/0d5946e0">0d5946e0</a>)</li>
<li>browser/v86min: enable the codex root filesystem (<a href="https://github.com/skiffos/SkiffOS/commit/7e864fcb">7e864fcb</a>)</li>
<li>virt/wasm: add a wasm32 userspace config using the wasi-sdk toolchain (<a href="https://github.com/skiffos/SkiffOS/commit/97d2ac9f">97d2ac9f</a>, <a href="https://github.com/skiffos/SkiffOS/commit/f8c78107">f8c78107</a>, <a href="https://github.com/skiffos/SkiffOS/commit/b5f2ce9b">b5f2ce9b</a>)</li>
<li>buildroot: add wasm32 and BusyBox patches (<a href="https://github.com/skiffos/SkiffOS/commit/fde50c91">fde50c91</a>, <a href="https://github.com/skiffos/SkiffOS/commit/4de7c415">4de7c415</a>, <a href="https://github.com/skiffos/SkiffOS/commit/8eef6152">8eef6152</a>)</li>
<li>configs-base: update to GCC 15 and binutils 2.46 (<a href="https://github.com/skiffos/SkiffOS/commit/598c9241">598c9241</a>, <a href="https://github.com/skiffos/SkiffOS/commit/506046e9">506046e9</a>)</li>
<li>configs-base: drop old systemd patches and add SquashFS Zstandard support (<a href="https://github.com/skiffos/SkiffOS/commit/9acf91f3">9acf91f3</a>, <a href="https://github.com/skiffos/SkiffOS/commit/4a2d4348">4a2d4348</a>)</li>
<li>bananapi/common: update U-Boot to 2025.10 (<a href="https://github.com/skiffos/SkiffOS/commit/dfc57b42">dfc57b42</a>)</li>
<li>apps/podman: remove the package config (<a href="https://github.com/skiffos/SkiffOS/commit/26a5a9e4">26a5a9e4</a>)</li>
<li>buildroot: fix BusyBox and Buildah (<a href="https://github.com/skiffos/SkiffOS/commit/7eaae7fb">7eaae7fb</a>)</li>
<li>Makefile: default TERM to xterm for non-interactive SSH (<a href="https://github.com/skiffos/SkiffOS/commit/a9d13aef">a9d13aef</a>)</li>
<li>ci: publish the QEMU image artifact (<a href="https://github.com/skiffos/SkiffOS/commit/acb7afd8">acb7afd8</a>)</li>
<li>docs: add LibreELEC quickstart, core config links, and Pi USB gadget networking documentation (<a href="https://github.com/skiffos/SkiffOS/commit/2506a50b">2506a50b</a>, <a href="https://github.com/skiffos/SkiffOS/commit/ba9a4987">ba9a4987</a>, <a href="https://github.com/skiffos/SkiffOS/commit/8dc03343">8dc03343</a>)</li>
<li>buildroot: update to upstream (<a href="https://github.com/skiffos/SkiffOS/commit/905570d8">905570d8</a>, <a href="https://github.com/skiffos/SkiffOS/commit/d7c05a29">d7c05a29</a>)</li>
</ul>
<p><strong>Full Changelog</strong>: https://github.com/skiffos/SkiffOS/compare/2026.01...2026.08</p>