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 Files which only live on the stack but hold a resource.
  • 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.