[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[MirageOS-devel] Rust unikernels


A chat on Twitter showed some interest in unikernels developed in
Rust, and I was pointed here for further discussion.

First, I want to acknowledge the amazing work done on MirageOS by
everybody here. I have followed it from afar for some time, and there
has been great progress to make it available and usable.

Second, I know making a unikernel system means years of work and a
team of developers and testers. I am not planning to attempt it alone.
What I want is to sort out the skills needed, the big pitfalls, the
important milestones, and know about the unknown unknowns. Then push
for that project in the Rust community.

From the beginning, people experimented with OS development in Rust
(cf https://github.com/ryanra/RustOS
https://github.com/thepowersgang/rust-barebones-kernel or
https://github.com/charliesome/rustboot ). There is also a very active
IRC channel, #rust-osdev on irc.mozilla.org

From what I understand, the bare minimum to experiment would be an OS
booting and communicating with a network card, scheduling and task
switching, remote debugging, a network stack. Also, tools to help in
building, deploying and testing applications.
The ryanra/RustOS project seems well advanced, but it could use a network stack.

A rough plan could be to take that project and:
- strenghten the rtl8139 driver
- write parsers and serializers for ARP, IP, TCP (it looks like
MirageOS does not even need DHCP, since the IP address is passed at
compilation time, is that right?). This is something I am already
pushing for a parser combinators project I launched (
https://github.com/Geal/nom )
- building the API above that network stack
- the system can be monotask at first, but preemtive threading should
happen at some point
- a part of Rust standard library is already available, I do not know
how much is needed to support the use case of a HTTP server
- building monitoring tools inside the kernel
- building a testing infrastructure

These steps look quite naive, but as I said, that's a very rough plan
for something that could take years. As for the skills needed:
- writing drivers and schedulers
- developing network stacks (there are projects like
https://github.com/libpnet/libpnet which could be integrated)
- implementing Rust libstd APIs
- testing and tooling industrialization

What would you think of this project? What would increase its chances
of success? Which steps will be very difficult?

It could really benefit from Mirage's experience :)


Geoffroy Couprie

MirageOS-devel mailing list



Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.