Thank you for your interest in contributing to the Embedded Operating System!
| Tool | Minimum Version | Notes |
|---|---|---|
| CMake | 3.15+ | Build system generator |
| GCC | 10+ | Or Clang 10+, or MSVC 2019+ |
| Clang | 10+ | Alternative to GCC |
| Git | 2.25+ | Version control |
| Python | 3.8+ | For test scripts and tooling |
| Doxygen | 1.9+ | Optional — for API documentation generation |
- Fork the repository
- Create a feature branch:
git checkout -b feat/my-feature - Make your changes
- Run the build and tests locally
- Submit a pull request
git clone https://github.com/embeddedos-org/eos.git
cd eos
cmake -B build -DEOS_BUILD_TESTS=ON
cmake --build build
ctest --test-dir build --output-on-failureTo build a specific product profile:
cmake -B build -DEOS_PRODUCT=robot
cmake --build buildAll pull requests must pass the following CI checks before merging:
| Check | Platform | What It Validates |
|---|---|---|
| Build (ubuntu-latest) | Linux | GCC build with all libraries and services |
| Build (windows-latest) | Windows | MSVC build — verifies cross-platform portability |
| Build (macos-latest) | macOS | Clang build — verifies Apple platform support |
| Product (robot) | Linux | Robot product profile compiles cleanly |
| Product (gateway) | Linux | IoT gateway product profile compiles cleanly |
| Product (medical) | Linux | Medical device product profile compiles cleanly |
| Product (automotive) | Linux | Automotive product profile compiles cleanly |
| Product (iot) | Linux | IoT sensor node product profile compiles cleanly |
| Product (aerospace) | Linux | Aerospace product profile compiles cleanly |
Before submitting a PR, ensure all checks pass:
# 1. Full build with tests
cmake -B build -DEOS_BUILD_TESTS=ON
cmake --build build --config Release
ctest --test-dir build --output-on-failure -C Release
# 2. Product profiles (test at least one)
cmake -B build-robot -DEOS_PRODUCT=robot && cmake --build build-robot
cmake -B build-gateway -DEOS_PRODUCT=gateway && cmake --build build-gatewayThe nightly workflow runs additional checks not required for PRs but monitored for regressions:
- Full test suite with
EOS_BUILD_TESTS=ONon all 3 OS platforms - All 6 product profile builds
- Cross-compilation for AArch64, ARM hard-float, and RISC-V 64
- Standard: C11 (
-std=c11) - Warnings:
-Wall -Wextramust compile clean (zero warnings) - Platform guards: All platform-specific code must be guarded:
#ifdef _WIN32for Windows-specific code#ifdef __APPLE__for macOS-specific code#ifdef _MSC_VERfor MSVC compiler intrinsics#if defined(__GNUC__) || defined(__clang__)for GCC/Clang builtins
- Portability rules:
- No
__builtin_*without MSVC fallback (use helper functions likeeos_popcount32()) - No hardcoded Unix paths (
/tmp/) — usegetenv("TEMP")on Windows - Always
#include <stddef.h>when usingsize_t - Always
#include <stdlib.h>when usinggetenv(),malloc(), etc.
- No
- Naming:
snake_casefor all functions, types, and variables - Prefix: All public symbols must use the
eos_prefix (e.g.,eos_gpio_init,eos_task_create) - Documentation: All public APIs must have Doxygen-compatible
/** */doc comments - Include guards: Use
#ifndef HEADER_NAME_H/#define/#endif - Types: Use
<stdint.h>types (uint32_t,int8_t, etc.)
When adding or modifying HAL peripheral interfaces in hal/include/eos/hal_extended.h:
- All type names must be consistent (e.g., use
eos_imu_vec3_tnoteos_imu_data_t) - Types used in
eos_hal_ext_backend_tmust match the types in the API declarations above - Every
#if EOS_ENABLE_*block must be self-contained with all required types - Stub implementations in
hal/src/hal_extended_stubs.cmust match the header exactly
When adding a new product profile:
- Create
products/<name>.hwithEOS_ENABLE_*flags - Add the
#elifcase toinclude/eos/eos_config.h - Add the profile to the CI matrix in
.github/workflows/ci.yml - Test:
cmake -B build -DEOS_PRODUCT=<name> && cmake --build build
Follow Conventional Commits:
feat: add CAN bus driver for automotive profile
fix: datacenter popcount portability for MSVC
docs: add quickstart guide for nRF52
ci: add aerospace product build to CI matrix
chore: bump version to 0.6.0
- Code compiles with zero warnings on GCC, Clang, and MSVC
- All existing tests pass
- New HAL peripherals include stubs in
hal_extended_stubs.c - New services include a
CMakeLists.txtwith propertarget_link_libraries - Platform-specific code has
#ifdefguards for Windows, macOS, and Linux - No GCC-only builtins without portable fallbacks
- No hardcoded filesystem paths
- Commit messages follow conventional commits format
eos/
+-- hal/ # Hardware Abstraction Layer (33 peripherals)
+-- kernel/ # RTOS kernel + multicore (SMP/AMP)
+-- core/ # OS core, config, logging, compatibility layers
+-- include/eos/ # Global headers (eos_config.h, backend.h, package.h)
+-- products/ # 41 product profile headers
+-- services/ # Crypto, security, OTA, sensor, motor, filesystem
+-- drivers/ # Driver framework
+-- power/ # Power management
+-- net/ # Networking (sockets, HTTP, MQTT, mDNS)
+-- systems/ # Firmware assembly, rootfs, system image
+-- toolchains/ # Cross-compilation configs
+-- tests/ # Unit test suites
+-- examples/ # Example applications
+-- docs/ # Documentation
- Use GitHub Issues with the appropriate label (
bug,enhancement,question) - Include: OS, compiler version, product profile, and full error output
- For build failures: attach the full CMake configure + build log
By contributing, you agree that your contributions will be licensed under the MIT License.