Giter Club home page Giter Club logo

dennix's Introduction

Dennix

Dennix is a unix-like hobbyist operating system for x86 and x86_64 that has been in development by a single developer since 2016. Exciting features include:

  • A monolithic kernel written in C++
  • A standard C library that is sufficiently complete to allow running most ports with no substantial modifications
  • A reasonably complete shell
  • Common command line utilities
  • A graphical user interface
  • Harddisk drivers for ATA and AHCI
  • An ext2 file system driver
  • A collection of ports of third-party software

Building

To build Dennix you will first need to install a cross toolchain for Dennix. The command make install-toolchain will download, build and install the toolchain. The installation script can be configured using environment variables. You can use the command ./build-aux/install-toolchain.sh --help to get information about these environment variables.

You will probably want to set $PREFIX to a path where you want the toolchain to be installed. After the toolchain has been installed you need to add $PREFIX/bin to your $PATH. Finally you can run make to build a bootable cdrom image.

Ports

Patches and scripts for installing third-party ports are available at https://github.com/dennis95/dennix-ports. If you put the contents of that repository into a subdirectory named ports all third-party ports will be downloaded, built, and installed automatically during the build. For releases a ports tarball is available that includes all third-party source code and that does not need to download any additional files.

License

Dennix is free software and is licensed under the terms of the ISC license. The full license terms can be found in the LICENSE file. The math library (libm) code was adopted from musl and is licensed under the MIT license and other permissive licenses compatible to the ISC license. See the libm/COPYRIGHT file for details.

All third-party ports are released under their own licenses. The full license text for every port is available in the /share/licenses directory of the release image.

Screenshots

Screenshot showing the gui with the bricks game and the calculator.

Screenshot showing the gui with the doom port and compilation of a simple program that shows a window saying "Hello World!".

Screenshot showing the compilation of utilities.

dennix's People

Contributors

dennis95 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar

dennix's Issues

Add a GUI

We should be able to run multiple graphical applications at the same time rather than just one fullscreen application.

GUI protocol should allow for frames to be sent via shared memory

A major performance issue of the GUI is that frames are sent over a socket and then get buffered. Then the GUI needs to process several frames that overwrite the same pixels until it gets to the newest frame.

Once #16 is resolved we will be able to share memory between the GUI and the application so that there are no outdated frames being processed.

GUI I/O has ~1 second delay

Every time I move the mouse or type something in the terminal (while running the GUI), there is ~1 second delay between me moving the mouse, and the cursor actually moving on the screen.
The issue is happening to me in QEMU while using multiple computers for virtualization (Linux x64 host, and macOS m1 host with emulated x86_64 hardware). Not sure if it happens with any other hypervisors.

Sockets

Sockets would be useful for #20 to allow GUI processes to communicate.

CI Builds provide ready to use ISO

Hi man!
you have made great strides, congratulations.

As said in the title, It would be nice if the CI provides the built ISO of DennixOS.

It isn't difficult to upload the image at the end, as I do in my CI

Keep going!
I want to play with your OS

Use on replit?

Repl.it is able to run QEMU, which have been used to help other users make their own OSes. But is there anyway this OS could be ported to repl? or perhaps make a guide to do so?

I think it should work, but it would be really great if it could be done as it means many others can see and use the OS without needing to do anything locally.

Port nano

This was requested in a comment to bug #19.

Nano depends on ncurses, so porting that might be some work but it should be doable.

Improve display API

A process that changes the display mode should become the owner of the display and when that process dies the display should reset itself.

The current way of resetting the display mode in a signal handler is not very robust.

Run configure scripts in the shell

Features needed in the shell that are used by configure scripts:

  • : builtin
  • redirection needs to work with all commands
  • case statements
  • command substitution
  • set builtin
  • eval builtin
  • exec builtin
  • shell functions
  • here-documents

Also some utilities like sed and grep are needed.

Multithreading

We should allow multiple threads per process.

Some code in the kernel is not thread-safe yet, so this will need to be fixed before threads are implemented.

Documentation

Polese, consider spending some time writing documentation.
Documentation should cover: initialization and state of registers after boot.
How virtual memory is managed and others important algorithms.

Early panic causes triple fault

Currently when the kernel panics before the log has been initialized, a triple fault will occur because the panic tries to write a message on the screen.

Shell scripts

The shell should be able to run commands from files and from sh -c.

Pseudo-terminals

This will be needed for running terminal applications inside a GUI (#20) once we have one.

Shared mmap & thread support

Hi, there are any plans for support the features in the title? They would improve a lot the capabilities of the system.

Keep it up, very good project

Check memory allocations in the kernel

This is problematic because gcc assumes that new can never return NULL. Also there is the problem that constructors cannot fail on allocation failure.

Improve disk performance

Disk access is currently slow. There are a few changes that could improve performance significantly.

  • Disk caching: We should cache blocks that have been accessed on disk in memory. This will improve read access to blocks that have been accessed before. Since the ext2 driver is reading important data structures repeatedly, this will improve both read and write performance of ext2 filesystems.
  • Do not flush the ATA device cache on every write. Instead flush the ATA cache when unmounting a filesystem and provide a utility to manually flush caches. This will improve write performance.
  • Use DMA transfers instead of PIO. This should also improve performance.

ACPI support

ACPI is needed for many things including shutdown and proper hardware detection.
Also my new laptop is missing some legacy devices that Dennix is using and fixing that will require ACPI.
Unfortunately fully implementing it (including AML) will be rather complicated.

could Dennix fit on a floppy?

Even today the floppies are still being used, for example - as virtual floppies inside the coreboot open source BIOS. Just imagine: your wonderful OS could be a part of someone's BIOS build! (for coreboot supported motherboard, maybe you have or could get one - see https://www.coreboot.org/Supported_Motherboards )

If you already have a coreboot-supported motherboard, or a real chance to get one, - wouldn't it be cool to be able to launch your own OS straight from the BIOS chip? ;) With one simple command its possible to add any floppy to coreboot BIOS build - and then you see it as a boot entry! Multiple floppies could be added this way (as long as you have enough space left inside the BIOS flash chip, luckily LZMA compression could be used for the stored floppies to reduce their occupied size)

Improve sh(1)

The current shell implementation is very primitive and does not even support quoting.

Do not trust pointers from userspace

Syscalls currently don't check whether pointers they were given are accessible from userspace. This is a security issue since a userspace process might overwrite kernel code and other things it should not access.

import an external file

How to import an external file into the system?
I want to copy some projects into the system Dennix running on it and run them.
how to do it?

Add a graphics API

Applications should have the ability to draw to the screen directly. Some API needs to be developed for this.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.