tt offers a valid alternative to systemd for PID 1 and service management. It uses the supervision to manage long running programs (deamons), log everything to files (no binary log interface) and provides an easy to use command line interface.
The services must be compiled before being able to run; this is the biggest difference with the most used service managers (systemd, OpenRC, runit), which instead are based on runtime services.
- Support for different types of services: oneshot, deamons and bundles
- Predictable dependencies at build time
- Configurable parameters for services (i.e. change command line arguments without editing the service file)
- Asynchronous start of the services (no run levels)
- Log everything into files, no syslog needed
- Low footprint
- Target desktop and servers
- Conditional dependencies for complex services (such as web apps)
- Provides sane defaults
tt supports the following compilers:
- gcc >= 10.0
- clang >= 9.0
tt depends on the following libraries:
* if these libraries are not found in the system, meson will download and use a local copy.
To build tt run the following commands:
$ meson build $ ninja -C build
To run the tt test suite, execute the following commands:
$ meson -Dtests=enabled build $ ninja -C build test
Feel free to contribute by opening a Pull Request! Have a look at Github Issues for the current development tasks.
Formatting your changes
tt follows the Google C++ Style
Guide and uses
clang-format to apply this style. If you have
clang-format installed, run
the following command to format your changes:
tt is tested under 3 different CI platforms:
- Github Actions, testing a meson unity
build using a compiler matrix of
different clang and gcc versions.
undefinedsanitizers are enabled.
- Travis CI, sending coverage to Coveralls and analyzing the build with SonarCloud.
- build.sr.ht, testing tt on various systems and architectures.
All Pull Requests must pass the CI and the static analyzers' checks before being accepted.
$ ninja -C build clang-format
- #tt IRC channel on freenode.
tt development updates are posted on @danyspin97 blog.
Thanks to @pac85 for its contributions and to all the people that shared ideas for tt.
Credits also to:
- @skarnet for his work on s6 and his awesome explanations about UNIX inner workings and design
- @obarun for his work on 66 and most of the ideas that made the foundation of tt
Third-party libraries included
- args, command-line argument parser
- Base64, base64 encoding/decoding C++ library
- bitsery, binary serialization library
- expected, c++17 implementation of std::expected
- nngpp, wrapper around nanomsg-next-gen library
- tiny-process-library, to start and stop processess and read from stdin and stdout
- xdgpp, implementation of the XDG Base Directory Specification