dmzOS
About
dmzOS is an operating system written by a group of computer enthusiasts gathered around Decentrala. You are free to explore, learn, and contribute!
Description
- Written from scratch in C and asm.
- POSIX-compliant (as aspiring to Stan Dard).
- For the amd64 architecture.
- Extensively documented.
Goals
- Sharpen low-level programming skills.
- Familiarize with amd64 architecture details.
- Have fun along the way!
Success criteria
- Run vim on the OS.
Rules
- Please provide an adequate entry in the Wiki for each non-trivial code contribution.
To learn more about the project, please refer to the Wiki.
DevOps
Development environment
Essential software (plus dependencies) that are needed for the development are available through a custom Ubuntu-based Docker image (located in Dockerfiles/dockerfile.c_toolchain as well as on Docker Hub). This includes:
- gcc: The GNU Compiler Collection.
- indentGNU C code formatter.
- clang: a compiler front end for the C, C++, Objective-C, and Objective-C++ programming languages
- clang-format: a tool to automatically format C/C++/Objective-C code
- gdb: The GNU Debugger.
- make: a tool which controls the generation of executables and other non-source files of a program from the program's source files.
- objdump: a command-line program for displaying various information about object files.
- nasm: The Netwide Assembler is an assembler and disassembler for the Intel x86 architecture.
- xxd: a command-line program that may be used to manage, convert, and display binary files.
- ld: The GNU Linker.
- lld: a linker from the LLVM project that is a drop-in replacement for system linkers and runs much faster than them.
- vim: a highly configurable text editor.
Note
A
.vimrcfile with a rule to format code on buffer save in line with Kernighan and Ritchie style (with 4-space indentation) comes pre-installed inside the image.
Booting the latest .iso image of dmzOS is done using a Dockerized QEMU.
Command cheatsheet
- To get into a bashshell that is bound to thedmzOSdirectory:
docker-compose run --rm c_toolchain
Note
Any changes in the container's
dmzOSdirectory will be reflected in the localdmzOSdirectory.