{"id":13599868,"url":"https://github.com/arceos-org/arceos","last_synced_at":"2026-04-03T20:31:14.116Z","repository":{"id":97736253,"uuid":"605446225","full_name":"arceos-org/arceos","owner":"arceos-org","description":"An experimental modular OS written in Rust.","archived":false,"fork":false,"pushed_at":"2026-04-01T06:51:29.000Z","size":18529,"stargazers_count":747,"open_issues_count":40,"forks_count":426,"subscribers_count":16,"default_branch":"main","last_synced_at":"2026-04-01T09:07:59.123Z","etag":null,"topics":["modular","operating-system","os-components","osdev","rust","unikernel"],"latest_commit_sha":null,"homepage":"https://arceos.org/arceos/","language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/arceos-org.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE.Apache2","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,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2023-02-23T07:02:40.000Z","updated_at":"2026-03-31T08:09:44.000Z","dependencies_parsed_at":"2026-03-04T05:05:41.112Z","dependency_job_id":null,"html_url":"https://github.com/arceos-org/arceos","commit_stats":null,"previous_names":["rcore-os/arceos"],"tags_count":5,"template":false,"template_full_name":null,"purl":"pkg:github/arceos-org/arceos","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/arceos-org%2Farceos","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/arceos-org%2Farceos/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/arceos-org%2Farceos/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/arceos-org%2Farceos/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/arceos-org","download_url":"https://codeload.github.com/arceos-org/arceos/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/arceos-org%2Farceos/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31375769,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-03T17:53:18.093Z","status":"ssl_error","status_checked_at":"2026-04-03T17:53:17.617Z","response_time":107,"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":["modular","operating-system","os-components","osdev","rust","unikernel"],"created_at":"2024-08-01T17:01:14.624Z","updated_at":"2026-04-03T20:31:14.108Z","avatar_url":"https://github.com/arceos-org.png","language":"Rust","funding_links":[],"categories":["Rust","Rust 程序设计","Active"],"sub_categories":["网络服务_其他"],"readme":"# ArceOS\n\n[![CI](https://github.com/arceos-org/arceos/actions/workflows/build.yml/badge.svg?branch=main)](https://github.com/arceos-org/arceos/actions/workflows/build.yml)\n[![CI](https://github.com/arceos-org/arceos/actions/workflows/test.yml/badge.svg?branch=main)](https://github.com/arceos-org/arceos/actions/workflows/test.yml)\n[![Docs](https://img.shields.io/badge/docs-pages-green)](https://arceos-org.github.io/arceos/)\n\nAn experimental modular operating system (or unikernel) written in Rust.\n\nArceOS was inspired a lot by [Unikraft](https://github.com/unikraft/unikraft).\n\n🚧 Working In Progress.\n\n## Features \u0026 TODOs\n\n* [x] Architecture: x86_64, riscv64, aarch64, loongarch64\n* [x] Platform: QEMU pc-q35 (x86_64), virt (riscv64/aarch64/loongarch64)\n* [x] Multi-thread\n* [x] FIFO/RR/CFS scheduler\n* [x] VirtIO net/blk/gpu drivers\n* [x] TCP/UDP net stack using [smoltcp](https://github.com/smoltcp-rs/smoltcp)\n* [x] Synchronization/Mutex\n* [x] SMP scheduling with [per-cpu run queue](https://github.com/arceos-org/arceos/discussions/181)\n* [x] File system\n* [ ] Compatible with Linux apps\n* [ ] Interrupt driven device I/O\n* [ ] Async I/O\n\n## Quick Start\n\n### Build and Run through Docker\n\nInstall [Docker](https://www.docker.com/) in your system.\n\nThen build all dependencies through provided dockerfile:\n\n```bash\ndocker build -t arceos -f Dockerfile .\n```\n\nCreate a container and build/run app:\n\n```bash\ndocker run -it -v $(pwd):/arceos -w /arceos arceos bash\n\n# Now build/run app in the container\nmake A=examples/helloworld ARCH=aarch64 run\n```\n\n### Manually Build and Run\n\n#### 1. Install Build Dependencies\n\nInstall [cargo-binutils](https://github.com/rust-embedded/cargo-binutils) to use `rust-objcopy` and `rust-objdump` tools, and [axconfig-gen](https://github.com/arceos-org/axconfig-gen) for kernel configuration, and [cargo-axplat](https://github.com/arceos-org/axplat_crates/tree/dev/cargo-axplat) for platform configuration:\n\n```bash\ncargo install cargo-binutils axconfig-gen cargo-axplat\n```\n\n##### Dependencies for running apps\n\n```bash\n# for Debian/Ubuntu\nsudo apt-get install qemu-system\n# for macos\nbrew install qemu\n```\n\n##### Dependencies for building C apps (optional)\n\nInstall `libclang-dev`:\n\n```bash\nsudo apt install libclang-dev\n```\n\nDownload \u0026 install [musl](https://musl.cc) toolchains:\n\n```bash\n# download\nwget https://musl.cc/aarch64-linux-musl-cross.tgz\nwget https://musl.cc/riscv64-linux-musl-cross.tgz\nwget https://musl.cc/x86_64-linux-musl-cross.tgz\nwget https://github.com/LoongsonLab/oscomp-toolchains-for-oskernel/releases/download/loongarch64-linux-musl-cross-gcc-13.2.0/loongarch64-linux-musl-cross.tgz\n# install\ntar zxf aarch64-linux-musl-cross.tgz\ntar zxf riscv64-linux-musl-cross.tgz\ntar zxf x86_64-linux-musl-cross.tgz\ntar zxf loongarch64-linux-musl-cross.tgz\n# exec below command in bash OR add below info in ~/.bashrc\nexport PATH=`pwd`/x86_64-linux-musl-cross/bin:`pwd`/aarch64-linux-musl-cross/bin:`pwd`/riscv64-linux-musl-cross/bin:`pwd`/loongarch64-linux-musl-cross/bin:$PATH\n```\n\nOther systems and arch please refer to [Qemu Download](https://www.qemu.org/download/#linux)\n\n#### 2. Build \u0026 Run\n\n```bash\n# build app in arceos directory\nmake A=path/to/app ARCH=\u003carch\u003e LOG=\u003clog\u003e\n```\n\nWhere `path/to/app` is the relative path to the application. Examples applications can be found in the [examples](examples/) directory or the [arceos-apps](https://github.com/arceos-org/arceos-apps) repository.\n\n`\u003carch\u003e` should be one of `riscv64`, `aarch64`, `x86_64`, `loongarch64`.\n\n`\u003clog\u003e` should be one of `off`, `error`, `warn`, `info`, `debug`, `trace`.\n\nMore arguments and targets can be found in [Makefile](Makefile).\n\nFor example, to run the [httpserver](examples/httpserver/) on `qemu-system-aarch64` with 4 cores and log level `info`:\n\n```bash\nmake A=examples/httpserver ARCH=aarch64 LOG=info SMP=4 run NET=y\n```\n\nNote that the `NET=y` argument is required to enable the network device in QEMU. These arguments (`BLK`, `GRAPHIC`, etc.) only take effect at runtime not build time.\n\n## How to write ArceOS apps\n\nYou can write and build your custom applications outside the ArceOS source tree.\nExamples are given below and in the [app-helloworld](https://github.com/arceos-org/app-helloworld) and [arceos-apps](https://github.com/arceos-org/arceos-apps) repositories.\n\n### Rust\n\n1. Create a new rust package with `no_std` and `no_main` environment.\n2. Add `axstd` dependency and features to enable to `Cargo.toml`:\n\n    ```toml\n    [dependencies]\n    axstd = { path = \"/path/to/arceos/ulib/axstd\", features = [\"...\"] }\n    # or use git repository:\n    # axstd = { git = \"https://github.com/arceos-org/arceos.git\", features = [\"...\"] }\n    ```\n\n3. Call library functions from `axstd` in your code, just like the Rust [std](https://doc.rust-lang.org/std/) library.\n\n    Remember to annotate the `main` function with `#[unsafe(no_mangle)]` (see this [example](examples/helloworld/src/main.rs)).\n\n4. Build your application with ArceOS, by running the `make` command in the application directory:\n\n    ```bash\n    # in app directory\n    make -C /path/to/arceos A=$(pwd) ARCH=\u003carch\u003e run\n    # more args: LOG=\u003clog\u003e SMP=\u003csmp\u003e NET=[y|n] ...\n    ```\n\n    All arguments and targets are the same as above.\n\n### C\n\n1. Create `axbuild.mk` and `features.txt` in your project:\n\n    ```bash\n    app/\n    ├── foo.c\n    ├── bar.c\n    ├── axbuild.mk      # optional, if there is only one `main.c`\n    └── features.txt    # optional, if only use default features\n    ```\n\n2. Add build targets to `axbuild.mk`, add features to enable to `features.txt` (see this [example](examples/httpserver-c/)):\n\n    ```bash\n    # in axbuild.mk\n    app-objs := foo.o bar.o\n    ```\n\n    ```bash\n    # in features.txt\n    alloc\n    paging\n    net\n    ```\n\n3. Build your application with ArceOS, by running the `make` command in the application directory:\n\n    ```bash\n    # in app directory\n    make -C /path/to/arceos A=$(pwd) ARCH=\u003carch\u003e run\n    # more args: LOG=\u003clog\u003e SMP=\u003csmp\u003e NET=[y|n] ...\n    ```\n\n## How to build ArceOS for specific platforms and devices\n\nYou need to manually link your application with the appropriate platform packages:\n\n```rs\n// Add this line to your application (for raspi4 platform)\nextern crate axplat_aarch64_raspi;\n```\n\nThen set the `MYPLAT` variable when run `make`:\n\n```bash\n# Build helloworld for raspi4\nmake MYPLAT=axplat-aarch64-raspi SMP=4 A=examples/helloworld\n```\n\nYou may also need to select the corrsponding device drivers by setting the `FEATURES` variable:\n\n```bash\n# Build the shell app for raspi4, and use the SD card driver\nmake MYPLAT=axplat-aarch64-raspi SMP=4 A=examples/shell FEATURES=page-alloc-4g,driver-bcm2835-sdhci BUS=mmio\n# Build httpserver for the bare-metal x86_64 platform, and use the ixgbe and ramdisk driver\nmake PLAT_CONFIG=$(pwd)/configs/custom/x86_64-pc-oslab.toml A=examples/httpserver FEATURES=page-alloc-4g,driver-ixgbe,driver-ramdisk SMP=4\n```\n\n## How to reuse ArceOS modules in your own project\n\n```toml\n# In Cargo.toml\n[dependencies]\naxalloc = { git = \"https://github.com/arceos-org/arceos.git\", tag = \"v0.2.0\" } # modules/axalloc\naxhal = { git = \"https://github.com/arceos-org/arceos.git\", tag = \"v0.2.0\" } # modules/axhal\n```\n\n## Design\n\n![ArceOS logo](doc/figures/ArceOS.svg)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Farceos-org%2Farceos","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Farceos-org%2Farceos","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Farceos-org%2Farceos/lists"}