{"id":43934451,"url":"https://github.com/whampson/ohwes","last_synced_at":"2026-02-07T00:40:34.442Z","repository":{"id":83021721,"uuid":"321174556","full_name":"whampson/ohwes","owner":"whampson","description":"My hobby operating system.","archived":false,"fork":false,"pushed_at":"2025-09-07T05:18:02.000Z","size":71860,"stargazers_count":7,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-09-07T06:22:46.284Z","etag":null,"topics":["kernel","kernel-development","osdev","osdev-projects"],"latest_commit_sha":null,"homepage":"","language":"C","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/whampson.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2020-12-13T22:38:07.000Z","updated_at":"2025-09-07T05:18:05.000Z","dependencies_parsed_at":"2024-01-08T11:06:11.190Z","dependency_job_id":"7790545d-0913-4539-80dc-361bff2c1af5","html_url":"https://github.com/whampson/ohwes","commit_stats":null,"previous_names":[],"tags_count":1,"template":false,"template_full_name":null,"purl":"pkg:github/whampson/ohwes","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/whampson%2Fohwes","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/whampson%2Fohwes/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/whampson%2Fohwes/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/whampson%2Fohwes/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/whampson","download_url":"https://codeload.github.com/whampson/ohwes/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/whampson%2Fohwes/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29182377,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-06T23:15:33.022Z","status":"ssl_error","status_checked_at":"2026-02-06T23:15:09.128Z","response_time":59,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["kernel","kernel-development","osdev","osdev-projects"],"created_at":"2026-02-07T00:40:34.363Z","updated_at":"2026-02-07T00:40:34.432Z","avatar_url":"https://github.com/whampson.png","language":"C","funding_links":[],"categories":[],"sub_categories":[],"readme":"# OH-WES\n**OH-WES** is an OS for Wes! Written by me for the sole purpose of learning\nabout operating systems the hard way *(also because I find this sort of thing\nfun)*. OH-WES is a 32-bit protected-mode operating system for the Intel 386 and\nis currently in early development.\n\n![ohwes](https://github.com/whampson/ohwes/assets/11916560/b3301a4b-d48e-476b-9956-438748cacbff)\n\n## What does it do?\nNot much yet, on the surface anyways. It features a somewhat VT100-compatible\ntext terminal with working keyboard input. Currently, it runs in ring 3\nProtected Mode in a crude userland baked into the kernel image (no program loader\nyet). It can talk to the kernel through a system call interface and features the\nusual read/write/open/close/ioctl driver framework. Right now, the RTC and console\nare the the only supported devices. :-) It runs on real hardware (tested on three\ndifferent PCs from 1997-2004, at least) and can theoretically run on any PC with\nan Intel 386 processor (tested with various PCem emulations).\n\nThings I still need to do before it's *really* a working OS are: create a floppy\ndisk driver and program loader, implement basic filesystem support (FAT-12 at first,\nmaybe ext2 later), enable virtual memory and build a dynamic memory allocator, allow\nfor terminal switching, and create a program scheduler. Eventually I'd like to try\nhooking up a a real serial terminal and see if I can interact with the system over the\nserial I/O port, as well as play with the GPU and attempt to implement a 3D graphics\ndriver. Maybe even port DOOM or GTA3? :-)\n\n##  How do I use it?\n### Clone the repo\n```\n\u003e git clone --recurse-submodules https://github.com/whampson/ohwes\n```\n\n### Prepare the Environment\n#### Install GCC Cross Compiler\nInstall a GCC cross-compiler. This will be used to build the operating system\ncode. Currently, we are using GCC 7.1.0 graciously pre-compiled by *lordmilko*\nat [lordmilko/i386-elf-tools](https://github.com/lordmilko/i686-elf-tools):\n1. Download [i686-elf-tools-windows.zip](https://github.com/lordmilko/i686-elf-tools/releases/download/7.1.0/i686-elf-tools-windows.zip) or [i686-elf-tools-linux.zip](https://github.com/lordmilko/i686-elf-tools/releases/download/7.1.0/i686-elf-tools-linux.zip).\n2. Extract .zip contents to `build/i686-elf-tools/`\n    * Your build directory structure should look like this:\n        ```\n        ohwes/\n        └───build/\n            └───i686-elf-tools/\n                ├───bin/\n                ├───include/\n                ├───lib/\n                ├───libexec/\n                └───share/\n        ```\n\n#### Install Native Build Tools (Windows)\nOH-WES is built on Windows under a MINGW32 environment using a GNU Make and GCC.\n\n1. Install MSYS2 and QEMU.\n```\nPS\u003e winget install msys2\nPS\u003e winget install qemu\n```\nIf you do not have winget, see [Windows Package Manager for Developers](https://learn.microsoft.com/en-us/windows/package-manager/#windows-package-manager-for-developers).\n\n2. Update MSYS2. You will need to run this command again if you are prompted to\nrestart the shell.\n```\nMSYS2\u003e pacman -Syuu\n```\n\n3. Install native build tools.\n```\nMSYS2\u003e pacman -Syu msys/make\nMSYS2\u003e pacman -Syu mingw32/mingw-w64-i686-toolchain\n```\n\n4. Use a MINGW32 shell to build OH-WES (see [Building OH-WES](#building-oh-wes)).\n\n#### Install Native Build Tools (Linux/Debian)\n1. Install build-essential\n```\n\u003e apt-get install build-essential\n```\n\n### Build OH-WES\nOpen a Bash shell (MINGW32 on Windows) and navigate to the project root, then\nsource the environment script. This script will ensure your PATH is set\ncorrectly and that the necessary tools are accessible (this only needs to be\ndone once per session).\n```\n\u003e cd ohwes/\n\u003e . scripts/env.sh\n```\n\nNow, simply run `make` to begin building OH-WES!\n```\n\u003e make\n```\n\n### Run OH-WES with QEMU or Bochs\nTo run with QEMU, install QEMU and make sure `qemu-system-i386` is in your path, then:\n```\n\u003e make run\n```\n\nFor Bochs, just install Bochs and make sure `bochs` is in your path, create a bochsrc.bxrc\nfile and put it in the project root, then:\n```\n\u003e make run-bochs\n```\n\n### Create an OH-WES Floppy Disk Image\nYou can create a floppy disk image of OH-WES by running the following:\n```\n\u003e make img\n```\n\nThis builds my `fatfs` tool then creates a FAT-12 floppy disk image using it.\nYou can point other emulators to this image, or write it to a real floppy disk\nvia the `dd` command.\n\n### Create a Bootable OH-WES Floppy Disk 💾\nYou may also bypass creating an image and write the files directly to disk if your system\nhas FAT-12 support:\n```\n\u003e make format-floppy         # DESTROYS ALL DISK CONTENTS\n\u003e make floppy                # assumes disk is mounted at /a/\n```\nThe `format-floppy` command only needs to be run if the disk is not FAT-12 formatted or if\nthe kernel size changes considerably, as the bootloader does not support fragmentation. If you\nexperience weird glitches while using a real floppy disk , try formatting the disk first. Then\nagain, it may be bugs in my code... :-) have fun!\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fwhampson%2Fohwes","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fwhampson%2Fohwes","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fwhampson%2Fohwes/lists"}