Lyos is an open source microkernel multitasking operating system, it runs on 64-bit x86-based PCs. It is distributed under the GNU General Public License.
To try out Lyos without building the whole system, you can download a xz-compressed nightly image, uncompress the image and run it with QEMU:
qemu-system-x86_64 -smp 2 -drive id=hda,file=lyos-i686.img,format=raw,if=none -device virtio-blk-pci,drive=hda -m 2048 -serial stdio -vga virtio -display sdl -cpu host,pmu=true --enable-kvm -netdev user,id=net0,hostfwd=tcp::5555-:22 -device virtio-net,netdev=net0
Lyos has many standard features:
- Microkernel
- Kernel only handles message passing, interrupts and task scheduling, other things like reading/writing files, memory managing and device operations are handled by servers.
- Servers are single executables(not modules) that are loaded by kernel at boot time, running in user privilege level and their own address space.
- Multitasking
- BFS scheduler
- Symmetric multiprocessing
- ELF loading
- Interprocess Communication
- Servers and user programs communicate using fixed length message(80 bytes)
- Interrupts are converted into messages and sent to userspace servers
- Unix signals
- Virtual file system
- Ext2 filesystem support
- procfs, sysfs, …
- Userspace
- Newlib
- GCC, binutils, bash, …
- Weston Wayland’s reference compositor
First we will clone the repository into the lyos
directory:
git clone https://github.com/Jimx-/lyos.git
cd lyos
Since Lyos requires various build-time dependencies, it is recommended to set up a Docker instance as the build environment to make sure the correct versions of these dependencies are installed:
docker build -t lyos_build .
After building the Docker image, start a container:
docker run -v $PWD:/workspace/lyos -it lyos_build
If everything is set up properly, you should see the bash prompt and a lyos
directory under /workspace
containing the source files in the repository:
root@2519c5bdfad9:/# ls /workspace
lyos
Now you can switch to the /workspace/lyos
directory and proceed to the Building section.
cd /workspace/lyos
Alternatively, you can install the dependencies manually if you prefer to build Lyos on the host system directly. The complete list of required dependencies is in Dockerfile
. You can install the dependencies with a standard package manager (e.g. apt
on Ubuntu).
Make sure that you are in the root directory of this repository (/workspace/lyos
if you are using a Docker container). First we need to create the build configuration file and install some userspace headers to the cross-compile system root:
make <SUBARCH=x86_64> defconfig objdirs install-headers
The optional SUBARCH
environment variable specifies which architecture to build Lyos for. Currently only x86_64
, i686
and riscv64
are supported. If not specified, Lyos will be built for the architecture of the host system.
Set up the toolchain and userspace packages for building Lyos:
cd toolchain
./download.sh
BUILD_EVERYTHING=true ./setup.sh <-m x86_64>
cd ..
Similar to SUBARCH
, the -m
option of setup.sh
specifies the architecture to build the toolchain and packages for.
Now build the kernel and servers:
make SUBARCH=x86_64
(Optionally) setup.sh
only builds some core userspace packages like bash
and coreutils
. You still need to build some extra packages if you want to use graphical interface:
cd toolchain
BUILD_EVERYTHING=true ./setup-x11.sh -m x86_64
BUILD_EVERYTHING=true ./setup-extra.sh -m x86_64
cd ..
Now you can create the disk image for Lyos:
sudo ./scripts/setup-disk.sh
This will create a disk image lyos-disk.img
under the current directory which can be launched with QEMU.