Thank you for your interest in contributing to ThunderOS! This guide will help you get started.
-
Read the documentation
- README.md - Project overview and quick start
- ROADMAP.md - Planned features and versioning
- CHANGELOG.md - What's already implemented
- docs/ - Full technical documentation (build with
make html)
-
Check current status
- Review open issues and pull requests
-
Set up your environment
- Follow setup instructions in docs/source/development.rst
- Initialize submodules:
git submodule update --init --recursive - Run the authoritative verification path first:
make docker-verify - Use native
make,make qemu, andmake debugonly after the Docker path is understood
- Open an issue with clear reproduction steps
- Include QEMU version, toolchain version, and OS
- Attach relevant error messages or kernel output
- Check ROADMAP.md first - feature might be planned
- Open an issue describing the feature and its use case
- Wait for maintainer feedback before implementing
-
Choose the right branch
- Active development:
dev/vX.Y.Z(check README for current version) - Never merge directly to
main- it's protected
- Active development:
-
Follow coding standards
- See docs/source/development/code_quality.rst
- Use
-O0optimization (for debugging) - Run
maketo check for compiler warnings
-
Write meaningful commit messages
- Keep messages short and concise
- Use past participle form ("Added", "Fixed", "Updated", not "Add", "Fix", "Update")
- Example:
Added syscalls: getppid, kill, gettime and comprehensive documentation - Example:
Enhanced PMM and kmalloc documentation - Example:
Fixed memory leak in kmalloc - Be specific about what changed, not why (details go in PR description)
-
Write tests
- Add tests in
tests/directory - Follow the KUnit-inspired framework in docs/source/internals/testing_framework.rst
- Add tests in
-
Document your changes
- Update relevant
.rstfiles indocs/source/ - Add entry to CHANGELOG.md under "Unreleased"
- Comment your code clearly
- Update relevant
-
Submit a pull request
- Target the current
dev/vX.Y.Zbranch - Write a clear PR description
- Reference related issues
- Include the verification command you ran (
make docker-verify, or explain why a narrower check was necessary) - Wait for review
- Target the current
external/userland/is versioned by the submodule commit recorded in this repository.- If your change requires userland work, commit and push the
thunderos-userlandchange first, then update the submodule pointer here intentionally. - Before opening a PR that touches the submodule pointer, verify with
make docker-verifyfrom the ThunderOS root.
ThunderOS uses AI assistance for development. See the ai-dev-prompts repository for guidelines on:
- Workflow conventions and prompt guidelines
- Code review and error handling standards
- Model-specific adapter layers
- Be respectful and constructive
- Focus on technical merit
- Help newcomers learn RISC-V and OS development
- Remember: this is an educational project
- Open a GitHub Discussion for general questions
- Use issues for specific bugs or features
- Check existing documentation first
By contributing, you agree that your contributions will be licensed under the same license as ThunderOS. See LICENSE.