AquilaOS v0.0.1a [NuklearUI]
Posted: Fri Jan 26, 2018 3:07 am
Hello everyone, this is my first post here.
I'm working on a POSIX-compliant operating system, called AquilaOS. Currently it has some good features for me to announce it.
----- UPDATE: Release -----
https://github.com/mohamed-anwar/Aquila ... v-build003
This is the command I use to start it, "-serial stdio" is used to show debug log and everything else should be self-explanatory.
You can use any other VM though, VirtualBox works just fine too.
Here are some of the details you might concern yourself with:
* Kernel:
- Topology: Monolithic (no loadable modules yet).
* Arch:
- x86 32bit (though the kernel is designed to be ISA transparent, arch. dependent parts are handled with arch_ stubs)
* Memory Management:
- Physical Memory: 32-bit paging mode (4K pages), Buddy Algorithm for frame allocation
- Kernel Objects: Simple Linked List (implemented using an array), unified interface, no SLxB (yet).
- Forking: Lazy, copy-on-write.
- Userspace allocation: sbrk() interface only, lazy, allocate on demand.
* Process Management:
- Executable format: ELF only
- Scheduling algorithm: Simple round-robin algorithm for ready queue, no prioritization, constant time quanta.
- I/O handling: Both blocking (sleeping on read/write queues) and non-blocking are supported.
* Filesystems:
- Virtual filesystem: Mountpoints are handled with a tree
- initramfs: Used for ramdisk, supports CPIO archive (read only).
- tmpfs: Generic temporary filesystem (read/write).
- devfs: Just a tmpfs with static device nodes (the kernel doesn't populate devices yet).
- devpts: Just a tmpfs for pty slaves (automatically populated by the kernel).
- procfs: Simple (dumb) procfs implementation.
- ext2: Simple ext2 fs handler, no caching yet.
* Devices:
Kernel devices subsystem is called "kdev" and uses major/minor numbers same as LANANA.
- Basic stuff: i8042 (PS/2), PS/2 Keyboard, IBM TGA console.
- ATA: PIO mode only for now, lame, I know.
- fbdev: Framebuffer device, Linux API (Currently, only VESA 3.0 is partially supported).
- tty: Generic tty interface that could be attached to any device (pty, console, uart).
* System: (This is where the fun is)
- All implemented interfaces are POSIX compatible. (susv4tc1 standard)
- C Library: newlib-3.0.0.
- fbterm: Framebuffer based terminal (built using libvterm).
- aqbox: Aquila Box (like busybox) with (partial) support for (cat, clear, echo, env, ls, mkdir, mknod, ps, pwd, stat, uname, unlink, mount, login) utilities.
- tcc: Tiny C Compiler by Fabrice Bellard (distributed as binary).
- lua: Lua 5 programming language (distributed as binary).
- kilo: Text editor that interacts with VT100/ANSI terminal (distributed as binary).
Build Instructions:
- You need to build GCC generic compiler and Newlib, will fetch and build everything, beware though that some packages have dependencies (like makeinfo), it's a lengthy and tiring process, I'll provide the build binaries later but can't right now.
- After that in the root directory should build everything, it depends on cpio and grub2-mkrescue (provided in Fedora, Ubuntu users may need to use grub-mkrescue instead).
I'm working on a POSIX-compliant operating system, called AquilaOS. Currently it has some good features for me to announce it.
----- UPDATE: Release -----
https://github.com/mohamed-anwar/Aquila ... v-build003
This is the command I use to start it, "-serial stdio" is used to show debug log and everything else should be self-explanatory.
Code: Select all
$ qemu-kvm -cdrom aquila.iso -serial stdio -m 1G -d cpu_reset -no-reboot -boot d
Here are some of the details you might concern yourself with:
* Kernel:
- Topology: Monolithic (no loadable modules yet).
* Arch:
- x86 32bit (though the kernel is designed to be ISA transparent, arch. dependent parts are handled with arch_ stubs)
* Memory Management:
- Physical Memory: 32-bit paging mode (4K pages), Buddy Algorithm for frame allocation
- Kernel Objects: Simple Linked List (implemented using an array), unified interface, no SLxB (yet).
- Forking: Lazy, copy-on-write.
- Userspace allocation: sbrk() interface only, lazy, allocate on demand.
* Process Management:
- Executable format: ELF only
- Scheduling algorithm: Simple round-robin algorithm for ready queue, no prioritization, constant time quanta.
- I/O handling: Both blocking (sleeping on read/write queues) and non-blocking are supported.
* Filesystems:
- Virtual filesystem: Mountpoints are handled with a tree
- initramfs: Used for ramdisk, supports CPIO archive (read only).
- tmpfs: Generic temporary filesystem (read/write).
- devfs: Just a tmpfs with static device nodes (the kernel doesn't populate devices yet).
- devpts: Just a tmpfs for pty slaves (automatically populated by the kernel).
- procfs: Simple (dumb) procfs implementation.
- ext2: Simple ext2 fs handler, no caching yet.
* Devices:
Kernel devices subsystem is called "kdev" and uses major/minor numbers same as LANANA.
- Basic stuff: i8042 (PS/2), PS/2 Keyboard, IBM TGA console.
- ATA: PIO mode only for now, lame, I know.
- fbdev: Framebuffer device, Linux API (Currently, only VESA 3.0 is partially supported).
- tty: Generic tty interface that could be attached to any device (pty, console, uart).
* System: (This is where the fun is)
- All implemented interfaces are POSIX compatible. (susv4tc1 standard)
- C Library: newlib-3.0.0.
- fbterm: Framebuffer based terminal (built using libvterm).
- aqbox: Aquila Box (like busybox) with (partial) support for (cat, clear, echo, env, ls, mkdir, mknod, ps, pwd, stat, uname, unlink, mount, login) utilities.
- tcc: Tiny C Compiler by Fabrice Bellard (distributed as binary).
- lua: Lua 5 programming language (distributed as binary).
- kilo: Text editor that interacts with VT100/ANSI terminal (distributed as binary).
Build Instructions:
- You need to build GCC generic compiler and Newlib,
Code: Select all
$ cd build-tools && bash build.sh
- After that
Code: Select all
$ make aquila.iso