ajh123-archives / duckOS

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.

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

GTMOS

A hobby operating system based of duckOS

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

Toolchain Kernel duckOS

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 (very-WIP) window manager / compositor 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.

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.

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
  • Sound 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

About

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.

License:GNU General Public License v3.0


Languages

Language:C++ 79.7%Language:C 17.6%Language:CMake 1.1%Language:Shell 0.9%Language:Assembly 0.6%