xaizek / tos (License: GPLv3 only) (since 2018-12-07)
This is an alternative version of sources presented as part of Write Your Own OS video tutorial by Viktor Engelmann.
<root> / README.md (bd1edba842449de6770db4ecf0f82201f5e6e5d2) (1,779B) (mode 100644) [raw]
This is an alternative version of sources presented as part of
[Write Your Own OS](http://wyoos.org/) video tutorial by Viktor Engelmann.

The sources were modified to be somewhat cleaner, more portable and with less
bugs.

There are still many issues and limitations and a lot of things can be improved
in the code base.

Makefile doesn't contain anything for VirtualBox and relies on qemu being
available.

### Differences from original ###

* Use of C++11
* Use of qemu (no iso images or grub is necessary)
* Fixed invocation of constructors of global objects
* Set alignment for multiboot header
* Added dependency tracking to the Makefile
* Flags and build target for running a debugger
* Fixed various weird or incorrect things
* Reduced number of UBs in the code (this results in more complicated and slow
  but more correct code; plus, it was quite fun to implement)
* Cosmetic changes like consistent naming, no commented out code, etc
* Make keyboard and mouse work at the same time
* No `include/` directory
* No outermost namespace for everything (it's not a library after all)
* Double buffering to avoid flickering of graphics

### Prerequisites ###

* g++
* GNU Make
* qemu for i386

### Trying it out ###

Starting the VM:

```
make run
```

Debugging:

```
make gdb
```

Testing network:

```
# start one of these before running the VM in a separate terminal
make udp-server
make tcp-server

# these can be run after VM has started (e.g. `make run; make udp-client`)
make udp-client
make tcp-client

# open http://127.0.0.1:1234/ in a browser
```

### Possible additions/changes ###

* Virtual memory
* User-mode
* SMP
* USB
* 64-bit mode
* Syscalls using `SYSENTER`
* Handle loopback in IP stack
* Graceful shutdown (ACPI)
* Support GPT

### License ###

GPLv3
Hints

Before first commit, do not forget to setup your git environment:
git config --global user.name "your_name_here"
git config --global user.email "your@email_here"

Clone this repository using HTTP(S):
git clone https://code.reversed.top/user/xaizek/tos

Clone this repository using ssh (do not forget to upload a key first):
git clone ssh://rocketgit@code.reversed.top/user/xaizek/tos

You are allowed to anonymously push to this repository.
This means that your pushed commits will automatically be transformed into a pull request:
... clone the repository ...
... make some changes and some commits ...
git push origin master