An x86_64 UNIX-like OS from scratch
  • C 94.6%
  • Makefile 3%
  • Assembly 2.3%
Find a file
2025-10-08 22:33:35 +11:00
initrd [userspace] little info window 2025-09-25 16:07:17 +10:00
kernel Revert "[wm] make it actually use mouse instead of CCM" 2025-10-08 22:33:35 +11:00
libc Revert "[wm] make it actually use mouse instead of CCM" 2025-10-08 22:33:35 +11:00
libs [misc] forgor that in gitignore 2025-09-27 22:14:35 +10:00
screenshots [readme] change screenshot 2025-09-27 16:47:26 +10:00
userspace Revert "[wm] make it actually use mouse instead of CCM" 2025-10-08 22:33:35 +11:00
.clang-format [buildsys] I changed smth but I don't remember what 2025-05-22 22:08:01 +10:00
.gitignore [misc] forgor that in gitignore 2025-09-27 22:14:35 +10:00
.gitmodules remove submodule 2025-04-24 09:55:45 +10:00
LICENSE And so, it begins. 2024-12-06 09:39:27 +11:00
limine.conf start on initrd 2024-12-23 16:28:40 +11:00
Makefile [smp] intiation 2025-09-29 12:53:36 +10:00
README.md [buildsys] handle bootloader stuff better 2025-09-27 22:07:34 +10:00
tacos-gcc [libc] a bunch of stub header files for a mystery upcoming port... 2025-07-03 14:23:12 +10:00

TacOS

My from-scratch OS with its own kernel written in C and assembly

TacOS is a UNIX-like kernel which is able to run DOOM, among various other smaller userspace programs. It has things like a VFS, scheduler, TempFS, devices, context switching, virtual memory management, physical page frame allocation, and a port of Doom. It runs both on real hardware (tested on my laptop) and in the Qemu emulator.

A screenshot of TacOS

Please note that TacOS is a hobby toy OS and is not complete enough for real usage. It has multiple known bugs.

I have a Discord server for TacOS where I will share most updates, and you can also get help with your own OSDev project or just have a chat. You can join here.

Quickstart

To build and run TacOS, simply run in your shell:

git clone https://github.com/UnmappedStack/TacOS
cd TacOS && make run

You'll need to have Xorriso, Qemu, NASM, and Clang installed. It will automatically run in the Qemu emulator.

The build system has a few primary commands which you can use:

  • make run: Builds TacOS and runs it in Qemu
  • make qemu: Runs TacOS in Qemu, assuming it's already built (see below command)
  • make disk: Builds the full disk image of TacOS as tacos.iso
  • make kernel: Builds the TacOS kernel, the core of the system
  • make libc: Build the standard library
  • make userspace: Builds the userspace applications
  • make initrd: Creates the initial ramdisk that the system will boot from
  • make lint: Runs linter rules on the kernel
  • make qemu-gdb: Runs TacOS in Qemu with GDB attached (see below)

Debugging TacOS

To attach GDB when testing TacOS, run make qemu-gdb, then in another terminal, run the following:

$ gdb -q
(gdb) target remote :1234
Remote debugging using :1234
warning: No executable has been specified and target does not support
determining executable automatically.  Try using the "file" command.
0x000000000000fff0 in ?? ()
(gdb) file kernel/bin/tacos # if you're debugging the kernel
(gdb) file initrd/usr/bin/<program> # if you're debugging a userspace program
(gdb) continue

License & Contributions

TacOS is under the Mozilla Public License 2.0. See LICENSE for more information.

I'm open to contributions, however I have some simple ground rules and conventions:

  • Please open an issue before opening a pull request, and wait for me to assign you the change.
  • I will not merge any pull requests with a simple typo or grammar mistake! Open an issue if it is a problem.
  • Commit messages should be in the following format: [component] change, where component is the general area of the project you have changed.
  • Break down your commits and pull requests. I will not even bother reviewing a huge pull request with one single massive commit with thousands of lines changed in completely unrelated components.