{"id":15148707,"url":"https://github.com/initkit/initkit","last_synced_at":"2025-04-09T09:09:27.230Z","repository":{"id":75489663,"uuid":"41643105","full_name":"InitKit/InitKit","owner":"InitKit","description":"Neo-InitWare is a modular, cross-platform reimplementation of the systemd init system. It is experimental.","archived":false,"fork":false,"pushed_at":"2021-11-18T12:33:49.000Z","size":213,"stargazers_count":360,"open_issues_count":2,"forks_count":24,"subscribers_count":31,"default_branch":"main","last_synced_at":"2025-04-09T09:09:22.783Z","etag":null,"topics":["bsd","cloud","ecommerce","freebsd","init","init-system","javascript","js","linux","manager","modular","netbsd","openbsd","posix","service","service-manager","system","systemd","typescript","unix"],"latest_commit_sha":null,"homepage":"http://brand.initware.com","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/InitKit.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":".github/FUNDING.yml","license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null},"funding":{"github":"netbsduser"}},"created_at":"2015-08-30T21:05:58.000Z","updated_at":"2025-01-31T07:58:51.000Z","dependencies_parsed_at":"2023-06-06T16:00:27.458Z","dependency_job_id":null,"html_url":"https://github.com/InitKit/InitKit","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/InitKit%2FInitKit","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/InitKit%2FInitKit/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/InitKit%2FInitKit/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/InitKit%2FInitKit/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/InitKit","download_url":"https://codeload.github.com/InitKit/InitKit/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248008630,"owners_count":21032556,"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":["bsd","cloud","ecommerce","freebsd","init","init-system","javascript","js","linux","manager","modular","netbsd","openbsd","posix","service","service-manager","system","systemd","typescript","unix"],"created_at":"2024-09-26T13:21:55.154Z","updated_at":"2025-04-09T09:09:27.213Z","avatar_url":"https://github.com/InitKit.png","language":"C++","readme":"![InitKit](docs/Logo.png)\n=========================\n\n**InitKit** is the standard Unix init system. It is designed for flexibility in\naccordance with a special operationalisation of the principles of the Unix Way.\nA novel implementation of the *systemd* init system in JavaScript is hosted atop\na lightweight native framework. Relatively high fidelity is maintained to the\nsemantics of the systemd transaction generator and job engine.\n\nInitKit is not intended at present to be be used in production. The code is\nbeing written in exploratory fashion for now, and refactoring of some components\nwill be necessary.\n\nArchitecture\n------------\n\nThe InitKit Scheduler Service, the program which implements the majority of\nthe InitKit system, is implemented in a modular, layered fashion. We will\nstart with the lowest levels of that service and proceed upwards.\n\n## Portability Layer\n\nThis layer sits directly atop the provisions of the host operating system. The\nmost basic operations on which the event loop depends may be indirected through\nthis layer.\n\n## Event Loop (EVLOOP)\n\nInitKit is designed with asynchronicity in mind. A Kernel Queues (or\nLibkqueue on non-BSD systems) event loop is the centrepiece of this.\n\n## Core Services\n\nThis layer is comprised of several modules which integrate with one-another.\n\n### Job Scheduler (JOBSCHED)\n\nJob scheduling is more thoroughly described in the `niw_scheduling(7)` manual\npage.\n\nResponsible for scheduling jobs to run at the correct time. Jobs are\nstate-querying or state-change requests on objects, e.g. \"Start OpenSSH\".\n\nThe Transaction Generator is a major submodule of the Job Scheduler. It prepares\nTransactions which contain a set of jobs to be run in pursuit of a particular\ngoal job, e.g. \"Start OpenSSH\" or \"Stop NetworkManager\".\nTransactions are generated with respect to the relationships between objects\nspecified in the Object Graph.\n\nThe result of transaction generation is a set of jobs to be run. With respect\nto the `before` and `after` ordering directives, a directed acyclic graph is\nformed out of all the objects on which a job is present therefor in the\ntransaction. Transactions containing conflicting jobs, or out of which a DAG\ncannot be formed, are rejected; these arise only from improper cyclic ordering\nspecifications or conflicting requirements between objets.\n\nJobs are run starting with the leaves of the graph. As jobs complete (either\nsuccessfully or not), they are removed from the graph and action taken. If\nanother job depends on the completed job having succeeded, then that dependent\njob will be cancelled. Any newly-uncovered leaves now run. Some event triggers\nmay also be invoked on completion of a job, usually within the JavaScript layer.\nFor example, an object may specify an \"on-failure\" job to run if it fails to\nstart.\n\nThe result of a transaction is the result of its goal job.\n\n### Process Manager (PROCMAN)\n\nCarries out the low-level tasks of OS process management. Processes are observed\nand on GNU/Linux and BSD platforms, this extends to tracking processes as they\ncreate subprocesses and exit (Kernel Queues or CGroups can do this.)\n\nProcess launch may be hooked by Process Launch Extensions to alter the execution\nenvironment prior to launching an actual subprocess.\n\n### Service Virtual Machines Monitor (SVMMON)\n\nGoverns JavaScript virtual machines provided by the QuickJS library. Extensive\nintegration with the other core services is provided for. A small library of\nfunctionality to integrate with the operating system directly is provided; the\ninterfaces are mostly similar to those of Node.JS. A WebWorkers-like API\nprovides for out-of-process modules to run.\n\n### Reference Monitor (REFMON)\n\nThis verifies that requests originating outwith the InitKit scheduler service\nhold a right to query a particular object. All connections to the InitKit over\nthe management interface are associated with a set of rights, e.g. to start or\nstop a particular object, to query any object's status, or to shut down the\nservice manager. Any request made over the management interface must be\nauthorised by the Reference Monitor before the action can be carried out.\n\n### Schedulable Object Graph (OBJGRAPH)\n\nAll objects in the system are maintained in an object graph. This graph\nmaintains a description of each object sufficient for the other core services to\noperate with; this includes the state of the object, its interrelations (edges)\nwith other objects, and where the various data describing the object was sourced\nfrom.\n\n## JavaScript Services\n\nVarious higher-level services are written in JavaScript and run in the virtual\nmachines.\n\n### InitKit Subsystem for Systemd Services (ISSS)\n\nThese components implement support for \n\n#### Systemd Manifest Loader\n\nThis component loads legacy systemd unit-files.\n\n#### Delegated Restarter for Services\n\nImplements the supervision semantics of systemd `.service` units.\n\nLicencing\n---------\n\nThis software is made available under the terms of the 4-Clause BSD Licence. See\n[LICENCE.md](LICENCE.md). If you do not wish to use the software under those\nterms, you may use it under the terms of the Affero GPL version 3.0 instead.","funding_links":["https://github.com/sponsors/netbsduser"],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Finitkit%2Finitkit","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Finitkit%2Finitkit","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Finitkit%2Finitkit/lists"}