{"id":13628960,"url":"https://github.com/cahirwpz/mimiker","last_synced_at":"2025-04-17T04:32:45.335Z","repository":{"id":37928753,"uuid":"46346617","full_name":"cahirwpz/mimiker","owner":"cahirwpz","description":"Simple unix-like operating system for education and research purposes","archived":false,"fork":false,"pushed_at":"2024-09-03T22:15:30.000Z","size":7273,"stargazers_count":301,"open_issues_count":38,"forks_count":48,"subscribers_count":13,"default_branch":"master","last_synced_at":"2024-11-08T19:42:51.070Z","etag":null,"topics":["aarch64","educational","kernel","os","riscv32","riscv64"],"latest_commit_sha":null,"homepage":"https://mimiker.ii.uni.wroc.pl","language":"C","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"bsd-3-clause","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/cahirwpz.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}},"created_at":"2015-11-17T12:46:47.000Z","updated_at":"2024-11-07T11:56:38.000Z","dependencies_parsed_at":"2024-01-18T08:41:27.202Z","dependency_job_id":"53ef4d5a-54d2-4149-b345-91e208200ea7","html_url":"https://github.com/cahirwpz/mimiker","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cahirwpz%2Fmimiker","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cahirwpz%2Fmimiker/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cahirwpz%2Fmimiker/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cahirwpz%2Fmimiker/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/cahirwpz","download_url":"https://codeload.github.com/cahirwpz/mimiker/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":249316014,"owners_count":21249875,"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":["aarch64","educational","kernel","os","riscv32","riscv64"],"created_at":"2024-08-01T22:01:00.275Z","updated_at":"2025-04-17T04:32:40.327Z","avatar_url":"https://github.com/cahirwpz.png","language":"C","funding_links":[],"categories":["C"],"sub_categories":[],"readme":"# Mimiker: Unix-like system for education and research purposes\n\nMimiker's main goal is to deliver minimal Unix-like operating system, i.e.\nthe kernel and a set of userspace programs.\n\nKernel design is heavily inspired by FreeBSD \u0026 NetBSD systems with some ideas\ntaken from Linux, Plan9 and other OSes. We spend a lot of time reading source\ncode of open-source operating systems. We carefully choose their best design\ndecisions, ideas, algorithms, APIs, practices and so on, distill them to bare\nminimum and reimplement them or adapt to Mimiker code base. We hope not to\nrepeat their mistakes and move away from legacy and non-perfect solutions.\n\nMimiker project gathers like minded people who value minimalism, simplicity and\nreadability of code. We strive for the lowest possible complexity of solutions.\nWe love to throw away code that isn't terribly useful or handles rare edge\ncases. We know value of debuggability and we don't hesitate to spend time\nwriting tools that help to improve it.\n\nThough userspace programs are part of Mimiker project, they've got simply ported\nfrom NetBSD or [suckless][1] project. We focus on kernel development, since we\nfind it more interesting. We don't want to invest too much time into the device\ndrivers, so we keep a list of target platforms small.\n\nIf you'd like to get involved in the project please read our [Wiki][2] to find\nout more!\n\n## Where we are\n\nMimiker is a real-time operating system. The kernel is preemptible and our\nmutexes support priority inheritance. We minimize work done in interrupt context\nby delegating it to interrupt threads instead of running it using soft\ninterrupts.\n\nMimiker runs on [MIPS][15] (32-bit), [AArch64][9] and [RISC-V][10] (both 32-bit\nand 64-bit) architectures under [QEmu][11] and [Renode][12] control.\n\nMimiker has nice set of debugging tools: `gdb` scripts written in Python, Kernel\nAddress Sanitizer, Lock dependency validator, Kernel Concurrency Sanitizer. We\neven have support for profiling the kernel using `gprof`! We use [Clang][19] to\ncompile our code base, hence we can employ sophisticated dynamic and static\nanalysis algorithms to aid code reliablity.\n\nA common set of synchronization primitives is provided, i.e. spin-locks, mutexes\nand conditional variables - all with simple semantics. We don't have multiple\nprimitives that do similar things, but a little bit differently, which is common\nfor FreeBSD or Linux kernels.\n\nMimiker's kernel memory is wired (i.e. non-swappable), so you don't have to\nworry about choosing right locks when accessing kernel memory, unlike in\nFreeBSD.  We have buddy memory allocator for physical memory, virtual address\nspace allocator and slab allocator based on [Magazines and Vmem][3] paper. Our\nmemory allocators are simple yet efficient.\n\nMimiker's driver infrastructure abstracts away concept of hardware register\nand interrupts in similar manner to FreeBSD's [NewBus][14]. Special care is\ntaken to make drivers portable. We have enumerator routines that autodetect\ndevices attached to PCI and USB buses. We use [flat device tree][13] to drive\nkernel configuration during startup phase.\n\nVirtual file system and user virtual address space management are loosely based\non FreeBSD ideas. They need substatial amount of work to become as mature as in\nFreeBSD or Linux kernels.\n\n## What we are proud of\n\nWe have over eighty [syscalls][4] that allow us to run various open-source\ntools, including NetBSD's [Korn Shell][5], [Atto Emacs][6] editor, [Lua][7]\ninterpreter, and many more. We even have a game:\n\n![tetris][8]\n\nMimiker supports:\n * UNIX file I/O -- well known APIs for file-like objects access,\n * interprocess communication -- POSIX signal and pipes,\n * job control -- thus we can run unmodified [Korn Shell][18],\n * UNIX credentials -- users, groups, file permissions,\n * libterminfo, hence Mimiker can run some fullscreen terminal applications,\n * [pseudoterminals][16] -- so we can run [script][17] or terminal emulators.\n\n## What is missing\n\nWe would like to support:\n * multi-core systems,\n * VirtIO and virt platforms in QEmu,\n * a filesystem for non-volatile storage devices,\n * TCP/IP protocols.\n\nThere's plenty of work to be done. Please refer to our roadmap!\n\n[1]: https://suckless.org\n[2]: https://github.com/cahirwpz/mimiker/wiki\n[3]: https://www.usenix.org/legacy/publications/library/proceedings/usenix01/full_papers/bonwick/bonwick.pdf\n[4]: https://github.com/cahirwpz/mimiker/blob/master/sys/kern/syscalls.master\n[5]: https://man.netbsd.org/ksh.1\n[6]: https://github.com/hughbarney/atto\n[7]: https://www.lua.org/docs.html\n[8]: https://mimiker.ii.uni.wroc.pl/resources/tetris.gif\n[9]: https://www.qemu.org/docs/master/system/target-arm.html\n[10]: https://www.qemu.org/docs/master/system/target-riscv.html\n[11]: https://www.qemu.org\n[12]: https://renode.io\n[13]: https://wiki.freebsd.org/FlattenedDeviceTree\n[14]: https://nostarch.com/download/samples/freebsd-device-drivers_ch7.pdf\n[15]: https://www.qemu.org/docs/master/system/target-mips.html\n[16]: https://en.wikipedia.org/wiki/Pseudoterminal\n[17]: https://man.netbsd.org/script.1\n[18]: https://man.netbsd.org/ksh.1\n[19]: https://clang.llvm.org/\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcahirwpz%2Fmimiker","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fcahirwpz%2Fmimiker","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcahirwpz%2Fmimiker/lists"}