Awesome
Buzz Operating System š
<img src="https://github.com/eylon-44/Buzz-OS/assets/67273282/22e46b24-26ef-4a0d-930f-22e857af5d55" align="right" width="225" alt="Buzz Logo" title="Buzz Logo"> Buzz is a hobby operating system built for learning purposes. Buzz is probably the best operating system in the world (as of 1918 A.D.). <img src="https://github.com/eylon-44/Buzz-OS/assets/67273282/92ede007-b87f-4993-b111-982da3ac916e" height="250" alt="Buzz Demo" title="Buzz Demo">Table of Contents š¤ø
- Quick Start for Turtles š¢
- Manual for Wizards š§āāļø
- Features š¦āš„ <!-- - [Bootloader š¤°](#bootloader) - [Device Drivers šŖ](#device-drivers) - [Kernel š§ ](#kernel) - [User š«](#user) -->
- Issues š
<a name="quick-start-for-turtles">Quick Start for Turtles š¢</a>
<a name="requirements">Requirements š</a>
The operating system can only be compiled on Unix machines. If you happen to be using a different system, you can download the binary from here.
Make sure you have all of the listed bellow installed before continuing to the next step.
Requirement | Installation |
---|---|
Qemu | sudo apt install qemu-system |
GCC | sudo apt install build-essential |
Make | sudo apt install build-essential |
Python3 | sudo apt install python3 |
<a name="install-and-build">Install & Build š ļø</a>
Clone the repository into your machine and compile with Make.
git clone https://github.com/eylon-44/Buzz-OS
cd Buzz-OS
make
<a name="run">Run š</a>
Inside the project's root directory, enter make run
. The system will boot up and greet you with a terminal program.
Quick Tips<br> ā¢ Use the
help
command to get information about available commands ā¢ Execute a program by inputing its path ā¢ Open a tab withCtrl+Shift+T
, close it withCtrl+Shift+W
, and switch to a different one withAlt+[tab index]
ā¢
<a name="manual-for-wizards">Manual for Wizards š§āāļø</a>
<a name="use">Use š¦§</a>
In the terminal, use the help
command to list available commands. For more details on a specific command, use help
followed by the command's name.
<br>Execute a program by inputting its path. Use the ls
command followed by a file name to check if it's executable.
<br>Open a tab with Ctrl+Shift+T
, close it with Ctrl+Shift+W
, and switch to a different one with Alt+[tab index]
.
<a name="write-your-own-programs">Write Your Own Programs š§āš»</a>
Buzz supplies an easy interface for writing your own user programs in C and Assembly languages.
A custom build system and C standard library is provided, so you can focus on writing awesome code. The Buzz C standard library implements more than 70 functions you can use to write your code better and faster, and the Buzz user Makefile allows you to build Buzz compatible programs with a single command.
All user programs reside in the usr/exe
directory within the project. Each program is a directory containing a Makefile, a .path
file, a source code directory, and an include directory. The most basic user program structure can be defined as follows:
āāā inc
āāā makefile
āāā .path
āāā src
āāā main.c
You can easily generate it by copying the _busy
process.
cd usr/exe
cp -r _busy MyCoolProgram
cd MyCoolProgram
mkdir inc # _busy doesn't have an include directory
You can now write your code under the src
directory and your header files under the inc
directory.
When it's time to compile, enter make
. The build system will compile all .c
and .S
files under the src
directory, include the inc
directory, and link the program with the Buzz C standard library.
Note that in each user program, a .path
file can be found. This file defines the path that will lead to your program once in the system. Make sure to set this file with a valid path before compiling.
echo /home/apps/MyCoolProgram.elf > .path
For available functions and header files from the C standard library, check out the library's interface.
<a name="configurate">Configurate šŖ</a>
Buzz allows you to configure the file system already at compile time.
The usr/file
directory within the project acts as the file system's root directory. Any file placed in this directory will later appear in the operating system's file system at the same relative location.
<br>The terminal allows you to add your own custom commands.
Any executable placed in the /bin
directory within the operating system's file system can be used as a terminal command. Please note that the terminal must be restarted for the changes to take effect.
<a name="features">Features š¦āš„</a>
<a name="bootloader">Bootloader š¤°</a>
- First-stage bootloader that sets up the environment, loads the second stage bootloader and jumps to it
- Second-stage bootloader that loads the kernel from the file system and jumps to it
<a name="kernel">Kernel š§ </a>
- Hardware, exception, and software interrupt handling
- Protected memory management
- Process management
- Priority-based multiprocessing scheduling
- File system
- Standard streams and multi-tab textual display implementation
- More than 25 system call
<a name="device-drivers">Device Drivers šŖ</a>
- Keyboard driver
- Timer driver
- Screen driver (VGA)
- Hard disk driver (PATA)
<a name="user">User š«</a>
- Custom C standard library with more than 70 functions
- Custom build system for user programs
- More than 15 user programs and commands included
<a name="issues">Issues š</a>
If my code sucks, please open an issuse and let me know!
<img src="https://media1.giphy.com/media/v1.Y2lkPTc5MGI3NjExdXF4OHY5ZDQydmF2NjloajN4MDZoeWJ6NGE1dmJnZzVhb2RhdTdkcyZlcD12MV9pbnRlcm5hbF9naWZfYnlfaWQmY3Q9Zw/Y1ybQjHgteZLa/giphy.webp" height="65" alt="Buzz GIF" title="Buzz GIF">Like the work? š
Consider giving the repository a star š