apsun / loliOS

Lightweight & operational Linux-inspired OS.
33 stars 1 forks source link
__      ________  _____

/ / / // \/ / / / \/ / / / / /\ \ / / // / / / // // / //____//_/__//__/ A small + lightweight OS

This is a Linux-like x86 operating system built from scratch. It was originally a course project at the University of Illinois at Urbana-Champaign. Since then, numerous additional features have been implemented, including:

Note that this is a Linux-like operating system, not a Linux-compatible operating system. It is neither API nor ABI compatible with Linux, and the userspace libc is not standards-compliant either. This OS is not intended to be used in a production environment; it is for educational purposes only. Notable differences from Linux are:

To compile the OS, boot a Linux system and run the build.sh script. To add userspace programs to the filesystem, add the source code to the userspace directory and they will automatically be compiled into the filesystem image. For static (non-code) files, just add them directly to the filesystem directory. Note that the total size of this directory should not exceed ~3MB, or else the OS will fail to boot.

Do not attempt to boot the OS on real hardware - it will almost certainly not work, and might even set your computer on fire. It has only been tested in QEMU.

Below is a short description of the source tree contents:

filesystem/ This directory contains the base filesystem files (excluding the ones generated by compiling the userspace programs).

kernel/ This directory contains the kernel source code.

userspace/ This directory contains the source code for the userspace programs. The lolibc subdirectory contains the userspace libc implementation.

build.sh This script builds the entire project, including the kernel and all userspace programs. Run it with the optional "clean" argument to delete all object files. Run it with "run" to also boot QEMU after a successful build. Run it with "debug" to launch GDB and attach to a running QEMU instance.

music.sh This script runs a TCP music streaming server. It takes the path to an audio file as an argument, converts it into WAV format, and serves it at port 7878 on the host. To play the music within the VM, connect to 10.0.2.2:7878 using the nc program and pipe the output to the music program.

video.sh This script runs a TCP video streaming server. It takes the path to a video file as an argument, converts it to our homebrew ELVI format, and serves it at port 8989 on the host. On the VM side, use the video program to watch the video.