Windows Kernel-Mode Drivers Written in Rust
github.com
github.com
So, my suggestion for production by Rust developers is to simultaneously develop the driver in Rust and a C subset. Keep the two logically equivalent. Rust's checker will catch problems in C program possibly. More importantly, Microsoft's analysis tools will probably catch problems in both if it's a logical error. Should result in some pretty robust drivers.
https://msdn.microsoft.com/en-us/library/windows/hardware/ff...
One of the more successful cases of research out of Microsoft Research making it into production use in regular-Microsoft.
I'm keeping the page in case I field Rust stuff as it's a nice list of things to look for. Not just for this tool but other developers applying CompSci solutions to Rust. They'll need a list of issues to encode in those.
[1]: http://research.microsoft.com/en-us/news/features/prefast.as... [2]: https://msdn.microsoft.com/en-us/library/windows/hardware/ff...
https://msdn.microsoft.com/en-us/library/windows/hardware/ff...
Basically, there's an additional step after compilation, called code analysis, which runs this static verification. I think it's implemented on top of the Z3 theorem prover.
https://msdn.microsoft.com/en-us/library/windows/hardware/ff...
I've seen it come up a lot for various reasons related to rust so maybe someone will do the work. I think most of the reasons you'd want a C backened could be solved better just by extending the compiler, but not this case (closed source c-only utility).
SDV uses model checking and symbolic execution. its exploration is partial. the guarantees you get from the rust type checker are much stronger.
the real trick would be, could you represent the contract between the kernel and drivers as rust types. if you could, then you don't need SDV, you just need the rust type checker.
Edit: Another way to look at it is that software verification tools find proofs for properties, while type checkers only verify proofs (given as the program structure and type annotations).
Like, you can't determine the halting problem for a turing complete language, but you can for s more restricted language.
However, the feedback loop for debugging drivers on Windows seems quite manual (https://msdn.microsoft.com/en-us/library/windows/hardware/mt...). On Linux I'd have SSH at my disposal - are there any best practices for speeding up this copy/install process? Cygwin sshd could be an option, off the top of my head?
[1] https://blog.jourdant.me/ps-installing-drivers-from-untruste...
[2] https://technet.microsoft.com/en-us/library/dd819505.aspx
I'd wager you could do something similar with D (soon if not now), since its no-std support is catching up w/Rust's.
I used it to create a few Fallout 4 mods[2]. Avoiding the stdlib was not necessary there, but I didn't want the bloat. One interesting application of D's metaprogramming has been automatically recursively instrumenting the DirectX COM API just from the D interface definitions[3] (not IDLs).
[1]: https://github.com/CyberShadow/SlimD
[2]: https://github.com/CyberShadow/csfo4
[3]: https://github.com/CyberShadow/csfo4/blob/master/dxlog/d3d11.dThey have stated multiple times that C++ is the way forward for systems programming on Windows.
https://herbsutter.com/2012/05/03/reader-qa-what-about-vc-an...
The new C runtime library was re-written in C++ with extern "C" for the entry points.
https://blogs.msdn.microsoft.com/vcblog/2014/06/10/the-great...
Vista introduced support for C++ in the kernel
https://msdn.microsoft.com/en-us/library/jj620896(v=vs.110)....
For example many of the new APIs were COM based, not plain C like ones.
Not that that matters in the context of writing a kernel driver, mind you...
But core of NT is stable since 3.1 (1993) and even there are structures which are dated 1989 (e.g. [FILE_OBJECT](https://msdn.microsoft.com/en-us/library/windows/hardware/ff...).
Microsoft do have some sample drivers that are written in C++, e.g. https://github.com/Microsoft/Windows-driver-samples/tree/mas...
[0]: https://github.com/Microsoft/Windows-Driver-Frameworks/tree/...
Besides that, the WDF source is available under a MIT license, so it might make more sense to just port it to Rust.