Due to a quirk in the case-sensitivity of WSL's filesytem, installations of the `build-essential` package (which contains C/C++ compilers and other things you'll need for installing Python, Bazel, etc) fail due to files "already existing". What's actually happening is that files with the same name but *different casing* already exist. I think this issue is fixed in newer versions of Windows, but for now you can circumvent the issue by leaving out the different-cased files. Obviously things will start going wrong if you try to compile something that relies on the different casing, but this solution should at least be workable for a while. These commands will need to be run as a superuser ``` apt update apt install build-essential # will fail dpkg \ --path-exclude=/usr/include/linux/netfilter/xt_{TCPMSS,DSCP,CONNMARK,RATEEST,MARK}.h \ --path-exclude=/usr/include/linux/netfilter_ipv6/ip6t_HL.h \ --path-exclude=/usr/include/linux/netfilter_ipv4/ipt_{ECN,TTL}.h \ -i /var/cache/apt/archives/linux-libc-dev_*.deb apt install ``` **NB**: For the same reason, you should `apt-mark hold libpam-runtime` before doing an `apt upgrade` if you don't want things to break in a way that's really hard to fix.