NoirOS is a modernized fork of the Linux 3.10 kernel, specifically tailored for mobile ARM architectures. It leverages modern compiler features (C23 standard), integrated sanitizers (UBSAN), and automated fuzzing to ensure maximum stability and security.
- Modern C23 Standard: Built using
-std=gnu23for modern language features and better type safety. - Integrated Sanitizers: Backported UBSAN (Undefined Behavior Sanitizer) support for the kernel runtime.
- Automated Fuzzing: Built-in LibFuzzer infrastructure for host tools (e.g., kconfig expression parser).
- Clean Build: Warning-free build environment using strict compiler flags (
-w). - Parallel Workflow: Optimized orchestrator with automated resource partitioning and dependency synchronization.
NoirOS is optimized for Ubuntu 26.04 with GCC 15/16 and Clang 21.
apt-get update
apt-get install -y bc build-essential libncurses5-dev libssl-dev bison flex \
libelf-dev libselinux1-dev gcc-arm-linux-gnueabi clang llvm lldThe recommended way to work with NoirOS is through the optimized orchestrator, which ensures all dependencies are synchronized before starting parallel Build, Test, and Fuzz threads.
python3 scripts/orchestrator.pyThis will:
- Phase 1 (Preparation): Synchronize kernel config and generate shared headers (
make prepare) to prevent race conditions. - Phase 2 (Parallel Execution):
- Thread 1: Build the ARM kernel with UBSAN and C23 flags using a dedicated CPU partition.
- Thread 2: Execute kernel selftests using a dedicated CPU partition.
- Thread 3: Run LibFuzzer against host tools (e.g., kconfig).
export ARCH=arm
export CROSS_COMPILE=arm-linux-gnueabi-
make msm8909-1gb_defconfigmake -j$(nproc) KCFLAGS="-w -std=gnu23 -fsanitize=undefined"To manually build and run the kconfig fuzzer:
clang -fsanitize=fuzzer,address,undefined -Iscripts/kconfig \
scripts/kconfig/fuzzer.c scripts/kconfig/expr.c scripts/kconfig/util.c \
-o kconfig_fuzzer
./kconfig_fuzzermake -C tools/testing/selftests run_testsLogs for the automated workflow are stored in:
build.log: Kernel compilation output and UBSAN reports.test_run.log: Results of the kernel selftests.fuzz_run.log: Sanitizer reports and crashes from the LibFuzzer targets.orchestrator.log: General orchestrator status.
NoirOS is distributed under the GNU General Public License v2.0 (GPL-2.0). See the COPYING file for details.