4.0 KiB
Axe OS
Axe OS is a from-scratch operating system, driven by Linux From Scratch and others like it.
Instead of creating a full-fledged desktop system, it is more about simplicity and a lightweight module-based approach. It is intended for use with my C/C++, and Go code bases. Simplicity and control have been prioritised over completeness in this.
With the Docker runtime, any additional dependencies or utilities required in the future by the system can be built or downloaded inside Docker containers. This way, the host system is left clean; no need to install any dependencies.
Project Structure
The project is structured to keep configurations, utilities, and package builds clearly separated and easy to maintain.
configs/
global.env
global.chroot.env
utilities.bash
build/
{package}/
package.env
build.bash
...
Configuration
-
configs/global.env- Environment variables specific to the
bootstrapandtoolchainbuild environment stage.
- Environment variables specific to the
-
configs/global.chroot.env- Environment variables specific to the
setupandfinalbuild environment stage.
- Environment variables specific to the
-
configs/utilities.bash- Common helper functions used by build scripts.
Build System
Each package lives in its own directory under build/ and defines:
-
package.env— package-specific configuration and versioning -
build.bash— the build logic for that package, include logic for all build stage support by package
Build Stages
Packages are built in four distinct stages, following a progressive bootstrapping model:
1. Bootstrap
Minimal components required to bring up a usable base toolchain:
-
binutils
-
GCC
-
Linux headers
-
glibc
-
libstdc++
2. Toolchain
Core Unix tools and a more complete compiler toolchain:
-
m4, ncurses
-
coreutils, diffutils, file, findutils
-
gawk, grep, gzip, make, patch, sed, tar, xz
-
binutils, gcc
3. Setup
Tools required for building more complex software:
-
bison
-
Perl
-
Python
-
texinfo
-
util-linux
4. Final
Rebuilds most of the previous components in their final form and installs higher-level software, including:
-
Docker and graphics stack support
-
Development tools such as
git -
Networking and utility dependencies (e.g
curl) -
Additional packages required by the target C/C++ and Go codebases
Sources, Sysroot, and Mounts
All package source archives are downloaded into a shared sources/ directory.
The build uses multiple sysroots depending on the stage:
-
sysroot/cross
Used during the bootstrap and toolchain stages to build an isolated cross-compilation environment. -
sysroot/
Represents the final target system and is used during the setup and final stages.
During the setup and final stages, the following directories are mounted into the chroot environment to make them accessible during the build:
sources/build/
This approach keeps source archives and build scripts outside the target filesystem while still allowing full visibility inside the chroot when needed.
Contributing
Contributions are welcome.
This project is experimental and intentionally minimal, so clarity and simplicity are preferred over feature expansion. If you plan to contribute:
- Keep changes focused and well-scoped
- Follow the existing project structure and build stages
- Avoid introducing unnecessary dependencies
- Document any non-obvious behavior or design decisions
Before submitting large or architectural changes, consider opening an issue to discuss the approach first.
By contributing to this project, you agree that your contributions will be licensed under the MIT License.
License
Axe OS is licensed under the MIT License.
This license applies only to the Axe OS build scripts, configuration files, and documentation contained in this repository. It does not override or alter the licenses of third-party software built by the system (such as the Linux kernel, GCC, glibc, or other packages), which remain under their respective upstream licenses.