Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/ZystemOS/pluto
An x86 kernel written in Zig
https://github.com/ZystemOS/pluto
hacktoberfest kernel operating-system x86 zig
Last synced: about 5 hours ago
JSON representation
An x86 kernel written in Zig
- Host: GitHub
- URL: https://github.com/ZystemOS/pluto
- Owner: ZystemOS
- Created: 2019-03-22T10:49:28.000Z (over 5 years ago)
- Default Branch: develop
- Last Pushed: 2024-01-03T14:09:27.000Z (10 months ago)
- Last Synced: 2024-11-03T17:06:06.106Z (5 days ago)
- Topics: hacktoberfest, kernel, operating-system, x86, zig
- Language: Zig
- Homepage:
- Size: 2.77 MB
- Stars: 559
- Watchers: 14
- Forks: 22
- Open Issues: 34
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
- awesome-zig - ZystemOS/Pluto
- awesome-zig - plutoποΈAn x86 kernel written in Zig
README
# Pluto
[![Build Status](https://github.com/SamTebbs33/pluto/workflows/CI/badge.svg)](https://github.com/SamTebbs33/pluto/actions)
Pluto is a kernel written almost entirely in [Zig](https://github.com/ziglang/zig) and supports x86, with aarch64 and x64 backends being planned.
![Hello image](hello.jpg)
## Goals
* **Should be written in Zig as much as possible**. Assembly should only be used where required for functionality or performance reasons.
* **Light and performant**. The kernel should be usable both on embedded and desktop class CPUs, made possible by it being lightweight and modular.
* **Basic utilities will be written in Zig**. This includes a basic text editor and shell, and will be part of the filesystem external to the kernel itself.
* **Easy to port**. The kernel is oblivious to the underlying architecture, meaning that ports only need to implement the defined interface and they should work without a hitch.All of these goals will benefit from the features of Zig.
## Build
Requires a master build of Zig 0.9.1([downloaded](https://ziglang.org/download) or [built from source](https://github.com/ziglang/zig#building-from-source)), *xorriso* and the grub tools (such as *grub-mkrescue*). A *qemu-system* binary compatible with your chosen target is required to run the kernel (e.g. *qemu-system-i386*).
```Shell
zig build
```## Run
```Shell
zig build run
```or if you want to wait for a gdb connection:
```Shell
zig build debug-run
```## Debug
Launch a gdb-multiarch instance and connect to qemu.
```Shell
zig build debug
```## Unit testing
Run the unit tests.
```Shell
zig build test
```## Runtime testing
Run the runtime tests.
```Shell
zig build rt-test -Dtest-mode=
```Available test modes:
* `None`: This is the default, this will run the OS normally.
* `Initialisation`: Run the OS's initialisation runtime tests to ensure the OS is properly set up.
* `Panic`: Run the panic runtime test.## Options
* `-D[build-mode]=`: Boolean (default `false`).
* **build**: Build a certain build mode (*release-safe*, *release-fast*, *release-small*). Don't set in order to use the *debug* build mode.
* **test**: Test a certain build mode (*release-safe*, *release-fast*, *release-small*). Don't set in order to use the *debug* build mode.
* `-Dtarget=`: String (default `i386-freestanding`). The standard target options for building with zig. Currently supported targets:
* `i386-freestanding`
* `-Ddisable-display`: Boolean (default `false`)
* This disables the display output of QEMU.## Contribution
We welcome all contributions, be it bug reports, feature suggestions or pull requests. We follow the style mandated by zig fmt so make sure you've run `zig fmt` on your code before submitting it.
We also like to order a file's members (public after non-public):
1. imports
2. type definitions
3. constants
4. variables
5. inline functions
6. functions
7. entry point/init functionMore styling information is available on the [wiki](https://github.com/SamTebbs33/pluto/wiki/Code-Styling-(Detailed))