  Drivers are written in C or restricted subsets of C++ on all production-grade
server, desktop, and mobile operating systems. They account for 66% of the code
in Linux, but 39 out of 40 security bugs related to memory safety found in
Linux in 2017 are located in drivers. These bugs could have been prevented by
using high-level languages for drivers. We present user space drivers for the
Intel ixgbe 10 Gbit/s network cards implemented in Rust, Go, C#, Java, OCaml,
Haskell, Swift, JavaScript, and Python written from scratch in idiomatic style
for the respective languages. We quantify costs and benefits of using these
languages: High-level languages are safer (fewer bugs, more safety checks), but
run-time safety checks reduce throughput and garbage collection leads to
latency spikes. Out-of-order CPUs mitigate the cost of safety checks: Our Rust
driver executes 63% more instructions per packet but is only 4% slower than a
reference C implementation. Go's garbage collector keeps latencies below 100
$\mu$s even under heavy load. Other languages fare worse, but their unique
properties make for an interesting case study.
  All implementations are available as free and open source at
https://github.com/ixy-languages/ixy-languages.
