A small learning OS
You will need:
- rustup and a nightly Rust (if yours doesn't work, then update to latest) build to compile;
- The
rust-src
component from rustup; - cargo-xbuild (
cargo install
it); - nasm;
- ld;
- qemu (to run in a virtual machine);
- X server to run qemu;
- GNU GRUB (grub-mkrescue);
- GNU make;
It will currently build on rustc 1.36.0-nightly (e305df184 2019-04-24)
.
You can make the iso with make iso
, and launch qemu and run it with make run
. To enable debug symbols,
add debug=1
to the make command. If this does not work, try make clean
ing and checking you're on the latest
rust/cargo-xbuild version. If this does still not work, then open an issue.
You can also get builds from Flower's CI/CD.
If you wish to PR something to Flower, thanks so much! Just note to please pull request into development, not master if you are making a change to the codebase.
Generally, the workflow for submitting a pull request goes like this:
- Open an issue that your PR aims to solve and request to be assigned. This is just so we don't have multiple people working on the same thing on different branches/forks.
- Fork flower
- Create a new branch from
development
(if you're editing code and not e.g the README) which briefly describes the thing you are doing, e.gacpi
. - Commit your things
- Open a pull request. Select base as
development
(again, if you're editing code). - Wait for review. Sorry if the reviews are a bit nitpicky -- @gegy1000 and @Restioson (the maintainers) usually write reviews like that. It does help to keep code quality good though.
- Debate review comments/implement requested changes.
- Repeat until everyone is happy with the changes.
- Your PR should be merged Soon™!
Generally, we try to follow the rust style guidline. To keep the code consistent, we ask if all contributors could also adhere to these guidelines. Unfortunately, we haven't run Clippy or Rustfmt on flower just yet, but this is slated to be done just before 0.2.0. Thus, please refrain from formatting things unrelated to the PR you are working on. This is to avoid merge conflicts.
Much thanks to:
- IntermezzOS and its guide;
- Steve Klabnik (its creator);
- Phil Opp and his blog OS;
- Redox;
- the people over on the Rust discord, such as:
- the people on the OSDev discord such as:
- the people part of the rust-osdev, such as
- the OsDev wiki;
- Bare Metal Rust;
- and Wikipedia (of course!);
This is not, of course, an exhaustive list!