All Projects → InitKit → InitKit

InitKit / InitKit

Licence: other
Neo-InitWare is a modular, cross-platform reimplementation of the systemd init system. It is experimental.

Programming Languages

C++
36643 projects - #6 most used programming language
javascript
184084 projects - #8 most used programming language
typescript
32286 projects

Projects that are alternatives of or similar to InitKit

Ecominit
eComInit is a free init system and service manager designed to scale from lightweight desktops to web-scale cloud deployments. It aims to offer feature-parity with systemd but with a modular, portable architecture compliant with software engineering best-practice.
Stars: ✭ 352 (-3.3%)
Mutual labels:  freebsd, unix, ecommerce, modular, system, openbsd, service, manager, systemd, posix, bsd, netbsd, init
InitWare
The InitWare Suite of Middleware allows you to manage services and system resources as logical entities called units. Its main component is a service management ("init") system.
Stars: ✭ 164 (-54.95%)
Mutual labels:  freebsd, unix, system, openbsd, service, manager, systemd, bsd, init, init-system
Awesome Unix
All the UNIX and UNIX-Like: Linux, BSD, macOS, Illumos, 9front, and more.
Stars: ✭ 973 (+167.31%)
Mutual labels:  freebsd, unix, openbsd, posix, bsd, netbsd
Mg
Micro (GNU) Emacs-like text editor ❤️ public-domain
Stars: ✭ 117 (-67.86%)
Mutual labels:  freebsd, unix, openbsd, bsd, netbsd
osutil
Go library to easily detect current operating system, current Linux distribution, macOS version and more...
Stars: ✭ 22 (-93.96%)
Mutual labels:  freebsd, system, openbsd, bsd, netbsd
Awesome Bsd
A collection of awesome BSD related stuff
Stars: ✭ 236 (-35.16%)
Mutual labels:  freebsd, openbsd, bsd, netbsd
Daemonize
daemonize is a library for writing system daemons in Python.
Stars: ✭ 396 (+8.79%)
Mutual labels:  freebsd, system, openbsd, netbsd
WendzelNNTPd
A usable and IPv6-ready Usenet-server (NNTP daemon). It is portable (Linux/*BSD/*nix), supports AUTHINFO authentication, contains ACL as well as role based ACL and provides "invisible" newsgroups. It can run on MySQL and SQLite backends.
Stars: ✭ 43 (-88.19%)
Mutual labels:  freebsd, unix, openbsd, netbsd
Objfw
[Official Mirror] A portable framework for the Objective-C language.
Stars: ✭ 161 (-55.77%)
Mutual labels:  freebsd, openbsd, netbsd
Persepolis
Persepolis Download Manager is a GUI for aria2.
Stars: ✭ 5,218 (+1333.52%)
Mutual labels:  freebsd, openbsd, bsd
Htop
htop is an interactive text-mode process viewer for Unix systems. It aims to be a better 'top'.
Stars: ✭ 5,626 (+1445.6%)
Mutual labels:  freebsd, system, openbsd
bf256
Brainfuck compiler under 256 bytes in size.
Stars: ✭ 21 (-94.23%)
Mutual labels:  unix, openbsd, bsd
uapi
Unix API
Stars: ✭ 18 (-95.05%)
Mutual labels:  freebsd, unix, openbsd
Pyroute2
Python Netlink and PF_ROUTE library — network setup and monitoring
Stars: ✭ 658 (+80.77%)
Mutual labels:  freebsd, openbsd, bsd
go-sysconf
sysconf for Go, without using cgo
Stars: ✭ 119 (-67.31%)
Mutual labels:  unix, posix, bsd
Cosmopolitan
build-once run-anywhere c library
Stars: ✭ 6,324 (+1637.36%)
Mutual labels:  freebsd, openbsd, netbsd
Ruby Vmstat
A focused and fast library to gather memory, cpu, network, load avg and disk information
Stars: ✭ 68 (-81.32%)
Mutual labels:  freebsd, openbsd, netbsd
Qtfm
Qt File Manager
Stars: ✭ 73 (-79.95%)
Mutual labels:  freebsd, openbsd, netbsd
packetdrill
packetdrill with UDPLite and SCTP support and bug fixes for FreeBSD
Stars: ✭ 37 (-89.84%)
Mutual labels:  freebsd, openbsd, netbsd
findlargedir
find all "blackhole" directories with a huge amount of filesystem entries in a flat structure
Stars: ✭ 15 (-95.88%)
Mutual labels:  freebsd, unix, system

InitKit

InitKit is the standard Unix init system. It is designed for flexibility in accordance with a special operationalisation of the principles of the Unix Way. A novel implementation of the systemd init system in JavaScript is hosted atop a lightweight native framework. Relatively high fidelity is maintained to the semantics of the systemd transaction generator and job engine.

InitKit is not intended at present to be be used in production. The code is being written in exploratory fashion for now, and refactoring of some components will be necessary.

Architecture

The InitKit Scheduler Service, the program which implements the majority of the InitKit system, is implemented in a modular, layered fashion. We will start with the lowest levels of that service and proceed upwards.

Portability Layer

This layer sits directly atop the provisions of the host operating system. The most basic operations on which the event loop depends may be indirected through this layer.

Event Loop (EVLOOP)

InitKit is designed with asynchronicity in mind. A Kernel Queues (or Libkqueue on non-BSD systems) event loop is the centrepiece of this.

Core Services

This layer is comprised of several modules which integrate with one-another.

Job Scheduler (JOBSCHED)

Job scheduling is more thoroughly described in the niw_scheduling(7) manual page.

Responsible for scheduling jobs to run at the correct time. Jobs are state-querying or state-change requests on objects, e.g. "Start OpenSSH".

The Transaction Generator is a major submodule of the Job Scheduler. It prepares Transactions which contain a set of jobs to be run in pursuit of a particular goal job, e.g. "Start OpenSSH" or "Stop NetworkManager". Transactions are generated with respect to the relationships between objects specified in the Object Graph.

The result of transaction generation is a set of jobs to be run. With respect to the before and after ordering directives, a directed acyclic graph is formed out of all the objects on which a job is present therefor in the transaction. Transactions containing conflicting jobs, or out of which a DAG cannot be formed, are rejected; these arise only from improper cyclic ordering specifications or conflicting requirements between objets.

Jobs are run starting with the leaves of the graph. As jobs complete (either successfully or not), they are removed from the graph and action taken. If another job depends on the completed job having succeeded, then that dependent job will be cancelled. Any newly-uncovered leaves now run. Some event triggers may also be invoked on completion of a job, usually within the JavaScript layer. For example, an object may specify an "on-failure" job to run if it fails to start.

The result of a transaction is the result of its goal job.

Process Manager (PROCMAN)

Carries out the low-level tasks of OS process management. Processes are observed and on GNU/Linux and BSD platforms, this extends to tracking processes as they create subprocesses and exit (Kernel Queues or CGroups can do this.)

Process launch may be hooked by Process Launch Extensions to alter the execution environment prior to launching an actual subprocess.

Service Virtual Machines Monitor (SVMMON)

Governs JavaScript virtual machines provided by the QuickJS library. Extensive integration with the other core services is provided for. A small library of functionality to integrate with the operating system directly is provided; the interfaces are mostly similar to those of Node.JS. A WebWorkers-like API provides for out-of-process modules to run.

Reference Monitor (REFMON)

This verifies that requests originating outwith the InitKit scheduler service hold a right to query a particular object. All connections to the InitKit over the management interface are associated with a set of rights, e.g. to start or stop a particular object, to query any object's status, or to shut down the service manager. Any request made over the management interface must be authorised by the Reference Monitor before the action can be carried out.

Schedulable Object Graph (OBJGRAPH)

All objects in the system are maintained in an object graph. This graph maintains a description of each object sufficient for the other core services to operate with; this includes the state of the object, its interrelations (edges) with other objects, and where the various data describing the object was sourced from.

JavaScript Services

Various higher-level services are written in JavaScript and run in the virtual machines.

InitKit Subsystem for Systemd Services (ISSS)

These components implement support for

Systemd Manifest Loader

This component loads legacy systemd unit-files.

Delegated Restarter for Services

Implements the supervision semantics of systemd .service units.

Licencing

This software is made available under the terms of the 4-Clause BSD Licence. See LICENCE.md. If you do not wish to use the software under those terms, you may use it under the terms of the Affero GPL version 3.0 instead.

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].