{"id":13434931,"url":"https://github.com/minoca/os","last_synced_at":"2025-03-18T02:30:41.833Z","repository":{"id":41308869,"uuid":"72385590","full_name":"minoca/os","owner":"minoca","description":"Minoca operating system","archived":false,"fork":false,"pushed_at":"2021-12-17T08:35:39.000Z","size":26406,"stargazers_count":2722,"open_issues_count":22,"forks_count":232,"subscribers_count":151,"default_branch":"master","last_synced_at":"2024-10-27T17:24:55.548Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"C","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/minoca.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2016-10-31T00:56:38.000Z","updated_at":"2024-10-26T19:05:21.000Z","dependencies_parsed_at":"2022-07-18T08:13:31.466Z","dependency_job_id":null,"html_url":"https://github.com/minoca/os","commit_stats":null,"previous_names":[],"tags_count":3,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/minoca%2Fos","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/minoca%2Fos/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/minoca%2Fos/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/minoca%2Fos/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/minoca","download_url":"https://codeload.github.com/minoca/os/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":244143870,"owners_count":20405292,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","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":[],"created_at":"2024-07-31T03:00:27.818Z","updated_at":"2025-03-18T02:30:39.735Z","avatar_url":"https://github.com/minoca.png","language":"C","funding_links":[],"categories":["C","Open Source Operating Systems","More Unix-Like Operating Systems"],"sub_categories":["Most Unix®-Like Engineered Linux [Distributions](https://en.wikipedia.org/wiki/Linux_distribution)"],"readme":"# Minoca OS\n\nMinoca OS is a general purpose operating system written from scratch. It aims to be lean, maintainable, modular, and compatible with existing software. It features a POSIX-like interface towards application software, and a growing suite of popular packages already built and ready to go. On the backend, it contains a powerful driver model between device drivers and the kernel. The driver model enables drivers to be written in a forward compatible manner, so that kernel level components can be upgraded without necessarily requiring a recompilation of all device drivers.\n\nMinoca OS is event driven, preemptible, SMP ready, and network capable. It currently runs on x86 PCs and a range of ARM boards.\n\n### Screenshots\n![Installing Git on Minoca OS](docs/screenshots/Installing-Git.png)\n![Memory Profiler](docs/screenshots/Memory-Profiler.png)\n![Stack Profiler](docs/screenshots/Stack-Profiler.png)\n\n### Getting Started\nIf you're just looking to try out Minoca OS, head over to our [download](https://www.minocacorp.com/download/) page to grab the latest stable images. The rest of this page describes how to use this repository to build your own custom image of Minoca OS.\n\n## Building Minoca OS\nThe paragraphs below will get you from a fresh clone to a built image.\n\n### Environment\nThe Minoca OS build environment is keyed off of a few environment variables you'll need to set in order to orient the build system:\n - `SRCROOT` - Contains the absolute path to the base source directory. This respository is expected to be in a directory called `os` inside `SRCROOT`. If the third-party or tools repositories are present, they should be in directories called `third-party` and `tools` respectively underneath `SRCROOT`. For example, if you had checked out this repository into `~/src/os`, then in your shell you'd run `export SRCROOT=~/src`.\n - `ARCH` - Contains the architecture to build Minoca OS for (aka the target architecture). Valid values are `armv6`, `armv7`, and `x86`.\n - `VARIANT` - Contains the architecture variant, if any. Leave this unset most of the time. Currently the only valid value is `q` for the `x86` architecture, which builds for the Intel Quark.\n - `DEBUG` - Describes whether to build Minoca OS for debugging or release. Valid values are `dbg` for debug or `rel` for release. We always build `dbg`.\n - `PATH` - You'll need to have `$SRCROOT/$ARCH$VARIANT$DEBUG/tools/bin` in your path to build successfully.\n\n### Prerequisites\nTo build Minoca OS you'll need a Minoca-specific toolchain for the particular architecture you're building. Prebuilt toolchains can be found [here](https://www.minocacorp.com/download/#toolchain). If you want to build the toolchain from sources, you'll need to check out the [third-party](https://gitlab.com/minoca/third-party) repository and run \"make tools\" in there.\n\u003e Note: If you want to build your own toolchain on Windows, you may find the [tools](https://gitlab.com/minoca/tools) repository helpful, as it contains a native MinGW compiler, make, and other tools needed to bootstrap a toolchain on Windows.\n\n### Build\nRun `make` to build the OS for the particular architecture you've supplied. Parallel make is supported. The final output of the build will be several .img files located in `$SRCROOT/$ARCH$VARIANT$DEBUG/bin/*.img`. For example, the PC image is usually located at `$SRCROOT/x86dbg/bin/pc.img`. This is a raw hard disk file that can be applied directly to a hard drive or USB stick to boot Minoca OS. The image `install.img` is a generic installation archive that the `msetup` tool can use to create new Minoca OS installations on target disks or partitions.\n\nObject files are generated in `$SRCROOT/$ARCH$VARIANT$DEBUG/obj/os`. You can run `make clean`, or simply delete this directory, to cause the os repository to completely rebuild. Alternatively, you can run `make wipe` to delete all generated files, including the third-party tools you built or downloaded. Running `make wipe` simply deletes `$SRCROOT/$ARCH$VARIANT$DEBUG/`. We usually stick to `make clean` since `make wipe` requires a complete rebuild of the toolchain.\n\nA note for macOS users: We've managed to build successfully using both GCC from XCode 8 (really clang) and Homebrew GCC, both using the 10.12 SDK. Some users have reported that they need to export `SDKROOT=$(xcrun --show-sdk-path)` to build properly.\n\n### Running\nTo boot your built images, you can write the appropriate image for the platform you're trying to boot to a USB flash drive or hard disk. On Windows, you can use the Win32DiskImager tool (included in the [tools](https://gitlab.com/minoca/tools) repository under win32/Win32DiskImager). You can also use the msetup tool to build custom images. If you use the msetup tool to install Minoca OS onto a partition of a disk containing other partitions that you care about (such as on the same machine you're building from), we highly recommend making a complete backup of your disk. Minoca OS is still new, and we wouldn't want a bad bug to wipe out all your data.\n\nIf you're building Minoca OS on Windows and have downloaded the [tools](https://gitlab.com/minoca/tools) repository, several shortcuts have been set up to allow you to quickly run a Qemu instance with the images you've just built. Make sure you fired up the development environment with the setenv.cmd script. Type `run`, then `dx` to fire up an x86 Qemu instance of pc.img with a kernel debugger attached. We use this internally for faster development. If building for ARM, it's `runarm` and `da`.\n\n### Nickel Tour\nBelow is a brief orientation of a few of the directories in the repository. Check the Makefile in each directory for a more detailed description of what that directory contains.\n * `apps` - User mode applications and libraries\n   * `ck` - Chalk, an embeddable scripting language\n   * `debug` - Debugger application\n   * `libc` - The Minoca OS C Library\n   * `osbase` - The Minoca kernel API library\n   * `setup` - The msetup build tool\n   * `swiss` - POSIX tools in a box\n * `boot` - Executables used during system boot\n   * `mbr` - The Master Boot Record\n   * `fatboot` - The Volume Boot Record for FAT file systems\n   * `bootman` - The Minoca Boot Manager\n   * `loader` - The Minoca OS loader\n   * `lib` - Libraries shared across multiple boot executables\n * `drivers` - Device drivers\n   * `acpi` - ACPI platform driver, with AML interpreter\n   * `fat` - FAT file system driver\n   * `gpio` - GPIO core library and SoC drivers\n   * `net` - Networking support\n     * `ethernet` - Wired ethernet controller drivers\n     * `net80211` - Core 802.11 support\n     * `netcore` - Core networking support (TCP, UDP, IP, ARP, etc)\n     * `wireless` - 802.11 wireless controller drivers\n   * `pci` - PCI support\n   * `sd` - SD/MMC support\n   * `spb` - Serial Peripheral Bus drivers (I2C, SPI)\n   * `special` - Special devices (/dev/null, full, zero)\n   * `usb` - USB support\n     * `ehci` - EHCI host controller support\n     * `usbcomp` - USB composite device support\n     * `usbhid` - USB HID support\n     * `usbhub` - USB hub support\n     * `usbkbd` - USB keyboard support\n     * `usbmass` - USB mass storage support\n     * `usbmouse` - USB mouse support\n   * `input` - User input drivers\n   * `videocon` - Video terminal console driver\n * `images` - Recipes to create the final images for each supported platform\n * `include` - Public header files\n * `kernel` - The Minoca OS kernel\n   * `ke` - High level executive functions\n   * `mm` - Memory management\n   * `io` - Input/Output subsystem\n   * `kd` - Kernel debug support\n   * `hl` - Low level hardware layer support\n   * `ob` - Object management\n   * `ps` - Process and thread management\n   * `sp` - System profiler support\n * `lib` - Common libraries used throughout boot, kernel, and user mode.\n   * `basevid` - Library for drawing text on a framebuffer\n   * `fatlib` - FAT file system library\n   * `im` - ELF/PE image library\n   * `partlib` - Partition library\n   * `rtl` - General runtime library (printf, date/time, memcpy, etc)\n   * `termlib` - Terminal support library\n * `tasks` - Internal automation configuration\n * `uefi` - Minimal UEFI implementation for platforms supported by Minoca OS.\n   * `core` - Platform-agnostic UEFI firmware core\n   * `dev` - UEFI device libraries\n   * `plat` - Recipes and code for specific platforms\n     * `beagbone` - BeagleBone Black firmware\n     * `bios` - UEFI over BIOS firmware\n     * `integcp` - Integrator/CP firmware (for ARM Qemu)\n     * `panda` - TI PandaBoard firmware\n     * `rpi` - Raspberry Pi 1 firmware\n     * `rpi2` - Raspberry Pi 2 and 3 firmware\n     * `veyron` - Asus C201 Chromebook firmware\n   * `tools` - Tools used in building final firmware images\n\n## Contributing\nSubmissions are welcome! See our [CONTRIBUTING.md](CONTRIBUTING.md) page for details, or our [WISHLIST](docs/WISHLIST.md) page for suggestions. Bugs can be reported here on Github.\n\n## License\nMinoca OS is licensed to the public under the terms of the GNU General Public License, version 3. Alternate licensing options are available. Contact info@minocacorp.com if your company is interested in licensing Minoca OS. For complete licensing information, see the [LICENSE](LICENSE) file in this repository.\n\n## Contact\n * Email: minoca-dev@googlegroups.com\n   * Contact security@minocacorp.com for security related issues.\n   * Contact info@minocacorp.com for private or business inquries.\n * Website: [http://www.minocacorp.com/](http://www.minocacorp.com)\n * Github: [https://github.com/minoca](https://github.com/minoca)\n * Gitlab: [https://gitlab.com/minoca](https://gitlab.com/minoca)\n * IRC: [ircs://irc.oftc.net:6697/minoca-os](ircs://irc.oftc.net:6697/minoca-os)\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fminoca%2Fos","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fminoca%2Fos","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fminoca%2Fos/lists"}