[Nix-dev] Design Patterns for Achieving what Nix is Advertized for

Jonn Mostovoy jm at memorici.de
Fri Nov 27 15:29:37 CET 2015


> which is too complex to describe in this small contemplation.
“I have discovered a truly remarkable proof which this margin is too
small to contain.”

Regarding first workaround:
You are right, package names won't collide, however package purposes
will and files created on the file system will.

Regarding second workaround:
Indeed, this way, computer doesn't need to solve dependency
constraints. A human has to. For every single package.
Please let me remind you that we need package managers for humans to
work less, not more. Maintainers are humans too.
—
Kindest regards,
¬Σ


On Fri, Nov 27, 2015 at 3:09 AM, Martin Vahi <martin.vahi at softf1.com> wrote:
>
> In the light of the instability of the Nix
>
> https://github.com/NixOS/nix/issues/718
>
> I started to think, if it is possible to achieve
> the same goals without using the Nix. Could someone
> please comment, if there is something that
> the Nix offers and the solutions described
> here by me do not offer? Comments on flaws
> within the described desing patterns are also welcome.
>
> Nix sales argument:
>     Multiple versions of the package can
>     be used simultaniously and each of the
>     packages can use its own set of dependencies.
>
> Proposed workaround design pattern:
>     Each version of the package is published
>     to a traditional Debian/RedHat packaging
>     system under its own name, id est the
>     version of the package is part of the
>     package name. There exists a specially
>     named package that always references
>     to the newest version, something
>     along the lines like
>
>         gcc_newest
>
>    Different versions would be:
>
>         gcc_v_4_9_CPUFAMILY_x86_CPUSUBTYPE_i386_SOFTWARECONFIG_1
>         gcc_v_4_9_CPUFAMILY_x86_CPUSUBTYPE_i386_SOFTWARECONFIG_2
>         gcc_v_4_9_CPUFAMILY_x86_CPUSUBTYPE_i486
>         gcc_v_4_9_CPUFAMILY_x86_CPUSUBTYPE_i586
>         gcc_v_4_9_CPUFAMILY_x86_CPUSUBTYPE_i686
>         gcc_v_4_9_CPUFAMILY_arm
>         gcc_v_4_9_CPUFAMILY_AMD64_SOFTWARECONFIG_1
>         gcc_v_4_9_CPUFAMILY_AMD64_SOFTWARECONFIG_2
>         gcc_v_4_9_CPUFAMILY_MIPS
>
>         gcc_v_4_8_CPUFAMILY_arm_v6
>         gcc_v_4_8_CPUFAMILY_arm_v7
>         gcc_v_4_8_CPUFAMILY_x86_SOFTWARECONFIG_1
>         gcc_v_4_8_CPUFAMILY_x86_SOFTWARECONFIG_2
>         gcc_v_4_8_CPUFAMILY_x86_SOFTWARECONFIG_3
>
>    The package names would actually conform to a
>    small domain specific language(DSL) with its own
>    syntax and semantics, which is too complex
>    to describe in this small contemplation.
>    The DSL would require that packages with
>    different names do not collide by their
>    package name meaning. Id est only one of the
>    following 2 names would be allowed:
>
>        gcc_v_4_8_CPUFAMILY_x86_SOFTWARECONFIG_1
>        gcc_v_4_8_SOFTWARECONFIG_1_CPUFAMILY_x86
>
>    (The implementation might be simplified so that
>    the package names are generated by a
>    helper Ruby script, where people just "fill in forms".
>    The Ruby script acts as a primitive "formal verifier"
>    for the DSL.)
>
>
> A remark:
>     As of 2015_11_27 it seems to me
>     that that kind of design pattern
>     has been already widely implemented.
>     Not with so much detail, but that's a
>     matter of rigor at the part of the
>     package maintainers, not that the
>     Debian/RedHat packaging system would
>     limit the use of that design pattern.
>
>     If everything were packaged with such rigor,
>     then very specific dependencies could be
>     declared for every package. What regards
>     to the idea that it might be laborious to
>     create a separate package for every CPUFAMILY
>     CPUSUBTYPE, then like it or not, as it turns out
>
>     https://github.com/NixOS/nix/issues/84
>     https://github.com/NixOS/nixos/issues/66
>
>
>     in practice, that's a job that has to be
>     done anyway, specially at the testing side.
>     The naming scheme just shows the vastness of
>     the actual task.
>
>
>
> Nix sales argument:
>     It is possible to select, what packages
>     are available in the environment(PATH, libs), the
>     environment is versioned(allowing rollbacks, branches, etc.)
>     and the environments are reproducible on
>     different computers by having the clone computer
>     go from state 0 (the "hello" has been installed)
>     to the destination environment state by
>     going through all those state tree vertices
>     that are on the path from the root (the "hello")
>     to the leaf or some vertex in between.
>
>
> Proposed workaround design pattern:
>     Package all software so that the
>
>         <package folklore name like the gcc>_newest
>
>     is never referenced at any build script.
>     In that situation the walking of the state tree
>     looses its point, because the task of achieving
>     a state reduces to satisfying the dependencies
>     of the state. Dependency graph regions that do not depend
>     on each other and have their common dependencies
>     met, can be built/compiled in parallel,
>     at different operating system processes, may be
>     even on different computers.
>
>
> So, thank You for reading this long letter and
> the question is, what am I missing, where am I mistaken?
>
>
> Curiously and from a position of a heretic,
> Martin.Vahi at softf1.com
>
>
>
>
> _______________________________________________
> nix-dev mailing list
> nix-dev at lists.science.uu.nl
> http://lists.science.uu.nl/mailman/listinfo/nix-dev
>


More information about the nix-dev mailing list