Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/asbp/myos
A simple OS
https://github.com/asbp/myos
operating-system rust rust-lang
Last synced: about 2 months ago
JSON representation
A simple OS
- Host: GitHub
- URL: https://github.com/asbp/myos
- Owner: asbp
- Created: 2023-07-24T03:23:50.000Z (over 1 year ago)
- Default Branch: main
- Last Pushed: 2023-07-25T00:15:30.000Z (over 1 year ago)
- Last Synced: 2023-07-25T01:33:20.596Z (over 1 year ago)
- Topics: operating-system, rust, rust-lang
- Language: Rust
- Homepage:
- Size: 16.6 KB
- Stars: 0
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
## myOS
This is a simple OS based on [Writing an OS in Rust](https://os.phil-opp.com/ "Home") by Philipp Oppermann, with some changes:- It uses VGA driver from https://github.com/rust-osdev/vga.
- It uses buddy system allocator from https://github.com/rcore-os/buddy_system_allocator.
- It incorporates Hashbrown from https://github.com/rust-lang/hashbrown for HashMap implementation.
- It uses event emitter/listener model for interrupts, inspired by http://thispage.tech:9680/jclee1995/rust-eventemitter.
- It features a simple command interpreter in which the command parsing is powered by https://github.com/comex/rust-shlex.## How to run?
You must have QEMU installed on your machine, then run `cargo run`. If the compilation process succeed, then a QEMU window will appear.## Todo
- [ ] Filesystem feature (for rootfs I choose ext4)
- [ ] Time and date
- [ ] Concurrency (important for running external binaries)
- [ ] Ability to run binary
- [ ] Attachable/Detachable device drivers
- [ ] Portability (currently only supports x86-64 BIOS system)## Q&A
### Q: How mature is this OS?
This OS is just my hobby OS so the pace of the development is depending on my spare time. For now, it just simple imitation of DOS. Feel free to contribute or create an Issue if you want to request a new feature.### Q: Why using event emitter/listener model?
For simple usage, I just want to avoid directly tapping to interrupt handler (or create another one).### Q: What can I do with the command interpeter?
Right now it just three:1. `whoami`: it returns `github`.
2. `greet `: it displays `Hello, !`. For example, command `greet Somebody` will outputs `Hello, Somebody!`.
3. `add <...numbers>`: it will add numbers specified in `numbers` argument and then display the result. For example, `add 25 25 10` will display `60`.