# Additional setup for Windows (experimental)

These are experimental instructions build and run
the Flutter embedder on [WSL2](https://docs.microsoft.com/en-us/windows/wsl/install)
in Windows. They are experimental instructions because we don't regularly test this workflow.
If you encounter an issue, please file a bug at https://bugs.fuchsia.dev.

These instructions assume you are using WSL's built-in version of Ubuntu.

1. Follow https://boxofcables.dev/kvm-optimized-custom-kernel-wsl2-2022/ to make KVM work
   in WSL, which is required for the emulator to work. This requires installing Open SUSE
   but the rest of these instructions assume you are using Ubuntu after you've finished
   building and installing your custom kernel for WSL.
   
2. Install gcc:

   ```sh
   sudo apt install gcc
   ```

3. Install qemu for KVM and give yourself access to KVM:

   ```sh
   sudo apt install qemu-kvm
   sudo chown $USER -R /dev/kvm
   ```

4. Setup [TUN](https://en.wikipedia.org/wiki/TUN/TAP) for qemu:

   ```sh
   sudo tunctl -t qemu -u $USER
   ```

You should now be able to follow the rest of the setup instructions
in the main [README.md](https://fuchsia.googlesource.com/flutter-embedder).