Unikraft
      • Sharing URL Link copied
      • /edit
      • View mode
        • Edit mode
        • View mode
        • Book mode
        • Slide mode
        Edit mode View mode Book mode Slide mode
      • Customize slides
      • Note Permission
      • Read
        • Owners
        • Signed-in users
        • Everyone
        Owners Signed-in users Everyone
      • Write
        • Owners
        • Signed-in users
        • Everyone
        Owners Signed-in users Everyone
      • Engagement control Commenting, Suggest edit, Emoji Reply
    • Invite by email
      Invitee

      This note has no invitees

    • Publish Note

      Share your work with the world Congratulations! 🎉 Your note is out in the world Publish Note

      Your note will be visible on your profile and discoverable by anyone.
      Your note is now live.
      This note is visible on your profile and discoverable online.
      Everyone on the web can find and read all notes of this public team.
      See published notes
      Unpublish note
      Please check the box to agree to the Community Guidelines.
      View profile
    • Commenting
      Permission
      Disabled Forbidden Owners Signed-in users Everyone
    • Enable
    • Permission
      • Forbidden
      • Owners
      • Signed-in users
      • Everyone
    • Suggest edit
      Permission
      Disabled Forbidden Owners Signed-in users Everyone
    • Enable
    • Permission
      • Forbidden
      • Owners
      • Signed-in users
    • Emoji Reply
    • Enable
    • Versions and GitHub Sync
    • Note settings
    • Note Insights New
    • Engagement control
    • Make a copy
    • Transfer ownership
    • Delete this note
    • Insert from template
    • Import from
      • Dropbox
      • Google Drive
      • Gist
      • Clipboard
    • Export to
      • Dropbox
      • Google Drive
      • Gist
    • Download
      • Markdown
      • HTML
      • Raw HTML
Menu Note settings Note Insights Versions and GitHub Sync Sharing URL Help
Menu
Options
Engagement control Make a copy Transfer ownership Delete this note
Import from
Dropbox Google Drive Gist Clipboard
Export to
Dropbox Google Drive Gist
Download
Markdown HTML Raw HTML
Back
Sharing URL Link copied
/edit
View mode
  • Edit mode
  • View mode
  • Book mode
  • Slide mode
Edit mode View mode Book mode Slide mode
Customize slides
Note Permission
Read
Owners
  • Owners
  • Signed-in users
  • Everyone
Owners Signed-in users Everyone
Write
Owners
  • Owners
  • Signed-in users
  • Everyone
Owners Signed-in users Everyone
Engagement control Commenting, Suggest edit, Emoji Reply
  • Invite by email
    Invitee

    This note has no invitees

  • Publish Note

    Share your work with the world Congratulations! 🎉 Your note is out in the world Publish Note

    Your note will be visible on your profile and discoverable by anyone.
    Your note is now live.
    This note is visible on your profile and discoverable online.
    Everyone on the web can find and read all notes of this public team.
    See published notes
    Unpublish note
    Please check the box to agree to the Community Guidelines.
    View profile
    Engagement control
    Commenting
    Permission
    Disabled Forbidden Owners Signed-in users Everyone
    Enable
    Permission
    • Forbidden
    • Owners
    • Signed-in users
    • Everyone
    Suggest edit
    Permission
    Disabled Forbidden Owners Signed-in users Everyone
    Enable
    Permission
    • Forbidden
    • Owners
    • Signed-in users
    Emoji Reply
    Enable
    Import from Dropbox Google Drive Gist Clipboard
       Owned this note    Owned this note      
    Published Linked with GitHub
    • Any changes
      Be notified of any changes
    • Mention me
      Be notified of mention me
    • Unsubscribe
    # Release Post - v0.14.0 (Prometheus) :::info To generate the feature list: ```bash gh pr list --label "ci/merged" -s closed --search "milestone:\"v0.14.0 (Prometheus)\"" -L 100 --json author,title,number --template '{{range .}}{{ printf "* %s (#%v) by @%s\n" .title .number .author.login }}{{end}}' ``` To generate the list of reviewers: ```bash git --no-pager log --format="* %(trailers:key=Reviewed-by,valueonly,separator=%x2C )" --abbrev-commit HEAD...RELEASE-0.13.0 | uniq ``` ::: :::danger before submitting, please search the document for "TODO", "commit" ::: :::info Candidate text for the release note: https://github.com/unikraft/unikraft/issues?q=label%3Arelease-note+is%3Aclosed+milestone%3A%22v0.14.0+%28Prometheus%29%22 ::: [toc] ## GitHub Release Note We are proud to announce the latest version of Unikraft, v0.14.0 (Prometheus)! This is one of the biggest releases so far, with tons of fixes and improvements! Here is the full updates list: ### 🚀 New Features * build: Darwin (MacOS) support ([#1034](https://github.com/unikraft/unikraft/pull/1034)) by [@skuenzer](https://github.com/skuenzer) * .github/workflows: Introduce GitHub Actions Workflow integrations ([#1012](https://github.com/unikraft/unikraft/pull/1012)) by [@nderjung](https://github.com/nderjung) * build: Add tree builds ([#1001](https://github.com/unikraft/unikraft/pull/1001)) by [@andreittr](https://github.com/andreittr) * plat/kvm/arm64: Firecracker support on arm64 ([#989](https://github.com/unikraft/unikraft/pull/989)) by [@michpappas](https://github.com/michpappas) * plat/kvm/arm64: Implement lxboot on arm64 ([#988](https://github.com/unikraft/unikraft/pull/988)) by [@michpappas](https://github.com/michpappas) * lib/vfscore: Implement individual volume automounting ([#979](https://github.com/unikraft/unikraft/pull/979)) by [@mogasergiu](https://github.com/mogasergiu) * `lib/uklibid`: Library identifiers and `SUBBUILD` build system feature ([#938](https://github.com/unikraft/unikraft/pull/938)) by [@skuenzer](https://github.com/skuenzer) * build: Allow setting flags from the environment ([#957](https://github.com/unikraft/unikraft/pull/957)) by [@mkroening](https://github.com/mkroening) * Add the ability to build `EFI` `ISO` and `DISK` images. ([#910](https://github.com/unikraft/unikraft/pull/910)) by [@mogasergiu](https://github.com/mogasergiu) * Add `EFI` stub support ([#909](https://github.com/unikraft/unikraft/pull/909)) by [@mogasergiu](https://github.com/mogasergiu) * doc: Introduce `ADOPTERS.md` ([#892](https://github.com/unikraft/unikraft/pull/892)) by [@nderjung](https://github.com/nderjung) * Add PIE support for Xen and KVM ([#772](https://github.com/unikraft/unikraft/pull/772)) by [@mogasergiu](https://github.com/mogasergiu) * Makefile: Add flags for cross-compiler `LLVM` target ([#685](https://github.com/unikraft/unikraft/pull/685)) by [@mariasfiraiala](https://github.com/mariasfiraiala) * [lib-geos] Port upstream libgeos 3.11.2 ([#1](https://github.com/unikraft/lib-geos/pull/1)) by [@andreittr](https://github.com/andreittr) * [lib-libffi] Port upstream libffi 3.4.4 for x86_64 ([#1](https://github.com/unikraft/lib-libffi/pull/1)) by [@andreittr](https://github.com/andreittr) * [lib-fork-glibc] feat: Binary syscall bypass through VDSO ([#1](https://github.com/unikraft/lib-fork-glibc/pull/1)) by [@i-Pear](https://github.com/i-Pear) * [lib-fork-musl] feat: Binary syscall bypass through VDSO ([#1](https://github.com/unikraft/lib-fork-musl/pull/1)) by [@i-Pear](https://github.com/i-Pear) * [lib-python-numpy] Port upstream NumPy 1.25.0 ([#1](https://github.com/unikraft/lib-python-numpy/pull/1)) by [@andreittr](https://github.com/andreittr) * [lib-python-shapely] Port upstream Shapely 2.0.1 ([#1](https://github.com/unikraft/lib-python-shapely/pull/1)) by [@andreittr](https://github.com/andreittr) * [app-elfloader] feat: Provide VDSO image and __kernel_vsyscall interface ([#23](https://github.com/unikraft/app-elfloader/pull/23)) by [@i-Pear](https://github.com/i-Pear) * [catalog] Create initial version of `catalog` repository by [@nderjung](https://github.com/nderjung) ### 🐛 Bug Fixes & Improvements * plat/drivers/virtio: Fix virtio_9p tag read ([#1059](https://github.com/unikraft/unikraft/pull/1059)) by [@zhxj9823](https://github.com/zhxj9823) * lib/posix-environ: Remove unused variable warnings ([#1058](https://github.com/unikraft/unikraft/pull/1058)) by [@mogasergiu](https://github.com/mogasergiu) * plat/kvm/x86: Ensure that lxboot initrd/cmdl regions are aligned ([#1057](https://github.com/unikraft/unikraft/pull/1057)) by [@mogasergiu](https://github.com/mogasergiu) * plat/kvm/arm: Use length when clean/invalidating cache in `KVM` entry ([#1056](https://github.com/unikraft/unikraft/pull/1056)) by [@mogasergiu](https://github.com/mogasergiu) * build: Adjust fixdep to the changed config.h location ([#1055](https://github.com/unikraft/unikraft/pull/1055)) by [@mschlumpp](https://github.com/mschlumpp) * lib/posix-environ: Ensure that compiled-in strings are writable ([#1054](https://github.com/unikraft/unikraft/pull/1054)) by [@mogasergiu](https://github.com/mogasergiu) * plat/kvm/arm: Fix default choice in arm64 VMM menu ([#1053](https://github.com/unikraft/unikraft/pull/1053)) by [@michpappas](https://github.com/michpappas) * plat/kvm: Check return code of all memory region inserting methods ([#1052](https://github.com/unikraft/unikraft/pull/1052)) by [@mogasergiu](https://github.com/mogasergiu) * plat/common: Increase granularity of hardcoded legacy high memory ([#1051](https://github.com/unikraft/unikraft/pull/1051)) by [@mogasergiu](https://github.com/mogasergiu) * plat/common: Align TLS sections to PAGE_SIZE ([#1050](https://github.com/unikraft/unikraft/pull/1050)) by [@mogasergiu](https://github.com/mogasergiu) * plat/kvm/arm: Rework early cache clean & invalidate ([#1049](https://github.com/unikraft/unikraft/pull/1049)) by [@michpappas](https://github.com/michpappas) * plat/kvm: Enable 8250 / NS16550 for Firecracker on arm64 ([#1048](https://github.com/unikraft/unikraft/pull/1048)) by [@michpappas](https://github.com/michpappas) * plat/kvm: Align the bootstack base address ([#1047](https://github.com/unikraft/unikraft/pull/1047)) by [@michpappas](https://github.com/michpappas) * plat/common: Add BIOS system memory in legacy high memory region ([#1046](https://github.com/unikraft/unikraft/pull/1046)) by [@mogasergiu](https://github.com/mogasergiu) * plat/kvm/x86: Enable relocation for `Firecracker` `PIE` builds ([#1045](https://github.com/unikraft/unikraft/pull/1045)) by [@mogasergiu](https://github.com/mogasergiu) * support/qemu-guest: Workaround for TCG/x86 and Unikraft paging ([#1041](https://github.com/unikraft/unikraft/pull/1041)) by [@skuenzer](https://github.com/skuenzer) * plat/kvm: Fix guest hang on `UKPLAT_HALT` during shutdown request ([#1039](https://github.com/unikraft/unikraft/pull/1039)) by [@mogasergiu](https://github.com/mogasergiu) * plat/kvm: Add configuration hint for EFI ([#1038](https://github.com/unikraft/unikraft/pull/1038)) by [@skuenzer](https://github.com/skuenzer) * plat/common/x86: Fix `libukreloc` error for non-`PIE` `SMP` builds ([#1037](https://github.com/unikraft/unikraft/pull/1037)) by [@mogasergiu](https://github.com/mogasergiu) * .github/workflows: Output all unikernel information and log test fails ([#1035](https://github.com/unikraft/unikraft/pull/1035)) by [@craciunoiuc](https://github.com/craciunoiuc) * .github/workflows: Fix missing dependency to `LIBCOMPILER_RT` ([#1033](https://github.com/unikraft/unikraft/pull/1033)) by [@nderjung](https://github.com/nderjung) * lib/nolibc: Fix compiler warning for `(f)scanf()` prototypes ([#1029](https://github.com/unikraft/unikraft/pull/1029)) by [@skuenzer](https://github.com/skuenzer) * Makefile: Include Makefile.build from main Makefile ([#1028](https://github.com/unikraft/unikraft/pull/1028)) by [@skuenzer](https://github.com/skuenzer) * plat/common: Add support for pvpanic devices for x86 ([#1022](https://github.com/unikraft/unikraft/pull/1022)) by [@craciunoiuc](https://github.com/craciunoiuc) * Add ULiège to ADOPTERS.md. ([#1020](https://github.com/unikraft/unikraft/pull/1020)) by [@gaulthiergain](https://github.com/gaulthiergain) * plat/*: Signal shutdown cause on QEMU ([#1019](https://github.com/unikraft/unikraft/pull/1019)) by [@mschlumpp](https://github.com/mschlumpp) * plat/kvm/x86: Fix build error due to missing `assert.h` header ([#1017](https://github.com/unikraft/unikraft/pull/1017)) by [@mogasergiu](https://github.com/mogasergiu) * doc: Add EPAM Systems to the ADOPTERS.md ([#1015](https://github.com/unikraft/unikraft/pull/1015)) by [@oleksiimoisieiev](https://github.com/oleksiimoisieiev) * Add The University of Manchester to ADOPTERS.md ([#1013](https://github.com/unikraft/unikraft/pull/1013)) by [@olivierpierre](https://github.com/olivierpierre) * Makefile: Allow external Makefile.build and Provide GO 1.18 support ([#1005](https://github.com/unikraft/unikraft/pull/1005)) by [@eduardvintila](https://github.com/eduardvintila) * lib/*: Add syscall interfaces for dotnet runtime ([#1004](https://github.com/unikraft/unikraft/pull/1004)) by [@i-Pear](https://github.com/i-Pear) * lib/nolibc: Fix & improve headers ([#1002](https://github.com/unikraft/unikraft/pull/1002)) by [@andreittr](https://github.com/andreittr) * lib/vfscore: Fix create through broken symlink ([#998](https://github.com/unikraft/unikraft/pull/998)) by [@andreittr](https://github.com/andreittr) * lib/ramfs: Support setting file mode on creation ([#997](https://github.com/unikraft/unikraft/pull/997)) by [@andreittr](https://github.com/andreittr) * lib/ramfs: Ensure stability of inode numbers ([#996](https://github.com/unikraft/unikraft/pull/996)) by [@andreittr](https://github.com/andreittr) * lib/ramfs: Implement new file timestamps ([#995](https://github.com/unikraft/unikraft/pull/995)) by [@andreittr](https://github.com/andreittr) * lib/vfscore: Add unlinkat syscall ([#994](https://github.com/unikraft/unikraft/pull/994)) by [@andreittr](https://github.com/andreittr) * lib/vfscore: Correct behavior of utime(NULL) ([#993](https://github.com/unikraft/unikraft/pull/993)) by [@andreittr](https://github.com/andreittr) * lib/ukcpio: Fix symlinks not being extracted ([#992](https://github.com/unikraft/unikraft/pull/992)) by [@andreittr](https://github.com/andreittr) * lib/vfscore: Accept negative timestamps ([#991](https://github.com/unikraft/unikraft/pull/991)) by [@andreittr](https://github.com/andreittr) * lib/vfscore: Fix wrong application of umask ([#990](https://github.com/unikraft/unikraft/pull/990)) by [@andreittr](https://github.com/andreittr) * arch/x86_64: Paging code - Enclose params of function-like macros in brackets ([#987](https://github.com/unikraft/unikraft/pull/987)) by [@cppstef](https://github.com/cppstef) * plat/drivers: Add two configurations to ns16550 ([#985](https://github.com/unikraft/unikraft/pull/985)) by [@zhxj9823](https://github.com/zhxj9823) * plat/drivers/virtio-ring: Downgrade saturated descriptors error ([#984](https://github.com/unikraft/unikraft/pull/984)) by [@mkroening](https://github.com/mkroening) * build: Add compiler version checking for Clang ([#983](https://github.com/unikraft/unikraft/pull/983)) by [@andreittr](https://github.com/andreittr) * plat/kvm/arm: Do not enable interrupts before `wfi` ([#980](https://github.com/unikraft/unikraft/pull/980)) by [@kubanrob](https://github.com/kubanrob) * lib/nolibc: scanf and fscanf functions ([#977](https://github.com/unikraft/unikraft/pull/977)) by [@RaduNichita](https://github.com/RaduNichita) * build: Silence misc warnings ([#976](https://github.com/unikraft/unikraft/pull/976)) by [@andreittr](https://github.com/andreittr) * Fix exporting of ntohs and also include the long versions ([#974](https://github.com/unikraft/unikraft/pull/974)) by [@haesbaert](https://github.com/haesbaert) * plat/drivers/virtio: Fix virtio read write ([#970](https://github.com/unikraft/unikraft/pull/970)) by [@zhxj9823](https://github.com/zhxj9823) * `lib/ukschedcoop`: Keep track of thread execution times ([#965](https://github.com/unikraft/unikraft/pull/965)) by [@skuenzer](https://github.com/skuenzer) * lib/*fs, lib/vfscore: Add proper `dirent/dirent64` structure usage ([#963](https://github.com/unikraft/unikraft/pull/963)) by [@StefanJum](https://github.com/StefanJum) * plat/linuxu: Add fpsimd source file to build system ([#962](https://github.com/unikraft/unikraft/pull/962)) by [@StefanJum](https://github.com/StefanJum) * lib/vfscore: Fix behavior of writable open on directories ([#953](https://github.com/unikraft/unikraft/pull/953)) by [@andreittr](https://github.com/andreittr) * lib/vfscore: Fix double-lock bug in symlink ([#952](https://github.com/unikraft/unikraft/pull/952)) by [@andreittr](https://github.com/andreittr) * lib/vfscore: Reorder locks in *at syscalls ([#951](https://github.com/unikraft/unikraft/pull/951)) by [@andreittr](https://github.com/andreittr) * build: Add minumum required compiler version and fix cpu model and erratas for arm64 ([#949](https://github.com/unikraft/unikraft/pull/949)) by [@StefanJum](https://github.com/StefanJum) * build: Use -fcf-protection for GCC >= 8 or Clang >= 7 ([#944](https://github.com/unikraft/unikraft/pull/944)) by [@Krechals](https://github.com/Krechals) * lib/ukschedcoop: Add early check for runnable thread in idle thread ([#941](https://github.com/unikraft/unikraft/pull/941)) by [@mogasergiu](https://github.com/mogasergiu) * lib/posix-sysinfo: Provide _SC_GETPW_R_SIZE_MAX ([#936](https://github.com/unikraft/unikraft/pull/936)) by [@andreittr](https://github.com/andreittr) * lib/9pfs: Fix create call for 9p.2000L ([#934](https://github.com/unikraft/unikraft/pull/934)) by [@StefanJum](https://github.com/StefanJum) * lib/ukallocbuddy: Add debug freelist sanity checks ([#932](https://github.com/unikraft/unikraft/pull/932)) by [@andreittr](https://github.com/andreittr) * lib/ukalloc: Fix underallocation bug in malloc ([#931](https://github.com/unikraft/unikraft/pull/931)) by [@andreittr](https://github.com/andreittr) * lib/posix-sysinfo: Various improvements needed for OpenJDK support ([#930](https://github.com/unikraft/unikraft/pull/930)) by [@csvancea](https://github.com/csvancea) * lib/ukdebug: Add `LVLC_THREAD` macro ([#929](https://github.com/unikraft/unikraft/pull/929)) by [@StefanJum](https://github.com/StefanJum) * lib/9pfs: Stub uk_9pfs_ioctl ([#928](https://github.com/unikraft/unikraft/pull/928)) by [@razvand](https://github.com/razvand) * doc: Correct docstring format to silence warnings ([#927](https://github.com/unikraft/unikraft/pull/927)) by [@andreittr](https://github.com/andreittr) * arch/x86: Silence warning about incomplete switch ([#926](https://github.com/unikraft/unikraft/pull/926)) by [@andreittr](https://github.com/andreittr) * plat/drivers/virtio: Fix missing lcpu.h include ([#925](https://github.com/unikraft/unikraft/pull/925)) by [@andreittr](https://github.com/andreittr) * lib/uksignal: Use correct kernel struct sigaction ([#924](https://github.com/unikraft/unikraft/pull/924)) by [@andreittr](https://github.com/andreittr) * Fix schedcoop idling and x86 timer interrupts ([#923](https://github.com/unikraft/unikraft/pull/923)) by [@FedeParola](https://github.com/FedeParola) * arch/x86: Introduce NMI event for x86 ([#920](https://github.com/unikraft/unikraft/pull/920)) by [@mschlumpp](https://github.com/mschlumpp) * Add support for setting up `SMP` on `ARM64` through `ACPI` ([#912](https://github.com/unikraft/unikraft/pull/912)) by [@mogasergiu](https://github.com/mogasergiu) * Refactor the `ACPI` code and change its location. ([#911](https://github.com/unikraft/unikraft/pull/911)) by [@mogasergiu](https://github.com/mogasergiu) * Add `ukvmem` `Aarch64` page fault handler ([#908](https://github.com/unikraft/unikraft/pull/908)) by [@mogasergiu](https://github.com/mogasergiu) * arch/arm/arm64: Fix `stxr`'s used in `spinlock`s register size ([#907](https://github.com/unikraft/unikraft/pull/907)) by [@mogasergiu](https://github.com/mogasergiu) * Improve `posix-futex` debugging ([#904](https://github.com/unikraft/unikraft/pull/904)) by [@skuenzer](https://github.com/skuenzer) * fix/eventfd: O_NONBLOCK ([#903](https://github.com/unikraft/unikraft/pull/903)) by [@skuenzer](https://github.com/skuenzer) * lib/vfscore: Improve and fix trace point format ([#899](https://github.com/unikraft/unikraft/pull/899)) by [@mschlumpp](https://github.com/mschlumpp) * lib/ukboot: Allow disabling weak main using KConfig ([#898](https://github.com/unikraft/unikraft/pull/898)) by [@mschlumpp](https://github.com/mschlumpp) * kvm/x86: Add pristine ECTX check ([#897](https://github.com/unikraft/unikraft/pull/897)) by [@mschlumpp](https://github.com/mschlumpp) * Integrate `ukplat_memregion` into `Xen` `x86`, `AArch64` `KVM` and `linuxu` ([#848](https://github.com/unikraft/unikraft/pull/848)) by [@mogasergiu](https://github.com/mogasergiu) * [lib-compiler-rt] Makefile.uk: Remove redundant check for libunwind ([#19](https://github.com/unikraft/lib-compiler-rt/pull/19)) by [@andreittr](https://github.com/andreittr) * [lib-compiler-rt] Split off functionality that relies on libm ([#18](https://github.com/unikraft/lib-compiler-rt/pull/18)) by [@andreittr](https://github.com/andreittr) * [lib-compiler-rt] Build: Split off functionality that depends on libunwind ([#14](https://github.com/unikraft/lib-compiler-rt/pull/14)) by [@andreittr](https://github.com/andreittr) * [lib-googletest] Update to upstream 1.13.0 ([#2](https://github.com/unikraft/lib-googletest/pull/2)) by [@andreittr](https://github.com/andreittr) * [lib-intel-intrinsics] Add compatibility with GCC <= 11.2 & Clang 10 ([#4](https://github.com/unikraft/lib-intel-intrinsics/pull/4)) by [@andreittr](https://github.com/andreittr) * [lib-intel-intrinsics] Rework of x86 intrinsics support ([#3](https://github.com/unikraft/lib-intel-intrinsics/pull/3)) by [@andreittr](https://github.com/andreittr) * [lib-libcxx] Makefile.uk: Add minimum compiler version check ([#33](https://github.com/unikraft/lib-libcxx/pull/33)) by [@andreittr](https://github.com/andreittr) * [lib-libgo] Upgrade Go to 1.18 ([#7](https://github.com/unikraft/lib-libgo/pull/7)) by [@eduardvintila](https://github.com/eduardvintila) * [lib-libuuid] Makefile.uk: Fix subdirectory make rule ([#5](https://github.com/unikraft/lib-libuuid/pull/5)) by [@StefanJum](https://github.com/StefanJum) * [lib-libuuid] Correct libc dependency ([#4](https://github.com/unikraft/lib-libuuid/pull/4)) by [@andreittr](https://github.com/andreittr) * [lib-lua] patches: Remove outdated patch ([#8](https://github.com/unikraft/lib-lua/pull/8)) by [@StefanJum](https://github.com/StefanJum) * [lib-lua] Change newlib dependency with musl ([#7](https://github.com/unikraft/lib-lua/pull/7)) by [@JADarius](https://github.com/JADarius) * [lib-lwip] Makefile.uk: Silence macro redefinition warnings ([#38](https://github.com/unikraft/lib-lwip/pull/38)) by [@andreittr](https://github.com/andreittr) * [lib-musl] Makefile.uk.musl.misc: Add missing ar.h ([#72](https://github.com/unikraft/lib-musl/pull/72)) by [@marcrittinghaus](https://github.com/marcrittinghaus) * [lib-musl] Makefile.uk.musl.exit: Patch for building on case insensitive file systems ([#70](https://github.com/unikraft/lib-musl/pull/70)) by [@Starnox](https://github.com/Starnox) * [lib-musl] Config.uk: Add `uksignal` dependency for `LIBMUSL_SIGNAL` ([#68](https://github.com/unikraft/lib-musl/pull/68)) by [@eduardvintila](https://github.com/eduardvintila) * [lib-musl] patches: Add syscall function prototype ([#67](https://github.com/unikraft/lib-musl/pull/67)) by [@eduardvintila](https://github.com/eduardvintila) * [lib-musl] Makefile.uk: Include missing gettid implementation ([#65](https://github.com/unikraft/lib-musl/pull/65)) by [@andreittr](https://github.com/andreittr) * [lib-musl] Makefile.uk: Include missing cpow* functions ([#64](https://github.com/unikraft/lib-musl/pull/64)) by [@andreittr](https://github.com/andreittr) * [lib-musl] patches: Delete patching of `ioctl` call in `isatty` ([#62](https://github.com/unikraft/lib-musl/pull/62)) by [@mogasergiu](https://github.com/mogasergiu) * [lib-musl] Makefile.uk: Silence warnings ([#61](https://github.com/unikraft/lib-musl/pull/61)) by [@andreittr](https://github.com/andreittr) * [lib-musl] Initialize main thread pthread structure ([#59](https://github.com/unikraft/lib-musl/pull/59)) by [@alexhoppus](https://github.com/alexhoppus) * [lib-musl] Include missing parts of the string library ([#55](https://github.com/unikraft/lib-musl/pull/55)) by [@andreittr](https://github.com/andreittr) * [lib-musl] Makefile.uk: Condition behavior on Kconfig ([#54](https://github.com/unikraft/lib-musl/pull/54)) by [@andreittr](https://github.com/andreittr) * [lib-musl] glue: Init libc.auxv to point to a zero value ([#53](https://github.com/unikraft/lib-musl/pull/53)) by [@StefanJum](https://github.com/StefanJum) * [lib-musl] Allow deselection of ukmmap ([#52](https://github.com/unikraft/lib-musl/pull/52)) by [@marcrittinghaus](https://github.com/marcrittinghaus) * [lib-musl] Makefile.uk: Fix gcc specific warnings ([#51](https://github.com/unikraft/lib-musl/pull/51)) by [@mbrdg](https://github.com/mbrdg) * [lib-newlib] Makefile.uk: Call tcb reserve conditionally ([#35](https://github.com/unikraft/lib-newlib/pull/35)) by [@razvand](https://github.com/razvand) * [lib-opwnssl] Add patch to remove include of <linux/mman.h> ([#5](https://github.com/unikraft/lib-opwnssl/pull/5)) by [@andreittr](https://github.com/andreittr) * [lib-python3] Add support for the Shapely extension ([#17](https://github.com/unikraft/lib-python3/pull/17)) by [@andreittr](https://github.com/andreittr) * [lib-python3] Add support for NumPy ([#16](https://github.com/unikraft/lib-python3/pull/16)) by [@andreittr](https://github.com/andreittr) * [lib-python3] Update to upstream Python 3.10.11 ([#15](https://github.com/unikraft/lib-python3/pull/15)) by [@andreittr](https://github.com/andreittr) * [lib-python3] Makefile.uk: Allow configuring with custom config file ([#13](https://github.com/unikraft/lib-python3/pull/13)) by [@StefanJum](https://github.com/StefanJum) * [lib-python3] include/pyconfig.h: Define `SIZEOF_PHTREAD_T` based on chosen libc ([#12](https://github.com/unikraft/lib-python3/pull/12)) by [@eduardvintila](https://github.com/eduardvintila) * [lib-redis] Redis 7.0.11 ([#10](https://github.com/unikraft/lib-redis/pull/10)) by [@John-Ted](https://github.com/John-Ted) * [lib-sqlite] Config.uk: Fix dependency issues & defaults ([#6](https://github.com/unikraft/lib-sqlite/pull/6)) by [@andreittr](https://github.com/andreittr) * [lib-wamr] lib/lib-wamr: Move to musl and address compiler errors ([#8](https://github.com/unikraft/lib-wamr/pull/8)) by [@R0mbertus](https://github.com/R0mbertus) * [app-redis] Update configurations and instructions ([#18](https://github.com/unikraft/app-redis/pull/18)) by [@razvand](https://github.com/razvand) * [app-elfloader] Add missing uk/config.h ([#25](https://github.com/unikraft/app-elfloader/pull/25)) by [@marcrittinghaus](https://github.com/marcrittinghaus) * [app-elfloader] Add default configuration file ([#22](https://github.com/unikraft/app-elfloader/pull/22)) by [@StefanJum](https://github.com/StefanJum) * [app-elfloader] Readme: Add Hint about duplicate symbols ([#21](https://github.com/unikraft/app-elfloader/pull/21)) by [@mkroening](https://github.com/mkroening) * [app-elfloader] `Config.uk`: Fix paging configuration typo ([#18](https://github.com/unikraft/app-elfloader/pull/18)) by [@costinsin](https://github.com/costinsin) * [app-helloworld] README.md: Add `$` in commands ([#21](https://github.com/unikraft/app-helloworld/pull/21)) by [@StefanJum](https://github.com/StefanJum) * [app-helloworld] feat(devcontainer): Add devcontainer for codespaces ([#20](https://github.com/unikraft/app-helloworld/pull/20)) by [@craciunoiuc](https://github.com/craciunoiuc) * [app-helloworld] Add Makefile, configuration files and scripts ([#19](https://github.com/unikraft/app-helloworld/pull/19)) by [@StefanJum](https://github.com/StefanJum) * [app-helloworld] Update platform name according to 0.13 release ([#17](https://github.com/unikraft/app-helloworld/pull/17)) by [@Krechals](https://github.com/Krechals) * [app-helloworld-cpp] Add configuration and scripts ([#16](https://github.com/unikraft/app-helloworld-cpp/pull/16)) by [@razvand](https://github.com/razvand) * [app-helloworld-cpp] Update platform to qemu for all targets ([#13](https://github.com/unikraft/app-helloworld-cpp/pull/13)) by [@gabrielmocanu](https://github.com/gabrielmocanu) * [app-helloworld-go] Add Makefile and update Makefile.uk ([#9](https://github.com/unikraft/app-helloworld-go/pull/9)) by [@eduardvintila](https://github.com/eduardvintila) * [app-httpreply] Update platform to qemu for all targets ([#16](https://github.com/unikraft/app-httpreply/pull/16)) by [@gabrielmocanu](https://github.com/gabrielmocanu) * [app-httpreply] Update README.md file with easier to use instructions ([#15](https://github.com/unikraft/app-httpreply/pull/15)) by [@StefanJum](https://github.com/StefanJum) * [app-httpreply] Add Makefile, configuration files and scripts ([#14](https://github.com/unikraft/app-httpreply/pull/14)) by [@StefanJum](https://github.com/StefanJum) * [app-lua] Change newlib with musl ([#9](https://github.com/unikraft/app-lua/pull/9)) by [@JADarius](https://github.com/JADarius) * [app-nginx] Update configurations and instructions ([#15](https://github.com/unikraft/app-nginx/pull/15)) by [@razvand](https://github.com/razvand) * [app-nginx] Update `README.md` file with easier to use instructions ([#14](https://github.com/unikraft/app-nginx/pull/14)) by [@StefanJum](https://github.com/StefanJum) * [app-nginx] Add Makefile, configuration files and scripts ([#13](https://github.com/unikraft/app-nginx/pull/13)) by [@razvand](https://github.com/razvand) * [app-python3] Fix rootfs mistakenly containing numpy ([#17](https://github.com/unikraft/app-python3/pull/17)) by [@andreittr](https://github.com/andreittr) * [app-python3] Update default Python app to 3.10.11 ([#16](https://github.com/unikraft/app-python3/pull/16)) by [@andreittr](https://github.com/andreittr) * [app-python3] Rename running scripts to `run-qemu-*.sh` ([#15](https://github.com/unikraft/app-python3/pull/15)) by [@StefanJum](https://github.com/StefanJum) * [app-python3] Add Makefile, configuration files and scripts ([#12](https://github.com/unikraft/app-python3/pull/12)) by [@StefanJum](https://github.com/StefanJum) * [app-redis] Update README.md file with easier to use instructions ([#17](https://github.com/unikraft/app-redis/pull/17)) by [@StefanJum](https://github.com/StefanJum) * [app-redis] Add run scripts and documentation ([#16](https://github.com/unikraft/app-redis/pull/16)) by [@John-Ted](https://github.com/John-Ted) * [app-sqlite] Update configurations and instructions ([#11](https://github.com/unikraft/app-sqlite/pull/11)) by [@razvand](https://github.com/razvand) * [app-sqlite] Update README.md file with easier to use instructions ([#10](https://github.com/unikraft/app-sqlite/pull/10)) by [@StefanJum](https://github.com/StefanJum) * [app-sqlite] Update building and running workflows ([#9](https://github.com/unikraft/app-sqlite/pull/9)) by [@StefanJum](https://github.com/StefanJum) * [app-wamr] Port application to musl ([#5](https://github.com/unikraft/app-wamr/pull/5)) by [@R0mbertus](https://github.com/R0mbertus) A big thank you also to all those who helped in the [review process](unikraft.org/docs/contributing/review-process/): [Adina Vaman](https://github.com/adinamariav), [Alexander Jung](https://github.com/nderjung), [Andra Paraschiv](https://github.com/andraprs), [Cezar Crăciunoiu](https://github.com/craciunoiuc), [Cosmin Vancea](https://github.com/csvancea), [Delia Pavel](https://github.com/DeliaPavel), [Dragoș Petre](https://github.com/dragosp27), [Eduard Mihăilescu](https://github.com/Starnox), [Eduard Vintilă](https://github.com/eduardvintila), [Florin Postolache](https://github.com/maniatro111), [Gabriel Mocanu](https://github.com/gabrielmocanu), [Teodor Țeugea](https://github.com/John-Ted), [Marco Schlumpp](https://github.com/mschlumpp), [Maria Sfîrăială](https://github.com/mariasfiraiala), [Michalis Pappas](https://github.com/michpappas), [Radu Nichita](https://github.com/RaduNichita), [Rareș Miculescu](https://github.com/rares-miculescu), [Răzvan Deaconescu](https://github.com/razvand), [Razvan Vîrtan](https://github.com/razvanvirtan), [Robert Kuban](https://github.com/kubanrob), [Sergiu Moga](https://github.com/mogasergiu), [Simon Kuenzer](https://github.com/skuenzer), [Stefan Jumarea](https://github.com/StefanJum), [Tu Dinh Ngoc](https://github.com/dinhngtu). --- For more information, check out [the accompanying blog post](TODO) or [view the full changelog](https://github.com/unikraft/unikraft/compare/RELEASE-0.13.0...RELEASE-0.14.0). --- ## Twitter Unikraft v0.14.0 (Prometheus) is here! 🚀 One of our biggest releases yet, it comes packed with fixes and new features that are worth your attention: macOS support, Clang integration, up-to-date application and languages support, improvements to binary compatibility mode, PIE support, Firecracker support and many more. Check out the blog post for extensive details on the latest changes: TODO --- ## LinkedIn Unikraft v0.14.0 (Prometheus) is here! 🚀 One of our biggest releases yet, it comes packed with fixes and new features that are worth your attention: macOS support, Clang integration, up-to-date application and languages support, improvements to binary compatibility mode, PIE support, Firecracker support and many more. Check out the blog post for extensive details on the latest changes (TODO) and join us on GitHub (https://github.com/unikraft/) and on Discord (https://bit.ly/UnikraftDiscord). --- ## Blog Post We are thrilled to announce the new edition of Unikraft, v0.14.0 (Prometheus)! This release is the result of extensive hard work during the last months in the entire community. It comes packed with tons of fixes and new features that improve the overall Unikraft ecosystem. In this blog post, we describe some of the new features available in Unikraft. For a full breakdown, please check out the [changelog](https://github.com/unikraft/unikraft/compare/RELEASE-0.13.0...RELEASE-0.14.0). ### Native macOS (Darwin) Support ([#1034](https://github.com/unikraft/unikraft/pull/1034)) _This feature was championed by [Simon Kuenzer](https://github.com/skuenzer), [Mihailescu Eduard-Florin](https://github.com/Starnox), and [Răzvan Deaconescu](https://github.com/razvand) with important advice from [Alexander Jung](https://github.com/nderjung)._ With the release of Unikraft 0.14, the build system officially supports a macOS-based development environment. Unikernel images can be developed, compiled, and tested directly on macOS. Both types of Macs are supported: you can do this on a Mac with an Intel processor or with an Apple silicon. Only the following packages are expected to be installed on the system via [Homebrew](https://brew.sh/): ```bash brew install gnu-sed make m4 gawk grep wget qemu socat git # ...for compiling x86_64 unikernels brew install x86_64-elf-binutils x86_64-elf-gcc # ...for compiling aarch-64 unikernels brew install aarch64-elf-binutils aarch64-elf-gcc ``` Behind the scenes, Unikraft uses the Python-based [Kconfiglib](https://github.com/ulfalizer/Kconfiglib) to configure Unikraft on a Mac. The build system automatically chooses the Linux-equivalent command-line tools on Mac to perform a successful build. 1. Within a terminal session, Unikraft can be cloned in the same way as on Linux: ```bash git clone https://github.com/unikraft/unikraft.git cd unikraft ``` 1. Configuration and compilation can be invoked with `gmake`: ```bash # Configure (select an architecture and platform) gmake menuconfig # Build gmake ``` 1. Also on Mac, `qemu-guest` can support in running built Unikernels with QEMU: ``` support/scripts/qemu-guest -t arm64v -k build/unikraft_qemu-arm64 ``` ### UEFI Support on x86_64 and ARM64 ([#910](https://github.com/unikraft/unikraft/pull/910), [#909](https://github.com/unikraft/unikraft/pull/909)) _This feature was championed by [Sergiu Moga](https://github.com/mogasergiu) with amazing support from [Michalis Pappas](https://github.com/michpappas) and advice from [Răzvan Deaconescu](https://github.com/razvand), [Ștefan Jumărea](https://github.com/StefanJum) and [Răzvan Vîrtan](https://github.com/razvanvirtan)._ Unikraft bootable through `UEFI` on `ARM64` and `x86_64`. Features: - custom, minimalist built-in bootloader to act as a UEFI stub capable of loading Unikraft straight from UEFI firmware on both x86_64 and AArch64 by relocating the kernel, fetching the command-line, initial RAM disk, Devicetree blob and setting up the memory region descriptors as well as bridging the gap between the components initialized by UEFI and those supported by Unikraft - script to create UEFI based disk and ISO Unikraft bootable images ### Linux Boot Protocol on `arm64` ([#988](https://github.com/unikraft/unikraft/pull/988)) _This feature was championed by [Michalis Pappas](https://github.com/michpappas) with the inputs of [Xingjian Zhang](https://github.com/zhxj9823) and [Sergiu Moga](https://github.com/mogasergiu)._ The [arm64 Linux boot protocol](https://www.kernel.org/doc/Documentation/arm64/booting.txt) defines the layout of a Linux image, the kernel parameters, and the system configuration expected by the boot environment. Unikraft `0.14` introduces support for the arm64 Linux boot protocol, which allows booting Unikraft into any environments that expects an `arm64` linux image, such as boot loaders or VMMs like Firecracker. ### Firecracker Support on `arm64` ([#989](https://github.com/unikraft/unikraft/pull/989)) _This feature was championed by [Michalis Pappas](https://github.com/michpappas) with the inputs of [Xingjian Zhang](https://github.com/zhxj9823) and [Sergiu Moga](https://github.com/mogasergiu)._ This release introduces the ability to boot `arm64` builds of Unikraft on Firecracker. [Firecracker](https://firecracker-microvm.github.io/) is an ultra-light VMM that allows creating and running microVMs, combining the security and isolation properties of VMs with the flexibility and ease of use of containers. ### Dynamic `uk_store` API ([#939](https://github.com/unikraft/unikraft/pull/939)) _This feature was championed by [Michalis Pappas](https://github.com/michpappas) with the inputs of [Simon Kuenzer](https://github.com/skuenzer) and [Cezar Crăciunoiu]()._ The `uk_store` API provides micro-libraries with the ablity to register getters and setters for various properties. Unikraft `0.14` enhances `uk_store` with the ability for microlibraries to dynamically create and destroy `uk_store` objects. This paves the road for features like per-device statics, dynamic entries in virtual file systems like `procfs` / `sysfs`, and more. ### SUBBUILD Build System Feature ([#938](https://github.com/unikraft/unikraft/pull/938)) _This feature was championed by [Simon Kuenzer](https://github.com/skuenzer) with support from [Michalis Pappas](https://github.com/michpappas)._ This release introduces a so called `SUBBUILD` feature to the build system. It adds the ability to place generated files (e.g., pre-processed, compiled units) in a subdirectory of a library build directory. For this purpose, the build system looks for a file-scoped variable with the suffix `_SUBBUILD`. Such a variable contains a path that is created below the library build directory. The feature is especially useful for generating headers with a pre-processor, like AWK or M4. An example `Makefile.uk`: ```Makefile # Create `myheader.h` under `build/libmylib/include/uk/` LIBMYLIB_SRCS-y += $(LIBMYLIB_BASE)/myheader.m4>.h LIBMYLIB_MYHEADER_SUBBUILD += include/uk # Register the include folder of the library with the generated header CINCLUDES-$(CONFIG_LIBMYLIB) += -I$(LIBMYLIB_BUILD)/include ``` ### TREE BUILD Build System Feature ([#1001](https://github.com/unikraft/unikraft/pull/1001)) _This feature was championed by [Andrei Tatar](https://github.com/andreittr) with support from [Marco Schlumpp](https://github.com/mschlumpp), [Maria Sfîrăială](https://github.com/mariasfiraiala), [Ștefan Jumărea](https://github.com/StefanJum), and [Simon Kuenzer](https://github.com/skuenzer)._ TREE BUILD is an alternative library registration mode for the build system which automatically handles subdirectory paths for build products. The work adds `addlib_tree` and `addlib_tree_s` as library registration functions. For each library in tree mode, the build system places build products in a subdirectory structure that mirrors the directory structure of the corresponding source file. This is a very handy tool to simplify the porting of libraries whose source files span multiple directories. Example `Makefile.uk`: ```Makefile (eval $(call addlib_tree_s,libgeos,$(CONFIG_LIBGEOS))) $(eval $(call addlib_tree_s,libgeos_test,$(CONFIG_LIBGEOS_UNITTEST))) ``` ### `uklibid`: Library Identifiers ([#938](https://github.com/unikraft/unikraft/pull/938)) _This feature was championed by [Simon Kuenzer](https://github.com/skuenzer) with support from [Michalis Pappas](https://github.com/michpappas) and [Robert Kuban](https://github.com/kubanrob)._ Based on the SUBBUILD build feature, this release introduces library identifiers with `uklibid`. The new library generates at compile-time unique IDs for each library. Such a ID starts from `0` and increases linearly so that they can be used for table lookups with `O(1)` complexity. The library provides helpers to map identifiers to names and vice versa. `lib/ukdebug` and `lib/ukstore` are first users of this library and adopted accordingly. A clear separation between runtime and compile-time resolution of library identifiers is done so that libraries can potentially be built off-tree and shipped in binary form. Each library's own identifier (`uk_libid_self()`) is stored in a constant variable that is resolved during link-time. The owner of the identifier variable is `uklibid`, so that the identifier is external to a binary library. ### `ukreloc`: Self-Relocation and Symbol-based Relocations ([#772](https://github.com/unikraft/unikraft/pull/772)) _This feature was championed by [Sergiu Moga](https://github.com/mogasergiu) with amazing support from [Michalis Pappas](https://github.com/michpappas), [Marco Schlumpp](https://github.com/mschlumpp) and advice from [Răzvan Deaconescu](https://github.com/razvand) and [Dragoș Petre](https://github.com/dragosp27)._ Unikraft is now position independent, can be built as a static `PIE` and self relocate on both `x86_64` and `ARM64`. Features: - `CONFIG_OPTIMIZE_PIE` to build Unikraft as a static `PIE` - `CONFIG_LIBUKRELOC` automatically selected by `CONFIG_OPTIMIZE_PIE` and implements Unikraft's custom relocation system: - custom macro-definitions to be used as relocation friendly alternatives to various instructions (`ldr` -> `ur_ldr`, `mov` -> `ur_mov`) as well as numerical values declarations GNU Assembler directives (`.quad`/`.long`/`.short`/etc -> `ur_data`) and a way to create relocatable static Page Table entries (`ur_pte`). - self relocator written in C to be used in 64-bit operating mode - 32-bit self relocator written in assembly to be used by early code that runs in x86 Protected Mode (e.g. when booting from Multiboot) ### Individual Volume Automounting ([#979](https://github.com/unikraft/unikraft/pull/979)) _This feature was championed by [Sergiu Moga](https://github.com/mogasergiu) with support from [Simon Kuenzer](https://github.com/skuenzer) and advice from [Radu Nichita](https://github.com/RaduNichita) and [Ștefan Jumărea](https://github.com/StefanJum)._ It is now possible to dynamically mount additional volumes via the introduction of a new command-line argument `vfs.fstab` that is meant to contain a list of whitespace separated strings with the following format: ``` vfs.fstab=[ "<src_dev>:<mntpoint>:<fsdriver>[:<flags>:<opts>]" "<src_dev>:<mntpoint>:<fsdriver>[:<flags>:<opts>]" ... ] ``` The core will parse the provided strings as volume information and attempt to mount them accordingly, if `CONFIG_LIBVFSCORE_FSTAB` is provided. Furthermore, add a configurable `CONFIG_LIBVFSCORE_FSTAB_SIZE` option that will be used as the maximum amount of automatically mounted volumes, excluding the `rootfs` and modularize `initrd` extraction and mounting functionality into a standalone function to be used by both `fstab` and implicit `rootfs`. The core will parse the provided strings as volume information and attempt to mount them accordingly. ### vDSO and vsyscall Support for Binary Compatibility ([#23](https://github.com/unikraft/app-elfloader/pull/23)) _This feature was championed by [Michalis Pappas](https://github.com/michpappas) with support from [Cezar Crăcinoiu](https://github.com/craciunoiuc), and [Simon Kuenzer](https://github.com/skuenzer)._ The `vsyscall` (_virtual system call_) is the first and oldest mechanism used to accelerate system calls. Due to security concerns, it has been deprecated, and `vDSO` (_virtual dynamic shared object_) serves as its successor. However, in the context of unikernels, kernel isolation is not a concern, allowing us to utilize both of them. The [`app-elfloader`](https://github.com/unikraft/app-elfloader) now supports both of these features. If you don't have the source code of your application but desire the performance of Unikraft, [`app-elfloader`](https://github.com/unikraft/app-elfloader) can load unmodified ELF files. However, there will be some performance overhead compared to a native build, while the two newly introduced features can help mitigate this difference. The `vDSO` is available for both dynamically linked applications and statically linked ones, to accelerate certain commonly used time-related system calls (`clock_gettime`, `gettimeofday`, `time`, `clock_getres`). As a result, some server programs can experience significant performance improvements. If your application is dynamically linked, it can further utilize `vsyscall` to avoid costly binary syscalls (since `vsyscall` has been deprecated in the latest version of libc, we provide patched dynamic runtime libraries for [`glibc`](https://github.com/unikraft/fork-glibc) and [`musl`](https://github.com/unikraft/fork-musl)). In some cases, this can even result in better performance than a native build. ### Application Updates _This feature was championed by in the community by [Ștefan Jumărea](https://github.com/StefanJum), [Radu Nichita](https://github.com/RaduNichita), [Andrei Tatar](https://github.com/andreittr), [Răzvan Deaconescu](https://github.com/razvand), [Alexander Jung](https://github.com/nderjung) and participants at various Unikraft hackathons._ The [Unikraft applications](https://github.com/unikraft/?q=app-&type=all&language=&sort=) now contain `README.md` files with very easy to use instructions for running the applications, both using [`kraftkit`](https://github.com/unikraft/kraftkit) and the `Make`-based build system. We take advantage of the `defconfig` build rule, that can generate a full `.config` file starting from a given minimal configuration. The minimal configurations (for multiple supported platforms and architectures) are already provided in the application repositories, and can be used as such: ```console UK_DEFCONFIG=$(pwd)/.config.helloworld_qemu-x86_64 make defconfig ``` After the configuration file is generated, the application can be build using `make` and run using the instructions from the `README.md` files. Along with that, many applications have been ported to use Musl as the default libc. Some of the more important ones are [`app-lua`](https://github.com/unikraft/app-lua), [`app-duktape`](https://github.com/unikraft/app-duktape/), [`app-click`](https://github.com/unikraft/app-click/), [`app-wamr`](https://github.com/unikraft/app-wamr). As part of the [Unikraft Summer of Code](https://unikraft.org/community/hackathons/usoc23/) final hackathon, we also focused on the binary compatibility side, porting a lot of new applications and adding them in the [`dynamic-apps` repository](https://github.com/unikraft/dynamic-apps/). Among the new ported applications are [`lua`](https://github.com/unikraft/dynamic-apps/tree/master/lang/lua), [`ruby`](https://github.com/unikraft/dynamic-apps/tree/master/lang/ruby), [`iputils`](https://github.com/unikraft/dynamic-apps/tree/master/iputils), [`redis7`](https://github.com/unikraft/dynamic-apps/tree/master/redis7). In order to have a one to one version match between the binary compatibility and native application, [`app-redis`](https://github.com/unikraft/app-redis) was also updated to version `7.0.11`, from `5.0.6`. ### GitHub Actions for CI ([#1012](https://github.com/unikraft/unikraft/pull/1012)) _This feature was championed by [Alaxander Jung](https://github.com/nderjung) and [Cezar Crăciunoiu](https://github.com/craciunoiuc) with support from [Răzvan Deaconescu](https://github.com/razvand)._ Preliminary steps in using GitHub actions as a continuous integration have been undertaken. These allow the building and running of tests at PR submissions, as a complement and future replacement of the current [Concourse-based system](https://builds.unikraft.io/). In conjunction to this, a new [application `catalog` repository](https://github.com/unikraft/catalog) will store application files and serve as the sole go-to place for grabbing applications that can be built and run on top of Unikraft. ### Improved Python Support ([lib-python3:15](https://github.com/unikraft/lib-python3/pull/15)) _This feature was championed by [Andrei Tatar](https://github.com/andreittr) with support from and [Ștefan Jumărea](https://github.com/StefanJum), [Radu Nichita](https://github.com/RaduNichita) and [Maria Sfîrăială](https://github.com/mariasfiraiala)._ The [Unikraft port of Python 3](https://github.com/unikraft/lib-python3) has been updated to upstream version [3.10.11](https://docs.python.org/3.10/whatsnew/3.10.html), with the [Python 3 Demo App](https://github.com/unikraft/app-python3) similarly updated. Notable changes: - Functional `asyncio` - More robust root filesystem build - Many standard lib functionality & stability improvements We are also excited to announce the first native ports of 3rd party Python packages: - [NumPy](https://github.com/unikraft/lib-python-numpy) - [Shapely](https://github.com/unikraft/lib-python-shapely) ### Updated Go Support ([lib-libgo:#23](https://github.com/unikraft/lib-libgo/pull/7) _This feature was championed by [Marc Rittinghaus](https://github.com/marcrittinghaus) and [Eduard Vintilă](https://github.com/eduardvintila) with support from [Ștefan Jumărea](https://github.com/StefanJum) and [Radu Nichita](https://github.com/RaduNichita)_. We update the Go support to version 1.18 an fully integrated `lib-go` with Musl. Go applications are now fully functional on top of Unikraft for `x86_64`. In the near future Go support will be updated for `AArch64`. ### Integrated Clang Support ([#23](https://github.com/unikraft/app-elfloader/pull/23)) _This feature was championed by [Maria Sfîrăială](https://github.com/mariasfiraiala) with input from [Michalis Pappas](https://github.com/michpappas) and [Ștefan Jumărea](https://github.com/StefanJum)._ We now provide `Clang` support for compiling for `x86_64` and cross-compiling for `AArch64` targets. This is exciting news as it opens the door for cool compiler enforced security features and better integration for platforms such as Darwin ([unikraft#685](https://github.com/unikraft/unikraft/pull/685)). Use the following command to compile with Clang, both on `x86_64` and on `AArch64` (depending on the configuration): ```console $ make CC=clang ``` ### Coding Conventions ([docs:#248](https://github.com/unikraft/docs/pull/248)) _This feature was championed by [Marc Rittinghaus](https://github.com/marcrittinghaus), [Michalis Pappas](https://github.com/michpappas), [Simon Kuenzer](https://github.com/skuenzer), [Marco Schlumpp](https://github.com/mschlumpp) and [Radu Nichita](https://github.com/RaduNichita) based on numerous meetings where the Unikraft community provided insight._ We're excited to announce [an official coding conventions guideline](https://github.com/unikraft/docs/blob/main/content/en/docs/contributing/coding-conventions.md)! This comprehensive document outlines that one should have in mind when submitting contributions to out codebase, whether it's a first-time contributor or a well-known veteran. By introducing these conventions, we want to ensure consistent and clean code across all our repositories and make maintenance more efficient. The document includes naming conventions, indentation guidelines, commenting practices, and many more. Happy coding! ### External Build System Integration (`kraftld`) ([#957](https://github.com/unikraft/unikraft/pull/957)) _This feature was championed by [Martin Kröning](https://github.com/mkroening) with support from [Marco Schlumpp](https://github.com/mschlumpp) and [Simon Kuenzer](https://github.com/skuenzer)._ You can now influence the Unikraft build process via a set of environment variables. - `UK_ASFLAGS`: explicit Unikraft-specific additions to the assembler flags (the `ASFLAGS` variable is ignored) - `UK_CFLAGS`: explicit Unikraft-specific additions to the C compiler flags (the `CFLAGS` variable is ignored) - `UK_CXXFLAGS`: explicit Unikraft-specific additions to the C++ compiler flags (the `CXXFLAGS` variable is ignored) - `UK_GOCFLAGS`: explicit Unikraft-specific additions to the GO compiler flags (the `GOCFLAGS` variable is ignored) - `UK_LDFLAGS`: explicit Unikraft-specific additions to the linker flags (the `LDFLAGS` variable is ignored) - `UK_LDEPS`: explicit, space-seperated link-time file dependencies (changes to these files will trigger relinking on subsequent builds) This info is also shown on `make help`. The `UK_LDFLAGS` and `UK_LDEPS` flags are of special interest, as they allow injecting externally built object files into the Unikraft image. This approach will be further integrated into KraftKit via [`kraftld`](https://github.com/unikraft/kraftkit/pull/703). `kraftld` is a drop-in replacement for a gcc-flavored linker, allowing the transparent linking of object files into Unikraft images. A follow-up blog post will describe this approach and its design in more detail and will show how this is used to bring Rust support to Unikraft. ### `ADOPTERS.md` File ([#892](https://github.com/unikraft/unikraft/pull/892)) _This feature was championed by [Alaxander Jung](https://github.com/nderjung) with support from [Răzvan Deaconescu](https://github.com/razvand)._ We want to keep track of entities using Unikraft. Inside the `unikraft` core repository there is now [an `ADOPTERS.md` file](https://github.com/unikraft/unikraft/blob/staging/ADOPTERS.md) storing Unikraft users: companies, universities, institutions that benefit from using Unikraft as part of their commercial, research or teaching activities. If you are an entity using Unikraft, follow the [submission guidelines](https://unikraft.org/docs/contributing/submitting-changes/) and submit a pull request to update [the `ADOPTERS.md` file](https://github.com/unikraft/unikraft/blob/staging/ADOPTERS.md). ## Community Activities ### Unikraft Summer of Code 2023 _This activity was lead by [Ștefan Jumărea](https://github.com/StefanJum) with the active involvement of [Cezar Crăciunoiu](https://github.com/craciunoiuc), [Răzvan Deaconescu](https://github.com/razvand), [Eduard Vintilă](https://github.com/eduardvintila), [Radu Nichita](https://github.com/RaduNichita), [Vlad Bădoiu](https://github.com/vladandrew), [Sergiu Moga](https://github.com/mogasergiu), [Luca Serițan](https://github.com/LucaSeri), [Teodor Țeugea](https://github.com/John-Ted)._ The third edition of [Unikraft Summer of Code](https://unikraft.org/community/hackathons/usoc23/) took place this July, had about 45 participants, and consisted in 6 sessions and a final hackathon. The sessions covered topics like building and running unikernels, debugging, porting applications, etc. The final hackathon was a full day event, and the participants had their chance to apply the things they've learned and to contribute to Unikraft. It took place both in person, at [University POLITEHNICA of Bucharest](https://upb.ro/en), and online, on Discord. A lot of work was done on application porting and binary compatibility, with more than 35 issues and pull requests opened. We plan to keep organising the Unikraft Summer of Code in the following years, and make people eager to learn more about low-level topics, operating systems, unikernels, and, most importantly, the open source world. ### Unikernels Alliance As we want to speed up the unikernels ascent, we decided to organize a discussion group involving all the people that are interested and bring their contribution into this field. We decided to name our group the "Unikernel Alliance". This is a community formed from existing unikernel and libOS communities, aimed at popularizing and promoting unikernel-like solutions in research, industry and in technical communities. We organize monthly meetings, featuring technical talks from the group members. Until now, we have organized three meetings. You can find the recordings and slides [here](https://drive.google.com/drive/folders/1qXcdpCXb8iKxsQzgP5GBEFwQ06wa1x1L?usp=share_link). Feel free to join [the discussion group](https://groups.google.com/u/1/g/unikernel-alliance), [our Slack channel](https://join.slack.com/t/unikraftworkspace/shared_invite/zt-1v5zz3l3l-B6~36Me9SpWycaS2TximSA) and to be part of our next meeting on Thusday, August 31, 2023, 6pm CEST, online, on Zoom. ### Unikernels in the Wild Together with our friends from [RWTH Aachen](https://www.rwth-aachen.de/go/id/a/?lidx=1), we organized the first edition of [Unikernels in the Wild](https://www.acs.eonerc.rwth-aachen.de/cms/E-ON-ERC-ACS/Das-Institut/Aktuelle-Meldungen-Institut/~bapbol/Unikernel-Community-Meeting-Aachen/?lidx=1), an event centered on knowledge sharing in the Unikernels area. [Răzvan Deaconescu](https://github.com/razvand) and [Răzvan Vîrtan](https://github.com/razvanvirtan) participated from our side, having presentations and offering support during the practical workshops. The day started with a few presentations about the general view and latest updates in [RustyHermit](https://github.com/hermitcore/rusty-hermit). Then, we moved on with two presentations about binary compatibility and memory allocation in Unikraft. Also, our collaborators from [Nubificus](https://nubificus.co.uk/) (remember the [Athens Hackathon](https://unikraft.org/community/hackathons/2023-03-athens/)?) gave a presentation about their work on getting unikernels into the DevOps mainstream. The day ended with two hands-on sessions for Unikraft and [RustyHermit](https://github.com/hermitcore/rusty-hermit). This event has been a great chance for getting together people from the Unikernels community and we hope it will become a tradition! If you are using Unikraft, consider adding your affiliation in our [`ADOPTERS.md`](https://github.com/unikraft/unikraft/blob/staging/ADOPTERS.md) file. We use this file to keep a track of entities that use Unikraft for their commercial and / or research work. ### Google Summer of Code 2023 We are proud to be one of the Google Summer of Code organizations for the second year in a row! During these last months, our 5 students have started their work and already achieved some amazing intermediary results! You can find more about our mentees progress in the following blogposts: - [**Afsar Sahil**](https://github.com/MdSahil-oss): [Enhancing the VSCode Developer Experience](https://unikraft.org/blog/2023-06-23-unikraft-gsoc-enhancing-vscode-developer-experience/) - [**Rareș Miculescu**](https://github.com/rares-miculescu): [re:Arch Unikraft](https://unikraft.org/blog/2023-06-22-unikraft-gsoc-plat-rearch/) - [**Tianyi Liu**](https://github.com/i-Pear): [Expanding binary compatibility mode](https://unikraft.org/blog/2023-06-23-unikraft-gsoc-app-compat-1/) - [**Zeyu Li**](https://github.com/zyllee): [Packaging Pre-built Micro-libraries for Faster and More Secure Builds](https://unikraft.org/blog/2023-06-23-unikraft-gsoc-packaging-libs-1/) - [**Zhang Xingjian**](https://github.com/zhxj9823): [Arm CCA Support for Unikraft](https://unikraft.org/blog/2023-06-23-unikraft-gsoc-arm-cca-1/) Stay tuned for news regarding the final status of their projects!

    Import from clipboard

    Paste your markdown or webpage here...

    Advanced permission required

    Your current role can only read. Ask the system administrator to acquire write and comment permission.

    This team is disabled

    Sorry, this team is disabled. You can't edit this note.

    This note is locked

    Sorry, only owner can edit this note.

    Reach the limit

    Sorry, you've reached the max length this note can be.
    Please reduce the content or divide it to more notes, thank you!

    Import from Gist

    Import from Snippet

    or

    Export to Snippet

    Are you sure?

    Do you really want to delete this note?
    All users will lose their connection.

    Create a note from template

    Create a note from template

    Oops...
    This template has been removed or transferred.
    Upgrade
    All
    • All
    • Team
    No template.

    Create a template

    Upgrade

    Delete template

    Do you really want to delete this template?
    Turn this template into a regular note and keep its content, versions, and comments.

    This page need refresh

    You have an incompatible client version.
    Refresh to update.
    New version available!
    See releases notes here
    Refresh to enjoy new features.
    Your user state has changed.
    Refresh to load new user state.

    Sign in

    Forgot password

    or

    By clicking below, you agree to our terms of service.

    Sign in via Facebook Sign in via Twitter Sign in via GitHub Sign in via Dropbox Sign in with Wallet
    Wallet ( )
    Connect another wallet

    New to HackMD? Sign up

    Help

    • English
    • 中文
    • Français
    • Deutsch
    • 日本語
    • Español
    • Català
    • Ελληνικά
    • Português
    • italiano
    • Türkçe
    • Русский
    • Nederlands
    • hrvatski jezik
    • język polski
    • Українська
    • हिन्दी
    • svenska
    • Esperanto
    • dansk

    Documents

    Help & Tutorial

    How to use Book mode

    Slide Example

    API Docs

    Edit in VSCode

    Install browser extension

    Contacts

    Feedback

    Discord

    Send us email

    Resources

    Releases

    Pricing

    Blog

    Policy

    Terms

    Privacy

    Cheatsheet

    Syntax Example Reference
    # Header Header 基本排版
    - Unordered List
    • Unordered List
    1. Ordered List
    1. Ordered List
    - [ ] Todo List
    • Todo List
    > Blockquote
    Blockquote
    **Bold font** Bold font
    *Italics font* Italics font
    ~~Strikethrough~~ Strikethrough
    19^th^ 19th
    H~2~O H2O
    ++Inserted text++ Inserted text
    ==Marked text== Marked text
    [link text](https:// "title") Link
    ![image alt](https:// "title") Image
    `Code` Code 在筆記中貼入程式碼
    ```javascript
    var i = 0;
    ```
    var i = 0;
    :smile: :smile: Emoji list
    {%youtube youtube_id %} Externals
    $L^aT_eX$ LaTeX
    :::info
    This is a alert area.
    :::

    This is a alert area.

    Versions and GitHub Sync
    Get Full History Access

    • Edit version name
    • Delete

    revision author avatar     named on  

    More Less

    Note content is identical to the latest version.
    Compare
      Choose a version
      No search result
      Version not found
    Sign in to link this note to GitHub
    Learn more
    This note is not linked with GitHub
     

    Feedback

    Submission failed, please try again

    Thanks for your support.

    On a scale of 0-10, how likely is it that you would recommend HackMD to your friends, family or business associates?

    Please give us some advice and help us improve HackMD.

     

    Thanks for your feedback

    Remove version name

    Do you want to remove this version name and description?

    Transfer ownership

    Transfer to
      Warning: is a public team. If you transfer note to this team, everyone on the web can find and read this note.

        Link with GitHub

        Please authorize HackMD on GitHub
        • Please sign in to GitHub and install the HackMD app on your GitHub repo.
        • HackMD links with GitHub through a GitHub App. You can choose which repo to install our App.
        Learn more  Sign in to GitHub

        Push the note to GitHub Push to GitHub Pull a file from GitHub

          Authorize again
         

        Choose which file to push to

        Select repo
        Refresh Authorize more repos
        Select branch
        Select file
        Select branch
        Choose version(s) to push
        • Save a new version and push
        • Choose from existing versions
        Include title and tags
        Available push count

        Pull from GitHub

         
        File from GitHub
        File from HackMD

        GitHub Link Settings

        File linked

        Linked by
        File path
        Last synced branch
        Available push count

        Danger Zone

        Unlink
        You will no longer receive notification when GitHub file changes after unlink.

        Syncing

        Push failed

        Push successfully