• Stars
    star
    857
  • Rank 53,206 (Top 2 %)
  • Language
    Rust
  • License
    MIT License
  • Created almost 5 years ago
  • Updated 4 months ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

MOROS: Obscure Rust Operating System ๐Ÿฆ‰

MOROS: Obscure Rust Operating System

screenshot

MOROS is a hobby operating system written in Rust by Vincent Ollivier.

It targets computers with a x86-64 architecture and a BIOS, so mostly from 2005 to 2020, but it also runs well on most emulators (Bochs, QEMU, and VirtualBox).

This project started from the seventh post of the second edition of Writing an OS in Rust by Philipp Oppermann and by reading the OSDev wiki along with many open source kernels.

GitHub Actions Crates.io

Features

  • External bootloader (using bootloader)
  • x86 CPU support (using x86_64)
  • Hardware interrupts (using pic8259)
  • PS/2 Keyboard with customizable layout (using pc-keyboard)
  • VGA Text mode with customizable font and color palette
  • Serial output (using uart_16550)
  • Paging
  • Heap allocation (using linked_list_allocator)
  • ACPI shutdown (using acpi and aml)
  • RTC clock
  • PCI devices
  • ATA PIO mode
  • Random number generator (using rand_hc)
  • RTL8139 network card
  • AMD PCNET network card
  • DHCP/IP/TCP/UDP/DNS/HTTP network protocols (using smoltcp)
  • Basic filesystem
  • Basic shell
  • Basic text editor
  • Basic lisp interpreter
  • Basic userspace for NASM and Rust programs without alloc
  • Some file and network commands
  • Some games
  • Multitasking
  • C standard library port

Documentation

Documentation is available here

Setup

You will need git, gcc, make, curl, qemu-img, and qemu-system-x86_64 on the host system.

Clone the repo:

$ git clone https://github.com/vinc/moros
$ cd moros

Install the required tools with make setup or the following commands:

$ curl https://sh.rustup.rs -sSf | sh -s -- -y --default-toolchain none
$ rustup show
$ cargo install bootimage

Usage

Build the image to disk.img:

$ make image output=video keyboard=qwerty

Run MOROS in QEMU:

$ make qemu output=video nic=rtl8139

Run natively on a x86 computer by copying the bootloader and the kernel to a hard drive or USB stick (but there is currently no USB driver so the filesystem will not be available in that case):

$ sudo dd if=target/x86_64-moros/release/bootimage-moros.bin of=/dev/sdx && sync

MOROS will open a console in diskless mode after boot if no filesystem is detected. The following command will setup the filesystem on a hard drive, allowing you to exit the diskless mode and log in as a normal user:

> install

Be careful not to overwrite the hard drive of your OS when using dd inside your OS, and install or disk format inside MOROS if you don't use an emulator.

Tests

Run the test suite in QEMU:

$ make test

License

MOROS is released under MIT.

More Repositories

1

littlewing

Chess engine written in Rust โ™›
Rust
39
star
2

forecaster

Ruby wrapper around wgrib2 to read data directly from the Global Forecast System โ›…
Ruby
16
star
3

purplehaze

0x88 chess engine written in C++ โ™˜
C++
12
star
4

ansible-playbook-digitalocean

A simple Ansible playbook for DigitalOcean
Python
10
star
5

pi.ctu.re

Upload your pictures to the cloud ๐Ÿ“ท
Ruby
9
star
6

geodate

Command line tool displaying the time in a geocentric date format โŒš
Rust
6
star
7

cadate

Display the date in many calendars and formats ๐Ÿ“…
JavaScript
5
star
8

oximon

Record data from pulse oximeters
Python
5
star
9

advent-of-code

Advent of Code ๐ŸŽ„
Ruby
5
star
10

utopia.vinc.cc

A vision of the future created by ChatGPT and OpenJourney
Ruby
5
star
11

pkg

A wrapper around package managers
Shell
4
star
12

junla

Anti-procrastination proxy
CoffeeScript
4
star
13

news.vinc.cc

Metasearch engine for news articles ๐Ÿ“ฐ
Ruby
4
star
14

pollen.vinc.cc

Chart the European Pollen Database ๐ŸŒผ
JavaScript
4
star
15

timetable

Construct timetables from General Transit Feed Specification (GTFS)
Rust
4
star
16

ned

Ned is the new standard text editor.
Rust
4
star
17

favoread

Ruby
3
star
18

chatai

A simple CLI for ChatGPT made in Ruby
Ruby
3
star
19

paste.vinc.cc

Modern secure pastebin using markdown format
Ruby
3
star
20

dotfiles

Configuration for a minimalist text based environment
Shell
3
star
21

internet-freedom-list

A list of resources to protect your freedom and privacy
Ruby
2
star
22

rddt.cc

The very finest curated list of links from Reddit for busy readers.
CSS
2
star
23

provisioning.rb

Open PaaS provisioning on cloud providers
Ruby
2
star
24

infra.stru.ctu.re

Deliver images for Picture
JavaScript
2
star
25

memorious

Minimalist command line password manager
Shell
2
star
26

runa.sh

Simplify your batch processing workflow
Ruby
2
star
27

vinc.cc

Personal website
HTML
2
star
28

hakuturi.com

๐ŸŒ๐ŸŒฒ๐ŸŒฟ๐Ÿ•Š๏ธ Hฤkuturi News is a curated news aggregator focused on the environment
Ruby
2
star
29

fetch

Fetch is a HTTP/0.9 server and proxy to other protocols
Ruby
2
star
30

provisioning.sh

PaaS provisioning website
Ruby
1
star
31

level

๐ŸŽš๏ธ Change levels of screen backlight and audio volume in the CLI
Rust
1
star
32

closh

๐Ÿ–ฅ๏ธ Get a shell running in the cloud in seconds
Ruby
1
star
33

geocal

Command line tool displaying a calendar and ephemeris of a geodate ๐Ÿ“…
Rust
1
star
34

user.re

User web pages, reloaded.
Ruby
1
star
35

rgb.vinc.cc

RGB Color Picker
JavaScript
1
star
36

regexp_sample

A very limited `Regexp#sample` method
Ruby
1
star
37

oct

A collection of tools to manage OpenNMS's configuration
Python
1
star
38

ytdl

YouTube Video Downloader
Ruby
1
star
39

rehost

Express middleware to rehost and resize images
JavaScript
1
star
40

chronolog

Chronolog is a CLI for logging time in plain text files
Ruby
1
star
41

geodate-android

Geodate for Android
Java
1
star
42

stuzi

Fast IP geolocation from RIRs
C
1
star
43

goelo.eu

Goelo: a biogeographic area of Atlantic Europe
HTML
1
star
44

old_vinc.cc

Personal website (powered by Octopress)
Ruby
1
star
45

arduino-decimal-clock

Arduino
1
star
46

diali

A website to log daily life activities
CoffeeScript
1
star
47

geonde.com

Environmental platform for green computing
Ruby
1
star
48

dasort

Organize pictures by creation date
Python
1
star
49

kiss.css

KISS principle applied to CSS
CSS
1
star
50

todo.re

To-do lists web app built with AngularJS, Sinatra and MongoDB.
JavaScript
1
star
51

rata

JavaScript
1
star
52

forecastfor.me

Geolocalized forecasts straight from the GFS model
Ruby
1
star
53

readable-browser

The web, without the bullshit.
CSS
1
star
54

occet

Open Cluster for Chess Engine Testing
CoffeeScript
1
star
55

arduino-gps-clock

C++
1
star
56

nyx

Chaos > Nyx > Moros
Shell
1
star