{"id":25917367,"url":"https://github.com/arsv/minibase","last_synced_at":"2026-03-05T08:34:05.514Z","repository":{"id":142468707,"uuid":"48008258","full_name":"arsv/minibase","owner":"arsv","description":"small static userspace tools for Linux","archived":false,"fork":false,"pushed_at":"2025-01-02T11:56:22.000Z","size":3871,"stargazers_count":178,"open_issues_count":2,"forks_count":15,"subscribers_count":11,"default_branch":"master","last_synced_at":"2025-01-02T12:38:41.604Z","etag":null,"topics":["disk-encryption","init-system","linux","login-system","sh","shell-utilities","wpa-supplicant"],"latest_commit_sha":null,"homepage":"","language":"C","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/arsv.png","metadata":{"files":{"readme":"README","changelog":null,"contributing":null,"funding":null,"license":"COPYING","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-12-14T23:49:55.000Z","updated_at":"2025-01-02T11:56:28.000Z","dependencies_parsed_at":null,"dependency_job_id":"c325f3d6-a9af-455f-887b-f3a0f53d3e4a","html_url":"https://github.com/arsv/minibase","commit_stats":null,"previous_names":[],"tags_count":5,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/arsv%2Fminibase","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/arsv%2Fminibase/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/arsv%2Fminibase/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/arsv%2Fminibase/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/arsv","download_url":"https://codeload.github.com/arsv/minibase/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":241678151,"owners_count":20001682,"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":["disk-encryption","init-system","linux","login-system","sh","shell-utilities","wpa-supplicant"],"created_at":"2025-03-03T14:00:45.452Z","updated_at":"2026-03-05T08:34:05.455Z","avatar_url":"https://github.com/arsv.png","language":"C","funding_links":[],"categories":["Active","C"],"sub_categories":[],"readme":"What is this project\n~~~~~~~~~~~~~~~~~~~~\nThis is a base system / early userspace for Linux.\n\nThe role of this project in a system is similar to that of busybox\nin small custom distributions. Boot the system, load modules, mount\npartitions, establish networking, provide basic services. It is aimed\nprimarily at personal devices running GUIs however.\n\nThe project builds into small statically-linked executables with no\nexternal dependencies. There are no build-time library dependencies\neither, not even libc. The tools can be built with any toolchain that\ncan build the kernel.\n\nSupported targets: x86_64 arm aarch64 rv64 mips mips64 i386.\n(anything else will not work even if toolchain is available)\n\nThis project should be mostly useful for people building their own\ncustom systems, distribution, or maybe even just looking for tools\nto put into initrd.\n\n\nProject status\n~~~~~~~~~~~~~~\nDead-end experimentation.\n\nThis project started as an experiment in making a better userspace for Linux,\nwith a different (compared to mainline) way of running applications. No SUID,\ndifferent approach to shells, better isolation. In a way, it was about making\nLinux a better OS that it was meant to be.\n\nBack when it started, the Linux kernel was still a decent choice to build\nsuch a project on. Not great, it's definitely not the style of kernel\nI would prefer given the choice, but it was acceptable, and there was not\nmuch choice anyway.\n\nThen, Linux (the kernel) took a nosedive.\n\nIn its current state, this project only makes sense if the underlying kernel\nis worth spending time on. The Linux kernel isn't anymore. The loss of a viable\nkernel effectively left the development hanging.\n\nThe real next step, would be a lightweight kernel better suited for running\nthe applications the right way. I might still push this project for some kind\nof completion, but only with a much reduced scope, as a no-dependencies toolbox\nfor small embedded Linux systems I might need to work with.\n\n\nHow to build and run the tools\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nFor a proper build, run\n\n    ./configure\n    make\n\nThe final target executables will be located in ./bin.\n\nTo try the tools without setting up a VM, configure and build\nthe project in development mode:\n\n    ./configure devel\n    make\n\nMost tools can be run right from their source directories.\n\nRun `make clean` when switching between devel and regular build\nto force the objects to be rebuilt with the new compiler flags.\n\nTo build only the tools from a particular directory:\n\n    make libs\n    make -C src/wsupp\n\nThis should be run after configure.\n\n\nJust how small exactly?\n~~~~~~~~~~~~~~~~~~~~~~~\nThe largest individual executable so far is `wsupp`, the WPA supplicant.\nStatically linked for x86_64, it's about 25 KiB in size. Realistically\nit also needs `dhconf` (12 KiB) to work, and the client tool `wifi` (16 KiB).\n\n`msh` is about 16 KiB. `cmd` (interactive shell) is about 18 KiB.\n`svchub` (pid 1 for the majority of system's uptime) is under 10 KiB.\n`vtmux` (logind equivalent) is about 12 KiB.\n\nWhy bother making it small? Because it's a side effect of making it readable\nand debuggable. The idea is that anyone could pick a tool from minibase,\nstart reading it and gain complete understanding of how it works in a very\nreasonable amount of time, say hours. And if necessary, audit or debug it\ndown to assembly level. A major point in achieving this is making sure\nthere are no unnecessary wrappers, useless abstractions or dead code,\nwhich eventually translates into small executables.\n\n\nContributing\n~~~~~~~~~~~~\nThis is not a community project. Do not send patches or pull requests.\n\nIf there's a bug to be fixed, or a tool that you think should be in minibase,\nor a target to support, open an issue.\n\nThis will probably change around 1.0 release but not earlier.\n\n\nLicensing\n~~~~~~~~~\nGNU Public License version 3, see COPYING.\nLimited closed-box license may or may not get added in the future.\n\nThe code in lib/sys, lib/bits and lib/arch constitutes the public interface\nof the Linux kernel. No claims are made for that code, and it should not be\ncopyrightable anyway. If unsure, grab corresponding fragments from either\nthe kernel sources (GPLv2) or the musl libc (MIT license).\n\nThe code in lib/crypto is mostly BSD-licensed. See README there.\n\n\nCredits\n~~~~~~~\nDietlibc and \"Writing Small and Fast Software\" by Felix von Leitner.\nhttps://www.fefe.de/dietlibc/diet.pdf\n\nThe project was heavily influenced by busybox at early stages.\nCertain decision from skarnet/s6 project also played significant role.\nSyscall code (static inline functions with asm volatile blocks)\nfollows musl, because musl folks got it right.\n\nThe Rust coreutils project provided a great deal of inspiration,\nspecifically by showing how not to write coreutils.\n\n\nSee also\n~~~~~~~~\nhttps://busybox.net/\nhttp://www.landley.net/toybox/\nhttp://www.fefe.de/embutils/\nhttp://skarnet.org/software/\nhttp://suckless.org\nhttp://jdebp.eu/Softwares/nosh/\nhttp://b0llix.net/perp/\nhttp://u-root.tk/\nhttps://swtch.com/plan9port/\n\nhttps://www.gnu.org/software/coreutils/coreutils.html\nhttps://www.kernel.org/pub/linux/utils/util-linux/\nhttps://github.com/uutils/coreutils\n\nhttps://github.com/mit-pdos/xv6-public (userspace tools)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Farsv%2Fminibase","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Farsv%2Fminibase","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Farsv%2Fminibase/lists"}