{"id":20826721,"url":"https://github.com/cedrickchee/taijios","last_synced_at":"2026-02-19T17:30:51.383Z","repository":{"id":138118951,"uuid":"506967021","full_name":"cedrickchee/taijios","owner":"cedrickchee","description":"TaijiOS is a hobby operating system written from scratch in Rust for learning systems programming. It's my own OS that attempts to bring back the \"P\" in PC. Design goals: minimal, modular, reliable, and safe.","archived":false,"fork":false,"pushed_at":"2022-11-28T09:18:01.000Z","size":592,"stargazers_count":3,"open_issues_count":0,"forks_count":1,"subscribers_count":2,"default_branch":"main","last_synced_at":"2025-09-10T04:56:35.288Z","etag":null,"topics":["computer-science","hobby-os","kernel-development","learn-by-doing","operating-system","osdev","software-internal","systems-programming"],"latest_commit_sha":null,"homepage":"","language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/cedrickchee.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2022-06-24T10:18:58.000Z","updated_at":"2025-02-21T15:55:12.000Z","dependencies_parsed_at":null,"dependency_job_id":"5b041b03-f061-406b-ab33-4fef076d3d4e","html_url":"https://github.com/cedrickchee/taijios","commit_stats":null,"previous_names":[],"tags_count":12,"template":false,"template_full_name":null,"purl":"pkg:github/cedrickchee/taijios","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cedrickchee%2Ftaijios","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cedrickchee%2Ftaijios/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cedrickchee%2Ftaijios/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cedrickchee%2Ftaijios/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/cedrickchee","download_url":"https://codeload.github.com/cedrickchee/taijios/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cedrickchee%2Ftaijios/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29624452,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-19T13:04:20.082Z","status":"ssl_error","status_checked_at":"2026-02-19T13:03:33.775Z","response_time":117,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["computer-science","hobby-os","kernel-development","learn-by-doing","operating-system","osdev","software-internal","systems-programming"],"created_at":"2024-11-17T23:09:50.892Z","updated_at":"2026-02-19T17:30:51.355Z","avatar_url":"https://github.com/cedrickchee.png","language":"Rust","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cdiv align=\"center\"\u003e\n\n  \u003cimg src=\"https://raw.githubusercontent.com/cedrickchee/taijios/main/docs/assets/logo.png?token=GHSAT0AAAAAABO5A33CROYJHB6U3ZQBSRTWY4BYJ5A\" alt=\"Image generated by Stable Diffusion v2.0 — stylish computer from 1980s Miami, pink and blue neon color scheme, cyberpunk\" width=\"200\" height=\"auto\" /\u003e\n  \u003ch1\u003eTaijiOS\u003c/h1\u003e\n  \n  \u003cp\u003e\n    TaijiOS is a hobby operating system written from scratch in Rust for learning systems programming and OSdev.\n  \u003c/p\u003e\n  \n  \n\u003c!-- Badges --\u003e\n\u003c!--\n\u003cp\u003e\n  \u003ca href=\"https://github.com/cedrickchee/tiny-os/graphs/contributors\"\u003e\n    \u003cimg src=\"https://img.shields.io/github/contributors/cedrickchee/tiny-os\" alt=\"contributors\" /\u003e\n  \u003c/a\u003e\n  \u003ca href=\"\"\u003e\n    \u003cimg src=\"https://img.shields.io/github/last-commit/cedrickchee/tiny-os\" alt=\"last update\" /\u003e\n  \u003c/a\u003e\n  \u003ca href=\"https://github.com/cedrickchee/tiny-os/network/members\"\u003e\n    \u003cimg src=\"https://img.shields.io/github/forks/cedrickchee/tiny-os\" alt=\"forks\" /\u003e\n  \u003c/a\u003e\n  \u003ca href=\"https://github.com/cedrickchee/tiny-os/stargazers\"\u003e\n    \u003cimg src=\"https://img.shields.io/github/stars/cedrickchee/tiny-os\" alt=\"stars\" /\u003e\n  \u003c/a\u003e\n  \u003ca href=\"https://github.com/cedrickchee/tiny-os/issues/\"\u003e\n    \u003cimg src=\"https://img.shields.io/github/issues/cedrickchee/tiny-os\" alt=\"open issues\" /\u003e\n  \u003c/a\u003e\n  \u003ca href=\"https://github.com/cedrickchee/tiny-os/blob/master/LICENSE\"\u003e\n    \u003cimg src=\"https://img.shields.io/github/license/cedrickchee/tiny-os.svg\" alt=\"license\" /\u003e\n  \u003c/a\u003e\n\u003c/p\u003e\n   \n\u003ch4\u003e\n    \u003ca href=\"https://github.com/cedrickchee/tiny-os/\"\u003eView Demo\u003c/a\u003e\n  \u003cspan\u003e · \u003c/span\u003e\n    \u003ca href=\"https://github.com/cedrickchee/tiny-os\"\u003eDocumentation\u003c/a\u003e\n  \u003cspan\u003e · \u003c/span\u003e\n    \u003ca href=\"https://github.com/cedrickchee/tiny-os/issues/\"\u003eReport Bug\u003c/a\u003e\n  \u003cspan\u003e · \u003c/span\u003e\n    \u003ca href=\"https://github.com/cedrickchee/tiny-os/issues/\"\u003eRequest Feature\u003c/a\u003e\n  \u003c/h4\u003e\n--\u003e\n\u003c/div\u003e\n\n\u003cbr /\u003e\n\n\u003c!-- Table of Contents --\u003e\n# Table of Contents\n\n- [About the Project](#about-the-project)\n  * [Demo](#demo)\n  * [Status](#status)\n- [Building](#building)\n- [Creating a Bootimage](#creating-a-bootimage)\n- [Running](#running)\n- [Testing](#testing)\n- [TODO](#todo)\n- [Readings](#readings)\n- [Acknowledgements](#acknowledgements)\n- [License](#license)\n\n## About the Project\n\nThis project implements a [microkernel](microkernel). It's a minimal 64-bit OS\nkernel for x86 architecture.\n\nCurrently, the kernel boots without crashing and can print something to the\nscreen. Keyboard input is working. (see a demo below)\n\n[microkernel]: https://en.wikipedia.org/wiki/Microkernel\n\n### Demo\n\nhttps://user-images.githubusercontent.com/145605/204237803-46bd5d8d-eadd-438a-b9f2-5af92c6ccad5.mp4\n\n\u003c!--\n\u003cdiv align=\"center\"\u003e\n  \u003cimg src=\"docs/assets/qemu-boot-screen.png\" width=\"600\" height=\"auto\" alt=\"screenshot\" /\u003e\n\u003c/div\u003e\n--\u003e\n\n### Status\n\nThis repository contains my **Work-In-Progress (WIP)** code. Things are still\nunstable. \"Here be dragons\".\n\n**About Multitasking**\n\nCooperative multitasking is working. I'm implementing preemptive multitasking.\n\n## About the Code\n\nThe code for each feature lives in a separate git tag. This makes it possible to\nsee the intermediate state after each feature.\n\nThe latest code is available in the \"main\" branch.\n\nYou can find the tag for each feature by following the link in the feature list\nbelow.\n\nYou can check out a tag in a subdirectory using git:\n\n```sh\n# make sure that the tag exists locally by doing\n$ git fetch --tags\n\n# check out the tag by running\n$ git checkout tags/09-paging-implementation\n```\n\n### Features\n\nA side-effect of this project is that you can follow the tags for each features\nin the following order to see how the kernel evolved:\n\n1. [A Rust executable that does not link the stdlib](https://github.com/cedrickchee/taijios/releases/tag/01-freestanding-rust-binary)\n2. [A minimal Rust kernel](https://github.com/cedrickchee/taijios/releases/tag/02-minimal-rust-kernel)\n3. [Print text to the screen in VGA text buffer](https://github.com/cedrickchee/taijios/releases/tag/03-vga-text-buffer)\n4. [Unit and integration testing](https://github.com/cedrickchee/taijios/releases/tag/04-testing)\n5. [Interrupt: CPU exceptions](https://github.com/cedrickchee/taijios/releases/tag/05-cpu-exceptions)\n6. [Interrupt: Double fault handler](https://github.com/cedrickchee/taijios/releases/tag/06-double-faults)\n7. [Interrupt: Hardware, timer interrupts, keyboard input](https://github.com/cedrickchee/taijios/releases/tag/07-hardware-interrupts)\n8. [Memory: Concept of paging](https://github.com/cedrickchee/taijios/releases/tag/08-paging-introduction)\n9. [Memory: Paging implementation](https://github.com/cedrickchee/taijios/releases/tag/09-paging-implementation)\n10. [Memory: Dynamic memory, implement basic support for heap allocations](https://github.com/cedrickchee/taijios/releases/tag/10-heap-allocation)\n11. [Memory: Implement heap allocators from scratch](https://github.com/cedrickchee/taijios/releases/tag/11-allocator-designs)\n12. [Cooperative multitasking: Task, create a simple executor](https://github.com/cedrickchee/taijios/releases/tag/12-multitasking-async-await)\n\n## Building\n\n**Install Rust nightly**\n\nThis project requires a nightly version of Rust because it uses some unstable\nfeatures. At least nightly _2020-07-15_ is required for building. You might need\nto run `rustup update nightly --force` to update to the latest nightly even if\nsome components such as `rustfmt` are missing it.\n\n\n**The [`build-std` feature][cargo-build-std] of Cargo**\n\nBuilding the kernel for our new target will fail if we don't use the feature. To\nuse the feature, we need to create a [Cargo configuration][cargo-config] file at\n`.cargo/config.toml` with the following content:\n\n```toml\n...\n\n[unstable]\nbuild-std = [\"core\", \"compiler_builtins\"]\n```\n\n[cargo-build-std]: https://doc.rust-lang.org/nightly/cargo/reference/unstable.html#build-std\n[cargo-config]: https://doc.rust-lang.org/cargo/reference/config.html\n\n\n**Memory-Related Intrinsics**\n\nThe Rust compiler assumes that a certain set of built-in functions is available\nfor all systems. Most of these functions are provided by the `compiler_builtins`\ncrate that we just recompiled. However, there are some memory-related functions\nin that crate that are not enabled by default because they are normally provided\nby the C library on the system. These functions include `memset`, `memcpy`, and\n`memcmp`.\n\nSince we can’t link to the C library of the operating system, we need an\nalternative way to provide these functions to the compiler.\n\nFortunately, the `compiler_builtins` crate already contains implementations for\nall the needed functions, they are just disabled by default to not collide with\nthe implementations from the C library. We can enable them by setting cargo’s\n[build-std-features]\n(https://doc.rust-lang.org/nightly/cargo/reference/unstable.html#build-std-features)\nflag to `[\"compiler-builtins-mem\"]`. This can be configured in the `unstable`\ntable in the `.cargo/config.toml` file.\n\n```toml\n...\n\n[unstable]\nbuild-std-features = [\"compiler-builtins-mem\"]\nbuild-std = [\"core\", \"compiler_builtins\"]\n```\n\n(Support for the `compiler-builtins-mem` feature was only [added very recently]\n(https://github.com/rust-lang/rust/pull/77284), so you need at least Rust\nnightly 2020-09-30 for it.)\n\nWith this change, our kernel has valid implementations for all compiler-required\nfunctions, so it will continue to compile even if our code gets more complex.\n\n**Set a Default Target**\n\nTo avoid passing the `--target` parameter on every invocation of `cargo build`,\nwe can override the default target. To do this, we add the following to our\ncargo configuration file at `.cargo/config.toml`:\n\n```toml\n...\n\n[build]\ntarget = \"x86_64-tiny_os.json\"\n```\n\nThis tells cargo to use our `x86_64-tiny_os.json` target when no explicit\n`--target` argument is passed. This means that we can now build our kernel with\na simple `cargo build`.\n\n\n**We are now able to build our kernel for a bare metal target!**\n\nTo build this project, run:\n\n```sh\n$ cargo build\n  Downloaded getopts v0.2.21\n  ...\n  Downloaded libc v0.2.126\n  Downloaded compiler_builtins v0.1.73\n  Downloaded cc v1.0.69\n  ...\n  Downloaded 14 crates (2.1 MB) in 1.36s\n   Compiling core v0.0.0 (~/.rustup/toolchains/nightly-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/library/core)\n   Compiling compiler_builtins v0.1.73\n   Compiling rustc-std-workspace-core v1.99.0 (~/.rustup/toolchains/nightly-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/library/rustc-std-workspace-core)\n   Compiling tiny-os v0.1.0 (~/repo/github/tiny-os)\n    Finished dev [unoptimized + debuginfo] target(s) in 11.90s\n```\n\n\u003cdetails\u003e\n  \u003csummary\u003eIf you encountered linker errors\u003c/summary\u003e\nThe linker is a program that combines the generated code into an executable.\nSince the executable format differs between Linux, Windows, and macOS, each\nsystem has its own linker that throws a different error. The fundamental cause\nof the errors is the same: the default configuration of the linker assumes that\nour program depends on the C runtime, which it does not.\n\nTo solve the errors, we need to tell the linker that it should not include the C\nruntime. We can do this either by passing a certain set of arguments to the\nlinker or by building for a bare metal target.\n\n**Building for a Bare Metal Target**\n\nBy default Rust tries to build an executable that is able to run in your current\nsystem environment. For example, if you’re using Windows on `x86_64`, Rust tries\nto build a `.exe` Windows executable that uses `x86_64` instructions. This\nenvironment is called your “host” system.\n\nTo describe different environments, Rust uses a string called [target\ntriple](https://clang.llvm.org/docs/CrossCompilation.html#target-triple).\n\nBy compiling for our host triple, the Rust compiler and the linker assume that\nthere is an underlying operating system such as Linux or Windows that use the C\nruntime by default, which causes the linker errors. So to avoid the linker\nerrors, we can compile for a different environment with no underlying operating\nsystem.\n\nAn example for such a bare metal environment is the `thumbv7em-none-eabihf` target\ntriple, which describes an embedded ARM system. The details are not important,\nall that matters is that the target triple has no underlying operating system,\nwhich is indicated by the `none` in the target triple. To be able to compile for\nthis target, we need to add it in rustup:\n\n```sh\n$ rustup target add thumbv7em-none-eabihf\ninfo: downloading component 'rust-std' for 'thumbv7em-none-eabihf'\ninfo: installing component 'rust-std' for 'thumbv7em-none-eabihf'\n```\n\nThis downloads a copy of the standard (and core) library for the system. Now we\ncan build our freestanding executable for this target:\n\n```sh\n$ cargo build --target thumbv7em-none-eabihf\n   Compiling tiny-os v0.1.0 (/home/neo/dev/work/repo/github/tiny-os)\n    Finished dev [unoptimized + debuginfo] target(s) in 0.78s\n```\n\nBy passing a `--target` argument we cross compile our executable for a bare\nmetal target system. Since the target system has no operating system, the\nlinker does not try to link the C runtime and our build succeeds without any\nlinker errors.\n\nThis is the approach that we will use for building our OS kernel. Instead of\n`thumbv7em-none-eabihf`, we will use a [custom target](https://doc.rust-lang.org/rustc/targets/custom.html) that describes a `x86_64`\nbare metal environment. The details will be explained in the next post.\n\u003c/details\u003e\n\n## Creating a Bootimage\n\nTo turn our compiled kernel into a bootable disk image, we need to link it with\na bootloader. The bootloader is responsible for initializing the CPU and loading\nour kernel.\n\nTo create a bootable disk image from the compiled kernel, you need to install\nthe [`bootimage`] tool:\n\n[`bootimage`]: https://github.com/rust-osdev/bootimage\n\n```\n$ cargo install bootimage\n```\n\nFor running bootimage and building the bootloader, you need to have the\n`llvm-tools-preview` rustup component installed. You can install it by executing\n`rustup component add llvm-tools-preview`.\n\nAfter installing, you can create the bootable disk image by running:\n\n```\n$ cargo bootimage\nBuilding kernel\n   Compiling bootloader v0.9.22\n   Compiling tiny-os v0.1.0 (/home/neo/dev/work/repo/github/tiny-os)\n    Finished dev [unoptimized + debuginfo] target(s) in 0.49s\nBuilding bootloader\n   ...\n   Compiling bootloader v0.9.22 (~/.cargo/registry/src/github.com-1ecc6299db9ec823/bootloader-0.9.22)\n   Compiling compiler_builtins v0.1.73\n   ...\n   Compiling x86_64 v0.14.7\n    Finished release [optimized + debuginfo] target(s) in 2.90s\nCreated bootimage for `tiny-os` at `~/repo/github/tiny-os/target/x86_64-tiny_os/debug/bootimage-tiny-os.bin`\n```\n\nThis creates a bootable disk image in the `target/x86_64-tiny_os/debug`\ndirectory.\n## Running\n\nYou can run the disk image in [QEMU] through:\n\n[QEMU]: https://www.qemu.org/\n\n```\n$ cargo run\n    Finished dev [unoptimized + debuginfo] target(s) in 0.03s\n     Running `bootimage runner target/x86_64-tiny_os/debug/tiny-os`\nBuilding bootloader\n    Finished release [optimized + debuginfo] target(s) in 0.06s\nRunning: `qemu-system-x86_64 -drive format=raw,file=target/x86_64-tiny_os/debug/bootimage-tiny-os.bin`\n```\n\n[QEMU] and the [`bootimage`] tool need to be installed for this.\n\nYou can also write the image to an USB stick for booting it on a real machine.\nOn Linux, the command for this is:\n\n```\n$ dd if=target/x86_64-tiny_os/debug/bootimage-tiny-os.bin of=/dev/sdX \u0026\u0026 sync\n```\n\nWhere `sdX` is the device name of your USB stick. **Be careful** to choose the\ncorrect device name, because everything on that device is overwritten.\n\n## Testing\n\nTo run the unit and integration tests, execute `cargo test`.\n\n## TODO\n\nNow:\n\n- [ ] Preemptive multitasking\n  - [ ] Threads (a common form of preemptive multitasking)\n  - [ ] Utilize multiple CPU cores\n  - [ ] Processes and multiprocesses\n- [ ] Heap allocators - Bump allocator (now). Explore arena allocator. (there is\n  no \"best\" allocator design that fits all cases)\n- We are able to interact with our kernel and have some fundamental building\n  blocks for creating a:\n  - [ ] Tiny shell\n  - [ ] Simple programs\n- [ ] Improve I/O\n- [ ] File system\n\nFuture:\n- [ ] Re-implement boot loader from scratch\n- [ ] ARM port\n- [ ] RISC-V port\n\n## Readings\n\nI planned to read these articles or blog posts and do some literature review\nalong the way.\n\n- The Global Descriptor Table (GDT)\n\n  GDT is a relict that was used for memory segmentation before paging became the\n  de facto standard. It is still needed in 64-bit mode for various things such\n  as kernel/user mode configuration or TSS loading.\n\n  For more information about segmentation check out the equally named chapter of\n  the free [OS \"Three Easy Pieces\" (OSTEP) book](http://pages.cs.wisc.edu/%7Eremzi/OSTEP/).\n\n- The x86-interrupt calling convention\n\n  A powerful abstraction that hides almost all of the messy details of the\n  exception handling process.\n\n- The breakpoint exception is commonly used in debuggers: When the user sets a\n  breakpoint, the debugger overwrites the corresponding instruction with the\n  int3 instruction so that the CPU throws the breakpoint exception when it\n  reaches that line.\n\n  For more details, see the [\"How debuggers work\"](https://eli.thegreenplace.net/2011/01/27/how-debuggers-work-part-2-breakpoints)\n\n- Configuring the Timer\n\n  The hardware timer that we use is called the _Programmable Interval Timer_\n  or PIT for short. The OSDev wiki has an extensive article about the\n  [configuring the PIT](https://wiki.osdev.org/Programmable_Interval_Timer).\n\n- Memory management\n\n  Important topics to read again: Segmentation, Virtual Memory, Fragmentation,\n  Paging, Hidden Fragmentation, Page Tables, and Multilevel Page Tables.\n\n  The fragmentation problem is one of the reasons that segmentation is no\n  longer used by most systems. In fact, segmentation is not even supported in\n  64-bit mode on x86 anymore. Instead _paging_ is used, which completely\n  avoids the fragmentation problem.\n\n- Fixed-size block allocator\n\n  Allocators used in OS kernels are typically highly optimized to the specific\n  workload of the kernel.\n\n  For more info, check out [\"The Linux kernel memory allocators\"](https://argp.github.io/2012/01/03/linux-kernel-heap-exploitation/).\n\n## Acknowledgements\n\nMany work have indirectly contributed to this project. Here are some of the work\nthat I would like to thank them:\n\n\u003cdetails\u003e\n  \u003csummary\u003eBlog Posts, Articles, Presentations, and Papers\u003c/summary\u003e\n\n- [Is It Time to Rewrite the Operating System in Rust?](https://www.infoq.com/presentations/os-rust/) - A presentation  (by Bryan Cantrill at QCon\n- [CS-537: Introduction to Operating Systems](https://pages.cs.wisc.edu/~remzi/Classes/537/Spring2018) class by Remzi H. (UW-Madison)\n- [Learning to build an Operating System in Rust via CS140e](https://downey.io/blog/cs140e-writing-an-operating-system-in-rust/)\n- Alex Light's [Reenix: Implementing a Unix-Like Operating System in Rust](https://scialex.github.io/reenix.pdf) paper (Brown University, Dept of ComSci)\n- [BlogOS](https://os.phil-opp.com)\n- [Bare Metal Rust: Building kernels in Rust](http://www.randomhacks.net/bare-metal-rust/)\n- [Rust-OS Kernel - To userspace and back!](https://nfil.dev/kernel/rust/coding/rust-kernel-to-userspace-and-back/)\n  - I refer to this post for my preemptive multitasking implementation:\n    - Context switching, syscall\n    - Writing a simple, round-robin task scheduler so that we can run multiple processes at once\n- [The development of OxidizedOS](https://ryan-jacobs1.github.io/)\n  - Threads and context switching\n  - Writing a cooperative schedule\n- [Getting to know Rust by building an OS](https://github.com/rbgrouleff/daft)\n- [Redox](https://www.redox-os.org/) - a Unix-like OS written in Rust, aiming to\n  bring the innovations of Rust to a modern microkernel and full set of apps.\n- [RISC-V OS using Rust](https://osblog.stephenmarz.com/)\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n  \u003csummary\u003eHobby OSes\u003c/summary\u003e\n\n- [MOROS](https://github.com/vinc/moros) - Obscure Rust Operating System.\n- [r3](https://github.com/Narasimha1997/r3) - A tiny multi-tasking hobby operating system kernel written in Rust.\n- [litchi-rs](https://github.com/BugenZhao/litchi-rs) - An x86-64 kernel with ~100% Rust (originally) in a week.\n- [A toy OS in Rust](https://github.com/emk/toyos-rs)\n- [juner_os](https://github.com/zzhgithub/juner_os) - This project combines elements from both blog_os and mal.\n  - [rCore](https://github.com/rcore-os/rCore) - Rust version of THU uCore OS Plus.\n- [LibertyOS's THANKYOU](https://github.com/LibertyOS-Development/kernel/blob/main/THANKYOU.md)\n- [QuiltOS](https://github.com/QuiltOS/QuiltOS) - A language-based OS to run Rust on bare metal. A fork of RustOS.\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n  \u003csummary\u003eUncategorized\u003c/summary\u003e\n\n- [OSDev Wiki](https://wiki.osdev.org/Main_Page)\n  - [Xv6](https://wiki.osdev.org/Xv6)\n    - [Xv6 Homepage](https://pdos.csail.mit.edu/6.828/2018/xv6.html) - Xv6, a simple Unix-like teaching OS\n      - [Xv6 code](https://github.com/mit-pdos/xv6-public) - Kernel hacking in Xv6\n    - [Commentary book on Xv6](https://pdos.csail.mit.edu/6.828/2018/xv6/book-rev10.pdf) in PDF, it is brief (less than 100 pages) and an easy reading\n  - [Brendan's Multi-tasking Tutorial](https://wiki.osdev.org/Brendan%27s_Multi-tasking_Tutorial)\n- [VSCode, GDB, and Debugging an OS](https://austinhanson.com/vscode-gdb-and-debugging-an-os/)\n- [High Assurance Rust: Developing Secure and Robust Software](https://highassurance.rs/chp3/modules.html) - The module system\n\n\u003c/details\u003e\n\n## License\n\nThis project is licensed under [MIT license](./LICENSE).\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcedrickchee%2Ftaijios","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fcedrickchee%2Ftaijios","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcedrickchee%2Ftaijios/lists"}