Languages with type-safety and memory-safety normally require complex runtimes that are unsuited for low-level systems programming. C and assembly language provide the control needed for low-level development, but at the cost of safety. In contrast, Rust uses linear types to permit writing safe and performant code without a runtime, while still providing the control of C.
Through the construction of an operating system, we explore using Rust to separate safe, well-defined code from the unsafe, low-level code required for an operating system. We describe the factors that, in our experience with the x86 architecture, necessitate unsafe operation and classify these factors into four categories to support further research.