|
| 1 | +# Comparing Standard to X |
| 2 | + |
| 3 | +_Where appropriate, we compare with `divnix/paisano`, instead_. |
| 4 | + |
| 5 | +## Comparison with tools in the Nix ecosystem |
| 6 | + |
| 7 | +### flake-utils |
| 8 | + |
| 9 | +`numtide/flake-utils` is a small & lightweight utility with a focus on generating flake file _outputs_ in accordance with the packaging use case built-in into the Nix CLI tooling. |
| 10 | + |
| 11 | +Paisano, in turn, is an importer with a focus on _code organization_; it still plugs well into a `flake.nix` file, but also preserves its index function by keeping it clean. |
| 12 | +While you _can_ use it to match the schema that Nix CLI expects, it also enables more flexibility as it is not specially optimized for the Nix _package manager use case_. |
| 13 | + |
| 14 | +### flake-parts |
| 15 | + |
| 16 | +`hercules-ci/flake-parts` is a component aggregator with a focus on a flake schema that is built-in into the Nix CLI tooling that makes use of the NixOS module system for composability and aggregation. |
| 17 | + |
| 18 | +Paisano, in turn, is an importer with a focus on _code organization_; it still plugs well into a `flake.nix` file, but also preserves its index function by keeping it clean. |
| 19 | +While you _can_ use it to match the schema that Nix CLI expects, it also enables more flexibility as it is not specially optimized for the Nix _package manager use case_. |
| 20 | + |
| 21 | +To a lesser extent, Paisano is also a component aggregator for your flake outputs. |
| 22 | +However, in that role, it gives you back the freedom to use the output schema that best fits your problem domain. |
| 23 | + |
| 24 | +Convergence towards the Flakes output schema is provided via the harvester family of functions (`winnow`, `harvest` & `pick`). |
| 25 | +Depending on the domain schema, it can be a _lossy_ convergence due the lesser expressivity of the flake output schema. |
| 26 | + |
| 27 | +Flake Parts aggregates bespoke use-case specific interfaces implemented in the module system DSL. |
| 28 | +Paisano, in turn, focuses on code organization along high level code boundaries connected by generic interfaces. |
| 29 | + |
| 30 | +The core tenet of Flake Parts is bespoke module system DSL interfaces for each use case. |
| 31 | + |
| 32 | +The core tenet of Paisano remains Nix' original functional style. |
| 33 | + |
| 34 | +### Devshell |
| 35 | + |
| 36 | +Standard wraps `numtide/devshell` to improve the developer experience in the early parts of the SDLC via reproducible development shells. |
| 37 | + |
| 38 | +## Comparison with other tools & frameworks |
| 39 | + |
| 40 | +### My language build tool |
| 41 | + |
| 42 | +Nix wraps language level tooling into a sandbox and cross-language build graph to ensure reproducibility. |
| 43 | +Most languages are already covered. |
| 44 | + |
| 45 | +### Bazel |
| 46 | + |
| 47 | +Bazel is similar to Nix in that it creates cross-language build graphs. |
| 48 | +However, it doesn't not guarantee reproducibility. |
| 49 | +Currently it has more advanced build caching strategies: a gap that the Nix community is very eager to close soon. |
| 50 | + |
| 51 | +### My CI/CD |
| 52 | + |
| 53 | +Any CI can leverage Paisano's Registry to discover work. |
| 54 | +Implementations can either be native to the CI or provided via CI-specific wrappers, a strategy chosen for example by our reference implementation for GitHub Actions. |
0 commit comments