> For the complete documentation index, see [llms.txt](https://docs.enclaive.cloud/sylica/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.enclaive.cloud/sylica/documentation/getting-started/launch-a-conventional-x86-vm.md).

# Launch a conventional x86 VM

{% hint style="info" %}
For ready-to-use Linux boot artifcats including Universal Kernel Images and Initrd for attestable boot, see [Buckypaper](broken://spaces/JCiJp92CK5rDzO9DECIa).
{% endhint %}

## Step-by-step Guide

`sylica-x86` is the easiest way to start using CVMF.

It does not require AMD SEV-SNP or Intel TDX.

Use it when you want Sylica firmware on a conventional x86 virtual machine.

```
Linux host
    │
    ▼
KVM/QEMU
    │
    ▼
sylica-x86
    │
    ▼
CVMF.fd
    │
    ▼
Guest operating system
```

The benefit of `sylica-x86` is not confidential memory. It provides Sylica's controlled, reproducible, and reduced firmware computing base for ordinary VMs.

### Launch

Set the path to the firmware:

```bash
CVMF=~/cvmf/sylica-x86/CVMF.fd
```

Start the VM:

```bash
qemu-system-x86_64 \
    -enable-kvm \
    -machine q35 \
    -cpu host \
    -smp 4 \
    -m 4G \
    -bios "$CVMF" \
    -kernel "$UKI$" \
    -initrd "$INITRD$" \
    -device virtio-net-pci,netdev=net0 \
    -netdev user,id=net0
```

This creates:

```
4 virtual CPUs
4 GiB RAM
Q35 machine
VirtIO disk
VirtIO network
CVMF UEFI firmware
```

After the operating system has been installed, launch it with:

```bash
qemu-system-x86_64 \
    -enable-kvm \
    -machine q35 \
    -cpu host \
    -smp 4 \
    -m 4G \
    -bios "$CVMF" \
    -kernel "$UKI$" \
    -initrd "$INITRD$" \
    -device virtio-net-pci,netdev=net0 \
    -netdev user,id=net0
```

### Headless operation

For a server VM, add:

```bash
-nographic
```

For example:

```bash
qemu-system-x86_64 \
    -enable-kvm \
    -machine q35 \
    -cpu host \
    -smp 4 \
    -m 4G \
    -bios "$CVMF" \
    -kernel "$UKI$" \
    -initrd "$INITRD$" \
    -device virtio-net-pci,netdev=net0 \
    -netdev user,id=net0 \
    -nographic
```

The guest operating system must have a serial console configured if you want to interact with it through `-nographic`.
