Find a file
Jeremy Soller 224c43f761 Orbital (#16)
* Port previous ethernet scheme

* Add ipd

* Fix initfs rebuilds, use QEMU user networking addresses in ipd

* Add tcp/udp, netutils, dns, and network config

* Add fsync to network driver

* Add dns, router, subnet by default

* Fix e1000 driver. Make ethernet and IP non-blocking to avoid deadlocks

* Add orbital server, WIP

* Add futex

* Add orbutils and orbital

* Update libstd, orbutils, and orbital
Move ANSI key encoding to vesad

* Add orbital assets

* Update orbital

* Update to add login manager

* Add blocking primitives, block for most things except waitpid, update orbital

* Wait in waitpid and IRQ, improvements for other waits

* Fevent in root scheme

* WIP: Switch to using fevent

* Reorganize

* Event based e1000d driver

* Superuser-only access to some network schemes, display, and disk

* Superuser root and irq schemes

* Fix orbital
2016-10-13 17:21:42 -06:00
arch Orbital (#16) 2016-10-13 17:21:42 -06:00
bootloader Orbital (#16) 2016-10-13 17:21:42 -06:00
crates Orbital (#16) 2016-10-13 17:21:42 -06:00
drivers Orbital (#16) 2016-10-13 17:21:42 -06:00
filesystem Orbital (#16) 2016-10-13 17:21:42 -06:00
initfs/etc Orbital (#16) 2016-10-13 17:21:42 -06:00
kernel Orbital (#16) 2016-10-13 17:21:42 -06:00
libstd@89b6a739be Orbital (#16) 2016-10-13 17:21:42 -06:00
openlibm@1581174c85 Use newest version of allocator and spin 2016-09-22 16:12:48 -06:00
paper Remove algorithmicx package 2016-09-02 08:52:21 -06:00
programs Orbital (#16) 2016-10-13 17:21:42 -06:00
ralloc@65495da00f Compile init as executable using libstd 2016-09-09 17:13:16 -06:00
res/fonts Make rusttype optional for vesad 2016-09-29 13:17:19 -06:00
rust@a5dac7a2af Add permissions to the filesystem, preliminary permissions to the syscalls 2016-10-05 14:24:08 -06:00
schemes Orbital (#16) 2016-10-13 17:21:42 -06:00
syscall Orbital (#16) 2016-10-13 17:21:42 -06:00
.gitignore Build with filesystem 2016-09-27 21:56:29 -06:00
.gitmodules Orbital (#16) 2016-10-13 17:21:42 -06:00
arm-unknown-none.json Arm! 2016-08-25 17:03:01 -06:00
bochs.x86_64 Fix path in bochs 2016-09-10 18:48:36 -06:00
Cargo.toml Create example userspace scheme. Remove kernel duplication of syscalls, use syscall crate instead 2016-09-20 16:23:28 -06:00
krustc.sh Seperate kernel and userspace targets 2016-09-09 19:08:04 -06:00
LICENSE Add license 2016-08-13 16:28:33 -06:00
Makefile Orbital (#16) 2016-10-13 17:21:42 -06:00
README.md Format readme 2016-09-29 15:02:05 -06:00
rustc.sh Seperate kernel and userspace targets 2016-09-09 19:08:04 -06:00
rustfmt.toml Proposed rustfmt file 2016-10-05 14:44:46 -06:00
x86_64-unknown-none.json Relocatable kernel 2016-09-10 16:27:11 -06:00
x86_64-unknown-redox.json Enable SSE and FPU 2016-09-22 16:14:45 -06:00

kernel

A collaborative effort to rewrite the kernel with focus on correctness and code quality.

Why?

The kernel code was getting increasingly messy to the point where only the original writer would be able to find and fix bugs. Fortunately, the kernel of Redox is relatively small and such a project is estimated to take only a few months.

What?

The aims of the new kernel should be clear in their order:

  1. Correctness: Above anything else, the kernel should be correct. No hacks, despite how the tiny cool shortcuts might seem, it gives severe backslash later on. Keep it correct and well-written.

  2. Readability and documentation: The code quality should be high, with that follows a detailed documentation, including both API docs (on every item!) and careful comments for anything non-trivial.

  3. Performance: If you can, go for it.

Guidelines

A rotten house is built on a rotten fundament.

Don't fool yourself. You are likely not getting back to the ugly code. Write it the right way first time, and make sure you only move on when it's done right.

Comments

Do not hesitate to put comments all over the place.

Documentation

Every public item should contain API documentation.

Debug assertions

Abusing debug assertions is a wonderful way to catch bugs, and it is very much encouraged.

Statical checking

Rust provides a lot of type-system features which can be used to create wonderful safe abstractions, and you should use them whenever you get the chance.

Unsafety should be avoided, and if it is triggered only under some addition insert an assertion. Despite this being a kernel, we prefer kernel panics over security vulnerabilities.

If the condition is (or should be) unreachable, but if not upheld, leading to UB, put an assertion in the start of the function.

Be gentle

Don't just write as much code as you can as quick as possible. Take your time and be careful.

Commits

Use descriptive commits. One way to force yourself to do that is to not pass the -m flag, which will make your editor pop up, so that you can conviniently write long commit messages.