https://github.com/Bananymous/banan-os Skip to content Navigation Menu Toggle navigation Sign in * Product + GitHub Copilot Write better code with AI + Security Find and fix vulnerabilities + Actions Automate any workflow + Codespaces Instant dev environments + Issues Plan and track work + Code Review Manage code changes + Discussions Collaborate outside of code + Code Search Find more, search less Explore + All features + Documentation + GitHub Skills + Blog * Solutions By company size + Enterprises + Small and medium teams + Startups By use case + DevSecOps + DevOps + CI/CD + View all use cases By industry + Healthcare + Financial services + Manufacturing + Government + View all industries View all solutions * Resources Topics + AI + DevOps + Security + Software Development + View all Explore + Learning Pathways + White papers, Ebooks, Webinars + Customer Stories + Partners + Executive Insights * Open Source + GitHub Sponsors Fund open source developers + The ReadME Project GitHub community articles Repositories + Topics + Trending + Collections * Enterprise + Enterprise platform AI-powered developer platform Available add-ons + Advanced Security Enterprise-grade security features + GitHub Copilot Enterprise-grade AI features + Premium Support Enterprise-grade 24/7 support * Pricing Search or jump to... Search code, repositories, users, issues, pull requests... Search [ ] Clear Search syntax tips Provide feedback We read every piece of feedback, and take your input very seriously. [ ] [ ] Include my email address so I can be contacted Cancel Submit feedback Saved searches Use saved searches to filter your results more quickly Name [ ] Query [ ] To see all available qualifiers, see our documentation. Cancel Create saved search Sign in Sign up Reseting focus You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session. You switched accounts on another tab or window. Reload to refresh your session. Dismiss alert {{ message }} Bananymous / banan-os Public * Notifications You must be signed in to change notification settings * Fork 12 * Star 298 Mirror of banan-os, my hobby operating system git.bananymous.com/bananymous/banan-os License BSD-2-Clause license 298 stars 12 forks Branches Tags Activity Star Notifications You must be signed in to change notification settings * Code * Issues 0 * Pull requests 0 * Actions * Projects 0 * Security * Insights Additional navigation options * Code * Issues * Pull requests * Actions * Projects * Security * Insights Bananymous/banan-os main BranchesTags [ ] Go to file Code Folders and files Last commit Last Name Name message commit date Latest commit History 2,420 Commits .vscode .vscode BAN BAN assets assets bootloader bootloader kernel kernel ports ports script script toolchain toolchain userspace userspace .clangd .clangd .gitignore .gitignore .gitmodules .gitmodules .pre-commit-config.yaml .pre-commit-config.yaml CMakeLists.txt CMakeLists.txt LICENSE LICENSE README.md README.md base-sysroot.tar.gz base-sysroot.tar.gz bos bos View all files Repository files navigation * README * BSD-2-Clause license [6874747073] [6874747073] [6874747073] [6874747073] banan-os This is my hobby operating system written in C++. Currently supports x86_64 and i686 architectures. You can find a live demo here If you want to try out DOOM, you should first enter the GUI environment using the start-gui command. Then you can run doom in the GUI terminal. Features General * [*] Ring3 userspace * [*] SMP (multiprocessing) * [*] Linear framebuffer (VESA and GOP) * [*] Network stack * [*] ELF executable loading * [*] AML interpreter (partial) * [*] Basic graphical environment + [*] Terminal emulator + [*] Status bar + [ ] Program launcher + [ ] Some nice apps * [*] ELF dynamic linking * [*] copy-on-write memory + [*] file mappings + [ ] anonymous mappings Drivers * [*] NVMe disks * [*] ATA (IDE, SATA) disks * [*] E1000 and E1000E NICs * [*] RTL8111/8168/8211/8411 NICs * [*] PS2 keyboard (all scancode sets) * [*] PS2 mouse * [*] USB + [*] Keyboard + [*] Mouse + [*] Mass storage + [ ] Hubs + [ ] ... * [ ] virtio devices (network, storage) Network * [*] ARP * [*] ICMP * [*] IPv4 * [*] UDP * [*] TCP (partial and buggy) * [*] Unix domain sockets * [ ] SSL Filesystems * [*] Virtual filesystem * [*] Ext2 * [*] FAT12/16/32 * [*] Dev * [*] Ram * [*] Proc * [ ] Sys * [ ] 9P Bootloader support * [*] GRUB * [*] Custom BIOS bootloader * [ ] Custom UEFI bootloader screenshot from qemu running banan-os Code structure Each major component and library has its own subdirectory (kernel, userspace, libc, ...). Each directory contains directory include, which has all of the header files of the component. Every header is included by its absolute path. Building Needed packages apt (tested on ubuntu 22.04) # apt install build-essential git ninja-build texinfo bison flex libgmp-dev libmpfr-dev libmpc-dev parted qemu-system-x86 cpu-checker pacman # pacman -S --needed base-devel git wget cmake ninja parted qemu-system-x86 Compilation To build the toolchain for this os. You can run the following command. NOTE: The following step has to be done only once. This might take a long time since we are compiling binutils and gcc. ./bos toolchain To build the os itself you can run one of the following commands. You will need root access for disk image creation/modification. ./bos qemu ./bos qemu-nographic ./bos qemu-debug ./bos bochs You can also build the kernel or disk image without running it: ./bos kernel ./bos image To build for other architectures set environment variable BANAN_ARCH= arch (e.g. BANAN_ARCH=i686). To change the bootloader you can set environment variable BANAN_BOOTLOADER; supported values are BANAN (my custom bootloader) and GRUB. To run with UEFI set environment variable BANAN_UEFI_BOOT=1. You will also have to set OVMF_PATH to the correct OVMF (default /usr/share/ ovmf/x64/OVMF.fd). If you have corrupted your disk image or want to create new one, you can either manually delete build/banan-os.img and build system will automatically create you a new one or you can run the following command. ./bos image-full I have also created shell completion script for zsh. You can either copy the file in script/shell-completion/zsh/_bos to /usr/share/zsh/ site-functions/ or add the script/shell-completion/zsh to your fpath in .zshrc. Contributing As the upstream is hosted on my server https://git.bananymous.com/ Bananymous/banan-os, merging contributions is not as trivial as it would be on GitHub. You can still send PRs in GitHub in which case I should be able to download the diff and apply it manually. If you want, I can also provide you an account to my git server. In this case please contact me (email, discord). As this is mostly a learning experience for me, I would appreciate if you first contacted me about adding new features (email, discord, issue, ...). If you send a PR about something I was planning on doing myself and you didn't ask me, I will probably just close it. Bug fixes are always welcome! Commit message should be formatted followingly 1. First line is of the form "Subject: Description", where Subject tells the area touched (Kernel, Shell, BuildSystem, ...) and Description is brief description of the change done. First line should fit fully in 72 characters. 2. Body of the message should further describe the change and reasoning behind the change. All commits should pass the pre-commit hook defined in .pre-commit-config.yaml. For instructions on how to setup pre-commit, please see https://pre-commit.com/#install. About Mirror of banan-os, my hobby operating system git.bananymous.com/Bananymous/banan-os Resources Readme License BSD-2-Clause license Activity Stars 298 stars Watchers 5 watching Forks 12 forks Report repository Languages * C++ 87.2% * C 6.9% * Assembly 3.4% * CMake 1.4% * Shell 1.1% Footer (c) 2024 GitHub, Inc. Footer navigation * Terms * Privacy * Security * Status * Docs * Contact * Manage cookies * Do not share my personal information You can't perform that action at this time.