Hackathon

Unikraft Summer of Code 2021 (USoC'21) finalizes with an 8 hour hackathon on Saturday, September 4, 2021, 9am CEST - 5pm CEST.

Teams of 3-4 participants will work on adding tests, adding metrics, port libraries, port applications and fix issues in Unikraft components. Each hackathon challenge will get your team points, depending on the difficulty. The top three teams will be awarded the most prestigious USoC badges:

Challenges are listed below. You solve a challenge:

Points listed in challenges are a rough indication of difficulty. It is possible to solve more than one challenge and earn all points from all challenges solved.

Additional points will be awarded for:

  • Signing off your commits with git commit -s, as part of Developer Certificate of Origin (1 point per commit) (note, teams of multiple people should have multiple sign-offs);
  • Every commit should include a precise explanation of the changes made (1 point per commit);
  • Every commit of the solution should leave the project in a working state (2 points per commit).

Challenges

1. New uktest Suites, Cases & Expectations

IDPointsShort description
uktest-entries1 point per *EXPECT*Use uktest to add new tests in Unikraft components.

Description

In this challenge, introduce new test suites, cases and assertions/expects in the Unikraft core repository. New tests should be introduced as new files under a new directory tests/ of internal microlibraries. For example, for vfscore, a new directory will be located at libs/vfscore/tests/.

To create a suite, such as for stat() in vfscore, introduce a new file test_stat.c where you register the suite, cases and create expectations from the stat() syscall provided by vfscore. Expectations and tests can usually be checked by programming different scenarios and checking whether the return code or errno is set correctly. Check out the relevant POSIX document for the function in question.

Every new *_EXPECT_* test assertion will receive 1 point.

  • uktest: Unikraft’s testing framework

2. Fix Build Warnings

IDPointsShort description
fix-warnings1 point per warningFix build warnings in Unikraft components.

Description

In this challenge, fix compiler warnings during builds of internal Unikraft libraries. (There may be other warnings in other Unikraft repositories.)

Every warning (1 line) will receive 1 point.


3. Add ukstore Entries

IDPointsShort description
ukstore-entries1 point per entryAdd new ukstore entries.

Description

ukstore is a new internal library for storing and retrieving information, such as statistics or state. Introduce new counters, stats, or states via ukstore in other libraries that generate information.


3. Add new unit tests to kraft

IDPointsShort description
kraft-unit-tests1 point per testAdd new tests in kraft.

Description

kraft is a Python-based toolchain and acts as the companion tool for managing, configuring, building and running Unikraft unikernels. It has very limited unit tests. In this challenge, add more unit tests to kraft


4. Run Django on Unikraft

IDPointsShort description
app-django10 pointsRun Django on top of lib-python3.

Description

Create a new Python 3 application based on the Django web framework. Serve a simple HTTP response and run this via lib-python3. Create a relevant kraft.yaml file with corresponding required KConfig values. A user should be able to run the project via:

kraft list add https://github.com/$USERNAME/app-django.git
kraft list update
kraft init -t django@staging ./my-django-app

5. Run Flask on Unikraft

IDPointsShort description
app-flask10 pointsRun Flask on top of lib-python3

Description

Create a new Python 3 application based on the Flask web framework. Serve a simple HTTP response and run this via lib-python3. Create a relevant kraft.yaml file with corresponding required KConfig values. A user should be able to run the project via:

kraft list add https://github.com/$USERNAME/app-flask.git
kraft list update
kraft init -t flask@staging ./my-flask-app

6. Run Ruby on Rails on Unikraft

IDPointsShort description
app-rails15 pointsRun Ruby on Rails on top of lib-ruby.

Description

Create a new Ruby application based on the Ruby on Rails web framework. Serve a simple HTTP response and run this via lib-ruby. Create a relevant kraft.yaml file with corresponding required KConfig values. A user should be able to run the project via:

kraft list add https://github.com/$USERNAME/app-rails.git
kraft list update
kraft init -t rails@staging ./my-rails-app

7. Port PHP to Unikraft

IDPointsShort description
lib-php25 pointsPort PHP as a Unikraft library.

Description

Port the interpreted language runtime PHP so it can be run on top of Unikraft. Create a matching application component, so a simple PHP program can be run via Unikraft. A user should be able to run the project via:

kraft list add https://github.com/$USERNAME/app-php.git
kraft list update
kraft init -t php@staging ./my-php-app

8. Port Postgres to Unikraft

IDPointsShort description
lib-postgres25 pointsPort Postgres as a Unikraft library.

Description

Port the object-relational database program Postgres so it can run as a Unikraft unikernel. Create a matching application component. A user should be able to run the project via:

kraft list add https://github.com/$USERNAME/app-postgres.git
kraft list update
kraft init -t postgres@staging ./my-postgres-app

9. Port MySQL to Unikraft

IDPointsShort description
lib-mysql25 pointsPort MySQL as a Unikraft library.

Description

Port the relational database program MySQL so it can run as a Unikraft unikernel. Create a matching application component. A user should be able to run the project via:

kraft list add https://github.com/$USERNAME/app-mysql.git
kraft list update
kraft init -t mysql@staging ./my-mysql-app

10. Port Tinyproxy to Unikraft

IDPointsShort description
lib-tinyproxy25 pointsPort Tinyproxy as a Unikraft library.

Description

Tinyproxy is a fast HTTP/HTTPS server. Port this as a new library and application to Unikraft. A user should be able to run the project via:

kraft list add https://github.com/$USERNAME/app-tinyproxy.git
kraft list update
kraft init -t tinyproxy@staging ./my-tinyproxy-app

11. Port Bjoern to Unikraft

IDPointsShort description
lib-bjoern25 pointsPort Bjoern as a Unikraft library.

Description

Bjoern is a fast And ultra-lightweight HTTP/1.1 WSGI Server. Port this as a new library and application to Unikraft. A user should be able to run the project via:

kraft list add https://github.com/$USERNAME/app-bjoern.git
kraft list update
kraft init -t bjoern@staging ./my-bjoern-app

12. Lua Telnet shell

IDPointsShort description
lua-telnet10 pointsMake use of lib-lua and add telnet server

Description

Telnet is a protocol for doing bi-directional text communication. Create a simple telnet server on top of the Lua language and run it on Unikraft.


13. Port Memcached to Unikraft

IDPointsShort description
lib-memcached25 pointsPort memcached as a Unikraft library.

Description

memcached is a general purpose key-value store. Port this as a new library and application to Unikraft. A user should be able to run the project via:

kraft list add https://github.com/$USERNAME/app-memcached.git
kraft list update
kraft init -t memcached@staging ./my-memcached-app

14. Rewrite a Unikraft Internal Library in Rust

IDPointsShort description
internal-rust25 points per libraryRewrite an internal Unikraft Library in Rust.

Description

Rust is proving itself to be a type-safe, fast language suitable for the kernel. Use the newly added capabilities of compiling Rust with Unikraft to re-write an internal library. A successful port of an internal library, e.g. vfscore to vfscore-rs, should work as the original is expected.

Additional points will be awarded for benchmarks.


15. Port PicoTCP to Unikraft

IDPointsShort description
lib-picotcp25 pointsPort PicoTCP to Unikraft.

Description

PicoTCP is a TCP/IP stack written in C. Port this as an alternative to LwIP so it can be used with other network-based applications built with Unikraft. A successful port will allow the user to replace LwIP completely with PicoTCP.


16. Fix an Open Bug in the Core

IDPointsShort description
bug-fixDepends on bug, contact TA.Fix an internal bug in the core.

Description

There are a number of outstanding issues/bugs with the Unikraft core repository. To help increase the stability and solve problems for edge cases and other issues, solve an open issue that has been reported.


Last modified September 4, 2021: Fix ukstore link and add more resources (18c8d7c)