Releases: byteshiftlabs/thunderos
ThunderOS v0.10.0 - System Control
Summary
ThunderOS v0.10.0 publishes the System Control milestone from main. This release adds graceful shutdown and reboot support from user space and includes the release-hardening work needed for the public ThunderOS repository.
Changes
- Added
sys_poweroff()andsys_reboot()together with thepoweroffandrebootuserland utilities - Added SBI SRST, legacy SBI, and QEMU test-device fallback paths for reliable shutdown and reboot on the supported QEMU environment
- Hardened VirtIO, ext2, signals, errno handling, process isolation, and build/test workflows since
v0.9.0 - Added
SECURITY.md, CodeQL, dependency review, and pinned documentation dependencies for the public release path - Aligned release metadata, documentation, and runtime banners to
v0.10.0
Verification
make clean && make -j2 && make testmake -C docs clean html SPHINXOPTS='-W --keep-going'
ThunderOS v0.9.0 - Synchronization
ThunderOS v0.9.0 - Synchronization
This release adds blocking I/O and synchronization primitives to ThunderOS.
Features
Wait Queues
- Core sleep/wakeup mechanism for blocking I/O
- Integrated into pipe read/write for proper blocking behavior
- Processes sleep when pipe is empty (read) or full (write)
Mutexes & Semaphores
mutex_twith lock/unlock/trylock operationssemaphore_twith wait/signal/trywait operations- Owner tracking for mutexes
Condition Variables
cond_tfor thread coordination- Wait atomically releases mutex and sleeps
- Signal wakes one waiter, broadcast wakes all
Reader-Writer Locks
rwlock_tallowing multiple concurrent readers or one exclusive writer- Writer priority to prevent starvation
New Syscalls (16 total)
| Category | Syscalls |
|---|---|
| Mutex | SYS_MUTEX_CREATE, SYS_MUTEX_LOCK, SYS_MUTEX_TRYLOCK, SYS_MUTEX_UNLOCK, SYS_MUTEX_DESTROY |
| Condition Variable | SYS_COND_CREATE, SYS_COND_WAIT, SYS_COND_SIGNAL, SYS_COND_BROADCAST, SYS_COND_DESTROY |
| RWLock | SYS_RWLOCK_CREATE, SYS_RWLOCK_READ_LOCK, SYS_RWLOCK_READ_UNLOCK, SYS_RWLOCK_WRITE_LOCK, SYS_RWLOCK_WRITE_UNLOCK, SYS_RWLOCK_DESTROY |
Test Programs
| Test | Result |
|---|---|
mutex_test |
8/8 PASS |
condvar_test |
All PASS |
rwlock_test |
7/7 PASS |
Release Criteria Met
- ✅ Blocking I/O works properly with wakeup mechanisms
- ✅ Pipes block readers when empty, writers when full
- ✅ Mutex/semaphore primitives functional
- ✅ No busy-waiting in kernel
ThunderOS v0.8.0 - Compatibility
Version 0.8.0 - Compatibility
Major release with POSIX compatibility features.
Job Control & Signals
- Process groups and sessions
- Background processes with
&,fg,bg,jobs - Ctrl+C sends SIGINT, Ctrl+Z sends SIGTSTP
I/O & Shell
- I/O redirection (
>,<,>>) - Pipes (
cmd1 | cmd2) - Command history (up/down arrows)
- Tab completion
- Shell scripting support
Filesystem & POSIX
- ext2 file/directory removal
- Relative path resolution
- Environment variables
- File permissions and ownership (
chmod,chown)
Graphics Console
- Framebuffer console with VirtIO GPU
- Bitmap font rendering (8x16)
- GPU-backed virtual terminal
Bug Fixes
- Fixed nested trap sscratch corruption causing instruction page fault
ThunderOS v0.7.0 - Virtual Terminals and VirtIO GPU 2D Driver
What's New
This release adds a virtual terminal system with 6 independent shells (VT1-VT6), switchable via ESC+1-6.
Key Features
- Virtual Terminals: 6 VTs with ESC+1-6 switching
- VirtIO GPU 2D driver: 800×600 framebuffer support
- 4 new syscalls: gettty, settty, getprocs, uname
- 6 new utilities: ps, uname, uptime, whoami, tty, kill
- Per-terminal input buffers and process isolation
- Refactored shell (ush.c)
Stats
- System calls: 32 → 35
- Shell commands: 18 → 23
See CHANGELOG.md for full details.
ThunderOS v0.6.0 - User Shell
ThunderOS v0.6.0 - User Shell
This release introduces significant improvements to the test infrastructure, code quality, and developer experience.
🎨 Highlights
- Clean Code Refactoring: Major refactoring of kernel main with helper functions and named constants
- Improved Build Output: Colorful, categorized build output for userland programs
- CI Pipeline Fixes: Resolved TERM environment variable issues for non-interactive environments
- Test Infrastructure: Added CI mode detection for reliable automated testing
✨ New Features
- User shell with interactive command support
- ELF binary loading and execution
- Comprehensive userland programs (cat, ls, pwd, mkdir, rm, etc.)
🔧 Improvements
- Refactored kernel/main.c with 8 static helper functions
- Replaced magic numbers with named constants
- Added TERM environment variable handling to test scripts
- Improved CI workflow with duplicate output removal
- Enhanced build script with visual progress indicators
📚 Documentation
- Updated CHANGELOG with detailed v0.6.0 notes
- Updated ROADMAP with release status
- Added code quality and testing documentation
🛠️ Technical Changes
- Test runner now detects CI mode automatically
- Build output categorized by program type (shell, utilities, test programs)
- Removed backup files and dead code
Full Changelog: v0.5.0...v0.6.0
ThunderOS v0.5.0 - Communication
🎉 ThunderOS v0.5.0 - Communication
This release introduces process communication capabilities to ThunderOS, enabling multi-process applications through fork(), pipes, and signals.
✨ Highlights
Fork System Call
- Complete process forking with full memory isolation
- Parent receives child PID, child receives 0
- Independent address spaces with copy-on-write semantics
- Proper trap frame and page table duplication
Pipe-Based IPC
- Non-blocking anonymous pipes for inter-process communication
- 4KB circular buffer per pipe
sys_pipe()syscall for pipe creationread()/write()operations on pipe file descriptors
Signal Handling
- SIGCHLD signal sent when child process exits
waitpid()blocks parent until child terminates- Process reaping to prevent zombie processes
🐛 Bug Fixes
- Fixed trap frame preservation across context switches
- Fixed child process return values (child now correctly returns 0)
- Fixed page table switching order in scheduler (moved after context_switch_asm)
📚 Documentation
- Added comprehensive
sys_fork()documentation to syscalls.rst - Added complete pipe IPC documentation (pipes.rst)
- Updated CHANGELOG.md with all v0.5.0 changes
- Marked ROADMAP.md v0.5.0 criteria complete
✅ Testing
- DMA Tests: 10/10 passing
- Memory Isolation Tests: 15/15 passing
- Boot: Clean with no debug output
- Userland: fork_test and pipe_test validate functionality
⚠️ Known Limitations
- Pipes are non-blocking (return EAGAIN when empty)
- No pipe capacity limits enforced yet
- Signal handling limited to SIGCHLD only
- Blocking I/O deferred to v0.10.0
📦 Syscalls Added
sys_fork()- Fork current processsys_pipe()- Create anonymous pipe pair
See CHANGELOG.md for complete details.
ThunderOS v0.4.0 - Persistence
ThunderOS v0.4.0 - "Persistence"
Fourth release of ThunderOS featuring persistent storage capabilities with VirtIO block device driver, ext2 filesystem, and ELF program loader.
� Highlights
- VirtIO Block Driver: Modern MMIO interface with 64-bit addressing, DMA integration
- ext2 Filesystem: Full read/write support with 4KB blocks, files up to ~4MB
- Virtual Filesystem (VFS): Abstraction layer for multiple filesystem types
- ELF64 Loader: Execute RISC-V programs from disk with memory isolation
- Interactive Shell: Commands for ls, cat, and program execution
- Comprehensive Documentation: Complete internals docs for all new components
📦 New Components
Storage Stack
kernel/drivers/virtio_blk.c- VirtIO block device driver (525 lines)kernel/fs/ext2_*.c- ext2 filesystem implementation (2,250+ lines)kernel/fs/vfs.c- Virtual Filesystem layer (499 lines)kernel/core/elf_loader.c- ELF64 program loader (216 lines)kernel/core/shell.c- Interactive shell (358 lines)
User Programs
userland/hello.c- Hello world programuserland/cat.c- File display utilityuserland/ls.c- Directory listing utility
🔧 Technical Specifications
- VirtIO: Modern MMIO at 0x10008000, 256-entry descriptor rings, DMA-capable
- ext2: 4KB blocks, 128/256-byte inodes, direct + single indirect blocks
- ELF: ELF64 RISC-V executables, isolated page tables, NX protection
- VFS: 64 file descriptors, mount point management, POSIX-like API
📖 Documentation
New comprehensive documentation:
- VirtIO Block Driver Internals (
docs/source/internals/virtio_block.rst) - ext2 Filesystem Implementation (
docs/source/internals/ext2_filesystem.rst) - VFS Architecture (
docs/source/internals/vfs.rst) - ELF Loader (
docs/source/internals/elf_loader.rst)
🚀 Usage
# Build ThunderOS
make clean && make
# Create disk image with ext2 filesystem
./build_disk.sh
# Run with VirtIO block device
make qemu-diskIn ThunderOS shell:
ThunderOS> ls /
ThunderOS> cat /test.txt
ThunderOS> /bin/hello
✅ Testing
All tests passing:
- VirtIO I/O operations (100-600 polling iterations)
- ext2 read/write operations
- ELF program loading and execution
- Shell commands (ls, cat, program execution)
- GitHub Actions CI with disk image creation
📊 Statistics
- Total Lines Added: ~10,500
- New Files: 54
- Components: 4 major subsystems (VirtIO, ext2, VFS, ELF)
- Documentation: 4 comprehensive RST files (3,200+ lines)
🔗 Links
- CHANGELOG - Detailed release notes
- ROADMAP - Future development plans
- Documentation - Technical documentation
🎓 What's Next (v0.5.0 - "Communication")
- Inter-process communication (pipes)
- Shared memory support
- Signals (SIGKILL, SIGTERM, etc.)
- VirtIO network driver
- Basic TCP/IP stack
Full Changelog: v0.3.0...v0.4.0
ThunderOS v0.3.0 - Memory Foundation
ThunderOS v0.3.0 - Memory Foundation
Release Date: November 10, 2025
Overview
Advanced memory management infrastructure for device drivers, including DMA allocation, address translation, and memory barriers. This release builds the foundation for VirtIO device drivers in v0.4.0.
✨ New Features
DMA Memory Allocator
- Physically contiguous memory allocation for device DMA
- Address tracking (physical and virtual)
- Memory zeroing support
- Region statistics and validation
Memory Barriers
- Complete RISC-V fence instruction suite
- Full, read, write, and I/O barriers
- Data synchronization barriers
- Instruction synchronization (fence.i)
Enhanced Address Translation
- Virtual-to-physical translation with page table walking
- Physical-to-virtual helpers
- Kernel virtual address utilities
- Error handling for invalid addresses
Testing & Documentation
- 10 comprehensive tests for DMA, barriers, and translation
- Exhaustive Sphinx documentation
- API reference and usage examples
📊 Release Criteria (All Met)
- ✅ DMA allocator works reliably
- ✅ Virtual-to-physical translation accurate
- ✅ Memory barriers implemented for device I/O
- ✅ Foundation ready for VirtIO device drivers
🔧 Technical Details
- DMA Region Tracking: Linked list with magic number validation
- Memory Barriers: RISC-V fence instructions (rw, r, w, io)
- Address Translation: 3-level Sv39 page table walking
- Platform: QEMU virt machine (tested with 128MB-512MB RAM)
📦 Toolchain Updates
- Switched to
riscv64-unknown-elf-gcc(bare-metal toolchain) - Updated Dockerfile for CI/CD compatibility
- Fixed GitHub Actions build issues
See CHANGELOG.md for complete details.
ThunderOS v0.2.0 - User Space
🎉 ThunderOS v0.2.0 "User Space" - RELEASED!
Release Date: November 9, 2025
🚀 Major Milestone
Complete user-mode support with memory protection, system calls, and exception handling.
✨ Key Features
- User-mode processes with privilege separation (U-mode)
- 13 system calls fully implemented and tested
- Memory isolation between processes using Sv39 paging
- Exception handling - graceful user process termination
- Automated testing with 6/6 tests passing
📋 System Calls
write, exit, getpid, sleep, getppid, getuid, getgid, setuid, setgid, getcwd, chdir, time, sbrk
🧪 Testing Results
- ✅ User programs run safely in unprivileged mode
- ✅ Memory protection enforced (page faults handled gracefully)
- ✅ System calls work reliably
- ✅ User exceptions don't crash the system
📁 Files
-
- Kernel binary
-
- Raw binary
*Ready for v0.3.0 "Persistence"push origin release/v0.2.0 🎯
ThunderOS v0.1.0 - First Boot
See CHANGELOG.md for details.