akernel / Package guide

PACKAGING · NIGHTLY 1.2.1.067

How to package your akernels

Build a bootable test image, verify it, and organize experimental package metadata without implying that akernel has an installer.

!

Know what the tools support. The ISO ZIP workflow below is implemented. The package descriptors are C metadata and compatibility checks only: akernel does not yet install packages, resolve dependencies, or read package archives.

01 — PACKAGE A BOOT IMAGE

Build the ISO and ZIP

On Ubuntu or Debian, install the compiler, boot-image, archive, and validation tools:

TERMINALUbuntu / Debian
sudo apt update
sudo apt install -y build-essential gcc-multilib binutils nasm curl xorriso zip unzip qemu-system-x86

From the repository root, build the image and a ZIP containing just that ISO:

TERMINALrepository root
make clean
make CC=gcc iso-zip
make test-aash
unzip -t build/akernel-v1.2.1.067-x86_64.zip
sha256sum -c build/akernel-v1.2.1.067-x86_64.zip.sha256
file build/akernel-v1.2.1.067-x86_64.iso

The nightly outputs are build/akernel-v1.2.1.067-x86_64.iso, build/akernel-v1.2.1.067-x86_64.zip, and its .sha256 file. Boot the ISO only as virtual CD media in a disposable VM. The image is not an installer.

03 — EXPERIMENTAL BOOT SCRIPT

AASH 0.1

The 1.2.1.067 nightly includes AASH, a freestanding C interpreter for a small boot-embedded command script. It supports echo, color, setup, version, and help. It is not compatible with Bash, Zsh, or Fish and does not load external scripts.

The setup command shows a non-destructive preflight status screen; it does not install an OS or write to a disk. See the AASH guide for syntax, supported colors, and limitations.

04 — DESCRIBE A FUTURE PACKAGE

Start with the C descriptor

Package sources can define the metadata structure in pkg/akernel/package.h. For example:

Cexperimental metadata
#include "package.h"

static const akpkg_descriptor example_package = {
    .name = "example",
    .package_version = {1u, 0u, 0u},
    .version_string = "1.0.0",
    .summary = "Example freestanding component",
    .minimum_kernel_version = {1u, 2u, 0u},
    .supported_architectures = AKPACKAGE_ARCH_X86_64,
    .flags = AKPKG_FLAG_FREESTANDING_ONLY
};

The metadata can be checked with akpkg_is_compatible when compiled for a target. It does not make a package loadable. There is no stable package ABI or archive schema yet.

For your own experiments, keep source, build instructions, license, and a manifest together. One possible layout is:

DIRECTORYexample experimental layout
example-1.0.0-x86_64/
  manifest.json
  LICENSE
  README.md
  src/
    example.c
  build/
    example.o

Choose and document your own fields; the kernel currently does not parse this JSON example:

JSONinformational example only
{
  "name": "example",
  "version": "1.0.0",
  "target": "x86_64-elf",
  "minimum_kernel": "1.2.1",
  "entry_point": null,
  "status": "source-example-not-installable"
}

05 — TEST AND SHARE

Verify before distributing

  • Build from a clean checkout and keep the compiler/tool versions with your notes.
  • Check the ZIP and checksum, then test the ISO in a disposable VM without physical-disk passthrough.
  • Include the source revision, target architecture, build commands, and license for every component.
  • Label experimental package data as non-installable until a package manager and format exist.
  • Publish checksums alongside downloads; use a trusted signing process if users need authenticity verification.

For a complete kernel-to-ISO workflow, continue to the Manual on how to make an Akernel OS.