Try it yourself

From the Devcon 8 talk The Next Centralised Dependency Is Your Bootloader. Every step below is something you can run on your own machine in a few minutes. Nothing here needs an account.

Using an agent? Give it this, and it runs the steps and explains each result:

Read https://try.deboot-efi.eth.link/SKILL.md and walk me through it.

By hand, you need: curl, python3, Foundry (for cast) and an Ethereum RPC (ideally your own node), and podman or docker.

1. Fetch something from Swarm by its hash

On Swarm the address is the hash of the content. This is the package index for a small container:

curl -s https://api.gateway.ethswarm.org/bytes/d6c81eee2505dd19113f1a747ddb073a2388be8b3c618d051fa99f45bfc4e69f

You get an OCI image index: one entry per CPU architecture, each with a sha256 digest and a bzz:// URL. A public gateway is fine for trying it; your own Bee node is the version with nobody in the middle.

2. Read a release record on Ethereum

Releases are also published as ENS records pointing at Swarm. You can read one yourself:

export ETH_RPC_URL=http://your-own-node:8545
NAME=x86-64.deboot-efi.eth
NODE=$(cast namehash $NAME)
RESOLVER=$(cast call 0x00000000000C2E074eC69A0dFb2997BA6C7d2e1e "resolver(bytes32)(address)" $NODE)
cast call $RESOLVER "contenthash(bytes32)(bytes)" $NODE

The answer starts 0xe40101fa011b20, which means "a Swarm reference follows". The 64 hex characters after it are what the machine fetches. Try hello-world.debootd.eth too: that's the container in step 4.

3. docker pull from a registry backed by Swarm

The Swarm Foundation's own registry serves its images out of Swarm. Plain docker or podman, no account (about 120 MB):

docker pull registry.ethswarm.org/ethersphere/bee:2.8.2

There is no latest tag, so name the version. Anyone can run a registry like this for their own images.

4. Run a container with no registry at all

Coming soon: fetch-service is not published yet, so this step can't be run from here today.

Packages are ENS names, images are Swarm references. fetch-service fetches one, checks every blob's size and sha256, and unpacks it:

# get fetch-service (one Python file, stdlib only)
curl -sO FETCH_SERVICE_URL_PENDING

python3 fetch-service 0xe40101fa011b20d6c81eee2505dd19113f1a747ddb073a2388be8b3c618d051fa99f45bfc4e69f \
  -o hello --gateway https://api.gateway.ethswarm.org

podman run -d --rm --network host --rootfs ./hello/rootfs \
  /bin/busybox nc -lk -s 127.0.0.1 -p 18080 -e /bin/busybox sh /respond.sh
curl http://127.0.0.1:18080/

You should see hello from debootd. A machine booted by deboot does exactly this after it boots, under crun, from the name it was told to run.

5. Boot a computer from Swarm

The try stick: download, write it to a USB stick, boot.