DocsReleasesCommunityGuidesBlog

Hackathon Challenges

Listing of hackathon challenges, together with awarded points

Hackathon Challenges#

You've been part of a Unikraft hackathon and you've made it so far. Now the time has come to show the Unikraft world what you are really made of. A true Dragon Slayer!

We've prepared quite a number of challenges for you. Prove your worthiness by passing them and, in doing so, adding your name to the list of hero contributors to the Unikraft project. Each challenge will get you points of valor, dubbed HP (hackathon points), that will be collected in the hackathon scoreboard of valor.

See the items added in the Hackathons GitHub project.

You will get HP for submitting an issue or a solution that works. Solutions are submitted as pull requests. Take some time to learn how to work with Git, and how to open pull requests (PRs) on GitHub. If a pull request is accepted upstream, you get double HP. After solving one challenge, pick another one. We recommend you start small, then move up to more difficult challenges.

Please check the community guidelines on submitting changes and the review process.

Challenge Types#

Challenges generally fall into the categories below. You can venture beyond the challenges in the Hackathons GitHub project.

  1. Submit issues

    Test as many Unikraft applications as you can, with different configuration options (i.e. different architectures, different filesystems, etc.). Use both KraftKit and the Make-based system for building, and both KraftKit and qemu-system for running. Submit any issue you bump into.

    5 HP are awarded for each submitted issue.

  2. Build or extract applications as dynamic PIE binaries and add them to the dynamic-apps repository

    You need to submit a directory, representing the root filesystem of the application, consisting of:

    • the application binary ELF
    • required application dynamic libraries (shared objects)
    • application-specific configuration, data or runtime files
    • a README.md detailing how the application is to be built, configured and run on Linux and on Unikraft; as an example, see the README.md for Python

    These applications aren't required to run on Unikraft in order to do a submission and get HP. If something doesn't work, submit an issue and get HP for that.

    30-50 HP are awarded for each submitted application, depending on its complexity.

  3. Add support for running application with app-elfloader

    Update the run.yaml file inside app-elfloader to add support for existing applications in the dynamic-apps repository. Follow the already existing examples for helloworld and nginx.

    Add a new section to the run.yaml file, that will look like this:

    - name: app-name
    rootfs: path-to-dynamic-apps-app-directory
    command: run-command
    memory: amount of memory needed
    networking: True / False depending on the application

    To test your changes, while inside the app-elfloader directory, first run the generate.py script (./scripts/generate.py). If all went well, find scripts in the scripts/run/ directory named qemu-x86_64-9pfs-<appname>.sh. Build the elfloader by running ./scripts/build/make-qemu-x86_64-9pfs.sh, then run ./scripts/run/qemu-x86_64-9pfs-<appname>.sh to see if the application is working. If the run fails, it might be because of an issue in Unikraft, unrelated to your changes. Submit you pull request anyway to the app-elfloader repository. Also submit an issue with the error to the Unikraft core repository, and get extra HP.

    10 HP are awarded for every added application.

  4. Fix build warning messages

    Use different build environments (different operating systems, different compilers), different targets (different platforms, different architectures) and different configuration options (different filesystems, different library support, debugging options) to configure and build Unikraft applications. If there are build warnings, create a fix and submit a pull request.

    5-10 HP are awarded for each fix.

  5. Update library versions (and make sure the new version builds and runs)

    Unikraft uses multiple external libraries that are required by Unikraft applications to run. These libraries are developed outside Unikraft by other open source communities. Periodically, we want to update the versions used by Unikraft, to benefit from most recent features.

    Steps are:

    1. Choose an external library repository.
    2. Choose the upstream version you want to use, probably the most recent one.
    3. Update the build, configuration and source code files inside it to the updated version.
    4. Test with all Unikraft applications using that library.
    5. Submit changes as a pull request in the library repository.
    6. Get HP.

    20-30 HP are usually awarded for each library update.

  6. Fix issues

    Look for issues in the core unikraft repository or any other repository in the unikraft GitHub organization. Select an issue that intrigues you; it's good to first ask for feedback from the hackathon mentors, to ensure it's feasible to solve the issue during the hackathon. Proceed to work on the issue. Once solved, test it as much as possible. Submit solution as a pull request and get HP.

    HP will be awarded according to the complexity of the fix.

Edit this page on GitHub

Connect with the community

Feel free to ask questions, report issues, and meet new people.

Join us on Discord!
®

Getting Started

What is a unikernel?Install CLI companion toolUnikraft InternalsRoadmap

© 2024  The Unikraft Authors. All rights reserved. Documentation distributed under CC BY-NC 4.0.