You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

132 lines
4.0 KiB

_____ _ _ __
/ ___/(_)___ _(_) /
\__ \/ / _ \/ / /
___/ / / (_) / / /
/____/_/\__, /_/_/
[Sigil]( is an experimental operating system
distribution built on the [Genode OS framework](, the
[Nix package manager](, and the NixOS modular configuration
Sigil was initially financed by [NLnet]( and the
[Privacy and Trust Enhancing technologies (PET) fund](
under the name "Genodepkgs". The project halted in early 2021 due to
overwhelming technical challenges but is still intermittenly updated.
While it is unlikely that Sigil will ever manifest a viable OS, it does serve
as a testing ground for post-UNIX packaging and system distribution concepts.
It also serves as an extreme test case for Nixpkgs cross-compilation and
## Articles
[Genodepkgs post-mortem report](
## Repository layout
- Native packages are at [packages](./packages/default.nix)
- Existing Nixpkgs packages are patched at [overlay](./overlay/default.nix)
- Tests are at [tests](./tests/default.nix)
- NixOS modules at [nixos-modules](./nixos-modules)
## Packaging
Packaging is done using standard Nixpkgs methods, a `stdenv` is available for
cross-compilation. See [Solo5](./packages/solo5/default.nix) as an example.
### Cross-compiling Nixpkgs
Some existing packages from Nixpkgs can be built with little or no modification.
Nixpkgs is available at the path `.#legacyPackages.x86_64-linux-x86_64-genode`
(or `…-aarch64-genode`) and modifications to packages are made at an
[overlay](./overlay/default.nix). Some packages need patched, others require
additional features added to the Genode libc.
Packages that run on Linux as well as Genode should not be packaged here, those
should be added to Nixpkgs.
## Toolchain
The Genode Labs toolchain is available here only for Linux and in binary form.
However, an experimental LLVM cross-compiler is provided here. Bootstrapping GCC
has not been practical due to its recursive autotools build system.
The enter a shell with the toolchain:
nix shell
x86_64-unknown-genode-clang++ -v
## Tips and tricks
### How to add missing Genode ports to a Genode depot package?
The missing ports as indicated by a depot build failure must be added to
[targets.nix](./packages/genodelabs/depot-targets.nix). For example:
wifi_drv = {
depotInputs = with self; [ libcrypto ];
portInputs = with ports; [ dde_linux ];
### How to add undefined ports?
Should a required port not be defined, it must be added to
[ports.nix](./packages/genodelabs/ports.nix). Initially it should be sufficient to
define the port as an empty attribute set, run the build again, and then add the
hash found in the successive build error.
To continue from the previous example:
dde_linux = { };
And after the reattempting the build a fixed-output hash should be produced,
this must now be added to the port definitions.
dde_linux = {
hash = "sha256-3G5Mprv9ZBNhDJRuVF6Nrkp3KbFaN10IKFq0OdyAY9M="; };
Should the port preparation fail do to missing utilities, these must be added to
the port definition using a `nativeBuildInputs` attribute.
Note that the hash checked into `ports.nix` is an *output hash*. The port hash
within the Genode source tree is an *explicit input hash*.
## Legal
This repository is published under MIT licensing consistent with Nixpkgs.
> Note: MIT license does not apply to the packages built by Nixpkgs,
> merely to the files in this repository (the Nix expressions, build
> scripts, NixOS modules, etc.). It also might not apply to patches
> included in Nixpkgs, which may be derivative works of the packages to
> which they apply. The aforementioned artifacts are all covered by the
> licenses of the respective packages.