Research Project
Programming
Built a new
VoidBuilder
struct to better align with how creating a void is described in the writing (void.rs).- A new builder describes a complete Linux void. Methods allow you to make it less of a void as you see fit.
- This aligns well with the structure in the write up. Creating a void first then adding only precisely what is needed to it.
- It’s also a much higher level API that’s object oriented. Takes a closure and is easier to reason about than the previous imperative code.
- Leaves room for optimisations such as sharing an empty namespace in the future.
Cleaned up
clone3
to better use stack arguments (clone.rs).- Previously there were some hidden fields in the input argument. In hindsight these should clearly be on the function’s stack.
Solved the file dropping problem.
- Combined this with the new
VoidBuilder
. As it takes a closure rather than control flow, the closure can simply not be dropped in the parent (void.rs#L55-L60). - Anything that has been moved into the closure will now only be dropped in the spawned process - probably the intended behaviour. Kind of messy if you’ve allocated memory to be moved into the closure, but a nice solution for things like
File
s which only live on the stack but hold a resource.
- Combined this with the new
Added CI (Drone).
Benchmarked creating namespaces (benches/clone3.rs). This was initially working quite well but seems to be hitting some limits now. Will need a bit of debugging. I’m still deciding whether to switch to a Jupyter Notebook for this sort of thing, or leave it in Rust/scripts.
Dissertation draft
Less obvious progress this time. I’ve been writing about the features as I’ve been writing the code, so sections like how to create a void have grown quite nicely. I won’t attach a new copy here but the Overleaf link is still valid.
Up Next
The code is in a much better spot now than it was last time. The goal for the next week is to get the example applications completed under this near to final shim.
Add the needed handling to
gzip
to run under the shim.- Edit the source.
- Write a specification.
- Write about it in the write up.
- Create a decent explanatory figure.
Build a TLS server in Rust under the shim.
- Write the server.
- Write a specification.
- Write about it in the write up.
- Create a decent explanatory figure.
Extension: finish the macros for better integration with Rust.
- Write the helper functions alongside the TLS server.
- Design the macros alongside the TLS server.
- Write the macros once it’s already working without.