All Projects → byteduck → duckOS

byteduck / duckOS

Licence: GPL-3.0 license
Yet another hobby x86 UNIX-like operating system written in C and C++. Features a dynamically linked userspace, an in-house c standard library, and more! And yes, it runs DOOM.

Programming Languages

C++
36643 projects - #6 most used programming language
c
50402 projects - #5 most used programming language
CMake
9771 projects

Projects that are alternatives of or similar to duckOS

Macaron
A sweet hobby made operating system written in C++ for x86 CPUs with GUI
Stars: ✭ 34 (-86.4%)
Mutual labels:  kernel, os, osdev, operating-system, hobby-os
Aquila
AquilaOS: UNIX-like Operating System
Stars: ✭ 413 (+65.2%)
Mutual labels:  unix, kernel, os, osdev, operating-system
biefircate
Running x86-16 or x86-32 code from x86-64 UEFI; _very experimental_ • mirror of https://gitlab.com/tkchia/biefircate • developer notes at https://gitlab.com/tkchia/biefircate/-/blob/main/doc/NOTES.asciidoc
Stars: ✭ 47 (-81.2%)
Mutual labels:  kernel, os, osdev, operating-system, baremetal
georgios
Hobby Operating System
Stars: ✭ 19 (-92.4%)
Mutual labels:  unix, kernel, osdev, operating-system, hobby-os
Frosted
Frosted: Free POSIX OS for tiny embedded devices
Stars: ✭ 194 (-22.4%)
Mutual labels:  unix, kernel, os, posix, operating-system
Dennix
Dennix is a unix-like hobbyist operating system written from scratch.
Stars: ✭ 53 (-78.8%)
Mutual labels:  kernel, os, osdev, posix, operating-system
kernel
Main kernel tree
Stars: ✭ 28 (-88.8%)
Mutual labels:  unix, kernel, os, osdev, posix
beeos
A simple "Unix-like" kernel trying to be POSIX compliant
Stars: ✭ 103 (-58.8%)
Mutual labels:  kernel, os, osdev, posix, operating-system
KnutOS
An x86_64 hobbyist OS written in C and Assembly
Stars: ✭ 16 (-93.6%)
Mutual labels:  kernel, os, osdev, operating-system, hobby-os
Toaruos
A completely-from-scratch hobby operating system: bootloader, kernel, drivers, C library, and userspace including a composited graphical UI, dynamic linker, syntax-highlighting text editor, network stack, etc.
Stars: ✭ 4,687 (+1774.8%)
Mutual labels:  kernel, os, osdev, operating-system, baremetal
chaos-2
A hand-made SMP-aware kernel
Stars: ✭ 20 (-92%)
Mutual labels:  kernel, os, osdev, operating-system, unix-like
Unikraft
Unikraft is an automated system for building specialized POSIX-compliant OSes known as unikernels. (Core repository)
Stars: ✭ 183 (-26.8%)
Mutual labels:  kernel, os, osdev, operating-system
Cyjon
A simple, clean code, multi-tasking operating system written in pure assembly language for 64-bit processors from the AMD64 family.
Stars: ✭ 184 (-26.4%)
Mutual labels:  kernel, os, osdev, operating-system
Qword
Operating system for x86_64 based around a "keep it simple and make it work" philosophy.
Stars: ✭ 367 (+46.8%)
Mutual labels:  unix, kernel, os, operating-system
Posnk
An operating system project.
Stars: ✭ 34 (-86.4%)
Mutual labels:  unix, osdev, posix, operating-system
kora-kernel
Kernel for my operating system KoraOS
Stars: ✭ 15 (-94%)
Mutual labels:  os, osdev, operating-system, hobby-os
SnowFlake
Technology is free, SnowFlakeOS
Stars: ✭ 38 (-84.8%)
Mutual labels:  kernel, os, osdev, operating-system
Emerald
An operating system written in C
Stars: ✭ 118 (-52.8%)
Mutual labels:  kernel, os, osdev, operating-system
MeetixOS
An hobby OS written in modern C++20 which aims to be Unix-like. Currently based on EvangelionNG, a GhostOS derived kernel
Stars: ✭ 179 (-28.4%)
Mutual labels:  unix, osdev, operating-system, hobby-os
tupai
Tupai is a multi-tasking operating system I wrote for my degree that focuses on safety and design, targeting a variety of platforms.
Stars: ✭ 21 (-91.6%)
Mutual labels:  unix, os, osdev, posix

duckOS

A hobby operating system

IMPORTANT: This project is on a brief summer hiatus due to my internship at a major fruit-based technology company. Thank you for your patience! :)

A hobby UNIX-like OS with a graphical window manager for x86 computers.

Toolchain Kernel duckOS

Try duckOS in your browser!

Thanks to the v86 project by copy, you can now try a (slow) version of duckOS in your browser! Try it here!

Screenshots

Screenshot

What's working

  • Booting off of the primary master IDE (PATA) hard drive on both emulators and real hardware (tested on a Dell Optiplex 320 with a Pentium D)
  • PATA DMA or PIO access (force PIO by using the use_pio grub kernel argument)
  • A virtual filesystem with device files (/dev/hda, /dev/zero, /dev/random, /dev/fb, /dev/tty, etc)
    • The root filesystem is ext2, and is writeable
  • Disk caching
  • Dynamic linking with shared libraries
  • A Bochs/Qemu/VirtualBox/Multiboot video driver (640x480x32bpp)
  • A window manager / compositor called pond
  • Various GUI applications
  • More!

Services

The code for these can be found in services.

  • Init (/bin/init): The init system for duckOS.
  • Pond (/bin/pond): The window manager / compositor for duckOS.
  • Quack (/bin/quack): The sound server for duckOS.

GUI Programs

The code for these can be found in programs

  • Calculator (/apps/calculator.app): A basic calculator.
  • Terminal (/apps/terminal.app): A libui-based terminal application.
  • System Monitor (/apps/monitor.app): A basic system monitor showing memory and CPU utilization.
  • 4 In a Row (/apps/4inarow.app): A basic four-in-a-row game. Play with two players or against the computer.
  • Sandbar (/bin/sandbar): A basic "taskbar" that displays a row of buttons at the bottom of the screen to launch applications.
  • Files (/apps/files.app): A rudimentary file explorer application.

CLI Programs

The code for these can be found in programs.

  • ls (/bin/ls): Lists the entries in the current or given directory.
  • cat (/bin/cat): Writes the contents of a file to stdout.
  • cp (/bin/cp): Copies a file.
  • mv (/bin/mv): Moves a file.
  • pwd (/bin/pwd): Prints the current working directory.
  • mkdir (/bin/mkdir): Creates a new directory.
  • echo (/bin/echo): Prints the arguments given to it separated by spaces to stdout.
  • rm (/bin/rm): Removes a file.
  • ln (/bin/ln): Creates a hard or symbolic link to a file or directory.
  • rmdir (/bin/rmdir): Removes a directory.
  • touch (/bin/touch): Updates the access/modification times of a file or creates it if it doesn't exist.
  • truncate (/bin/truncate): Resizes a file.
  • chmod (/bin/chmod): Changes the mode of a file.
  • chown (/bin/chown): Changes the owner of a file.
  • free (/bin/free): Shows the amount of total, used, and free memory (use the -h flag for human-readable numbers).
  • ps (/bin/ps): Shows the currently running processes.
  • dsh (/bin/dsh): A basic userspace shell with support for pipes (|) and redirections (>/>>).
    • There is only support for one redirection at a time right now.
  • apprun (/bin/apprun): A utility to run applications from the command line.
  • play (/bin/play): Plays audio files.

Programs that take arguments will provide you with the correct usage when you run them without arguments.

Libraries

  • libc: The standard C library.
  • libm: The math portion of the standard C library.
  • libpond: The library used for interfacing with the pond window manager / compositor.
  • libgraphics: A library which provides a few utilities for working with graphics such as image format loading.
  • libui: A UI framework for applications.
  • libterm: A framework for handling terminals.
  • libduck: A library containing commonly used classes and utilities, such as argument and configuration file parsing.
  • libriver: An IPC library not dissimilar to D-Bus, which provides a framework for remote function calls and data passing.
  • libapp: A library providing methods to retrieve information about installed and running applications.
  • libsys: Provides higher-level C++ abstractions for retrieving system information, namely from procFS.
  • libsound: Provides a framework for audio applications and interfacing with the sound server, Quack.

Ports

Ports will only compile if their corresponding submodule is downloaded with git submodule init and git submodule update.

  • DOOM: A little buggy at the moment, but playable. With the current multitasking and window manager implementation, it can be a little slow.

Known Issues / Limitations

  • Framebuffer scrolling is slow on real hardware. I'm not focusing on fixing this right now until I start working on a window manager.
  • Must be booted off of the master drive on the primary PATA controller as of now.
  • Ext2 triply indirect block pointers cannot be read/written, so there may be issues writing and reading large files
  • A buffer overflow attack on the kernel may be possible, because only pointers passed to syscalls are checked for validity (and not the length of the data to be read/written)
  • Dynamic linking does not currently use CoW to share memory between processes, so each process has its own copy of the library in memory
  • It's pretty unstable

Future Goals

  • Cut down on memory usage by sharing memory for various commonly used items (libraries, icons, configuration, etc)
  • Better support for real hardware
  • Network support
  • More s t a b i l i t y and s p e e d
  • Multiprocessor (multicore) support
  • An in-house heap implementation
  • More POSIX compatibility
  • Better looking UI with animations and effects such as shadows and blur/transparency
  • Slowly transition various functions from the kernel to userspace (ie microkernel)
  • A better filesystem cache implementation that can free memory when needed and periodically flushes writes

Building / Running

Credits

License

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].