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:
- 3rd place: the Green Dragon badge
- 2nd place: the Red Dragon badge
- 1st place: the Black Dragon badge
Challenges are listed below. You solve a challenge:
- by submitting a pull request to the corresponding Unikraft repository, or
- by creating a repository for a ported application / library
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
ID | Points | Short description |
---|---|---|
uktest-entries | 1 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.
Links and Additional Resources
- uktest: Unikraft’s testing framework
2. Fix Build Warnings
ID | Points | Short description |
---|---|---|
fix-warnings | 1 point per warning | Fix 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.
Links and Additional Resources
3. Add ukstore Entries
ID | Points | Short description |
---|---|---|
ukstore-entries | 1 point per entry | Add 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.
Links and Additional Resources
- ukstore Library
- Example of adding new
ukstore
entries related toukalloc
- Example of adding new counters to
uknetdev
- Document explaining
ukstore
usage (chapters 1. and 3.)
3. Add new unit tests to kraft
ID | Points | Short description |
---|---|---|
kraft-unit-tests | 1 point per test | Add 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
Links and Additional Resources
4. Run Django on Unikraft
ID | Points | Short description |
---|---|---|
app-django | 10 points | Run 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
Links and Additional Resources
5. Run Flask on Unikraft
ID | Points | Short description |
---|---|---|
app-flask | 10 points | Run 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
Links and Additional Resources
6. Run Ruby on Rails on Unikraft
ID | Points | Short description |
---|---|---|
app-rails | 15 points | Run 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
Links and Additional Resources
7. Port PHP to Unikraft
ID | Points | Short description |
---|---|---|
lib-php | 25 points | Port 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
Links and Additional Resources
8. Port Postgres to Unikraft
ID | Points | Short description |
---|---|---|
lib-postgres | 25 points | Port 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
Links and Additional Resources
9. Port MySQL to Unikraft
ID | Points | Short description |
---|---|---|
lib-mysql | 25 points | Port 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
Links and Additional Resources
10. Port Tinyproxy to Unikraft
ID | Points | Short description |
---|---|---|
lib-tinyproxy | 25 points | Port 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
Links and Additional Resources
11. Port Bjoern to Unikraft
ID | Points | Short description |
---|---|---|
lib-bjoern | 25 points | Port 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
Links and Additional Resources
12. Lua Telnet shell
ID | Points | Short description |
---|---|---|
lua-telnet | 10 points | Make 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.
Links and Additional Resources
13. Port Memcached to Unikraft
ID | Points | Short description |
---|---|---|
lib-memcached | 25 points | Port 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
Links and Additional Resources
14. Rewrite a Unikraft Internal Library in Rust
ID | Points | Short description |
---|---|---|
internal-rust | 25 points per library | Rewrite 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.
Links and Additional Resources
15. Port PicoTCP to Unikraft
ID | Points | Short description |
---|---|---|
lib-picotcp | 25 points | Port 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.
Links and Additional Resources
16. Fix an Open Bug in the Core
ID | Points | Short description |
---|---|---|
bug-fix | Depends 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.
Links
Feedback
Was this page helpful?
Glad to hear it! Please tell us how we can improve.
Sorry to hear that. Please tell us how we can improve.