Category:Unikraft Devel

From Xen
Jump to: navigation, search

Unikraft Development

First off, welcome to the project and thanks so much for your interest! Most of the information you'll need about how to develop for Unikraft you'll find in the main repo's docs directory [1]. We'll use this space mainly to give information about what the core team is currently working on, and to give suggestions about what we would like to have in Unikraft but haven't had the time to work on yet in case you're looking for ideas. We will also post information about past and upcoming releases.

Submitting Code, Asking Questions

In general, submitting code follows the patterns as outlined in

Release Plan

The current idea is to release under 0.x versions until we reach a stable low-level platform and architecture API. Although libraries might be added, the focus is on the low-level API. During the 0.x release everyone should expect reorganizations and changes of these interfaces. During this cycle, a major goal is also to add more platforms and architectures (e.g., ARM64, VMware) - this helps us defining the low-level APIs properly.

Starting from version 1.0 we expect an almost stabilized platform and architecture API. No major changes should be expected on existing interfaces, new APIs might still be added. The focus of this release series will be on adding functionality and variety with libraries.

The codenames are settled on Saturn moons ordered by discovery date [2]. This means, the release after Titan will be called Iapetus, then Rhea, and so on.

Current Work Items

The following items are on the development plan of the core team and community. You can contact us on the mailing list minios-devel@ or on our #unikraft IRC channel if you have questions.

Feature Completion

  • Memory setup on Xen on ARM
  • Scheduling support for Xen, KVM, LinuxU and x86, ARM
  • Event/Interrupt support (KVM, LinuxU)
  • Reorganization of architecture + platform API (improved separation and placement of functionality)

Upcoming features

  • Preemptive scheduler
  • Device bus abstraction
    • Support for Xenbus on Xen
    • Support for PCI on KVM
  • Network device abstraction
    • Support for netfront on Xen
    • Support for virtio-net on KVM
    • Support for tapdev on LinuxU
  • lwIP Network Stack port
  • libpython (i.e., turning Python/cpython into a Unikraft library)
  • ARM64 support
    • Xen
    • KVM
  • Console support on Xen on ARM
  • Port of BSD's network stack
  • Minimalistic Shell library

Candidates for Google Summer of Code

The following items were chosen for Outreachy 2018:

  • High-level language support (e.g., ocaml, Ruby, node.js, lua)
  • More supported platforms
    • Bare metal platform target (x86_64 or ARM32 initially)
    • More hypervisors: Hyper-V, bhyve, vmWare, etc.
  • Enhanced profiling and tracing support

Open Work Items

If you're thinking of contributing to Unikraft please drop us a line on minios-devel@ or on our #unikraft IRC channel on freenode.

To our knowledge, no one is working on the following items, so you can pick one. You are also free to suggest your own one. We welcome any discussions.

  • Enhance dependency selection with kconfig (e.g., add unselect, add recursive select/unselect)
  • Suspend/Resume support for Xen
  • Multi-vCPUs support
  • VFS/Filesystem support
    • Probably starting with in-memory with initramdisk
    • 9pfs on KVM and Xen, syscalls directly on LinuxU
  • Memory ballooning support for all platforms
  • SSH capabilties for shells
  • Support for fast networking I/O frameworks (e.g., DPDK [3], netmap [4])
  • Automated Unit testing
  • Stubdomains with Unikraft
  • Xenstore Domain with Unikraft

This category currently contains no pages or media.