[Nix-dev] Package maintainer coordination problem and Nix

Mads Lindstrøm mads_lindstroem at yahoo.dk
Sun Jul 19 18:37:14 CEST 2009


Hi

On Sun, 2009-07-19 at 16:34 +0200, Marc Weber wrote:
> Hi Mad,

Mads, with an S, please :)

> 
> I'm glad you finally had the time to look into nix(os)!
> 
> You're welcome!

Thank you very much.

> 
> The nix language is able to express what you're looking for.
> Nobody has done so by now.
> Evaluation time will increase though.

Yes, and it be by so much that it makes my hole scheme non-practical. 

> 
> Andres (kosmikus on irc) made a student (J-roen) work on haskell packages..
> And I think he has something like this in mind as well.
> For haskell packgaes it actually makes sense because configuring with
> flags is scomplex but still doable in nix language.
> 
> What you tell is true. And it actually happened the last time
> stdenv-updates was merged in. sudo update broke a script launching qemu.
> It took me one week to track it down. But I had the choice and could
> choose when to upgrade!
> 
> Maybe think about it differently: One of the main strength of nix(os) is
> that if an upgrade fails you can switch back easily. So you may upgrade
> safely knowing that you don't have to work at night cause if it fails
> you can switch back. This kind of safety is one reason for me using
> nix(os). Another issue I was faced with was the update of gcc. gcc and
> those -O2 optimization settings made php behave strange catching
> exceptions. Using -O0 fixed it.

And this part of Nix rocks.

> 
> So we are at the point: How does this description of dependencies look
> like?
> 
>  gcc = version X  then use -O2
>  gcc = version Y then don't use -O2,-O1,-O3 ..
> 
> ....
> And you already see that it's a very much work to figure this out and
> test it. I don't even think we have the resources to do so.

I imagined that this should be automated somehow. See reply to Peter.
And people should be able to donated unused computer cycles.

> 
> But: If a package breaks for one of teh reasons you mentioned nix(os) is
> the only distribution I know letting you do a git bisect to find the
> "change" causing the failure easily. Of course this takes time. But
> using debian or gentoo I don't even know where to start because
> everything you have is emerge sync (which rsyncs all the package
> descriptions).. Of course you can put this into git yourself but you
> can't rollback easily if you broke the system.
> 
> Let's have a short look at systems which do what mentioned:
> python: setup-tools (easy-install), eggs:
>   quote: It's considered a bug if you require administrative priviledges
> php: pear
> ruby: rubyforge, ruby-gems
> Eclipse and its plugin system (which provides its own rollback facility)
> haskell + hackage..

Every programming community, creating their own solution. I much better
like Nix - that is, create a solution that works for 95% of the
developer population. And regular users too.

> 
> And indeed they cause some headache to me because I'm not sure whether
> I should package those stuff or just use it using easy-install and pear
> update etc..
> 
> I worked on ruby recently. I solved it by adding a gem nix command which
> creates a set of nix expression from those dynamic dependencies.
> The result is that you can just do nix-env -iA sup and it works.
> You can't do so on debian, can you?

No way, I can do that with Debian. Get me right here, from what I have
read, Nix is a huge step forward compared to Debian. And I do love
Debian.

> 
> So you could say nix is good at taking snapshots of software configurations
> which play together nicely.
> 
> Dependency and upgrade hell can't be solved in general but:
> using nix I know that when doing nix-collect-garbage everything is gone
> I no longer need.
> 
> Eg the plone buildout system doesn't remove old cruft AFAIK.
> 
> And yes: You have found one bad point about nix: If you upgrade X an old
> tool does no longer work. Actually this is an issue if you use special
> kernels. Eg ghc can't be compiled easily because binaries don't work as
> expected etc.
> 
> Nix even adds a new source of problem: You can't force users to upgrade
> their packages (thus fixing security issues).

I do not get this problem. Can you force Debian users to upgrade? It
seems to be the exact same issue with any other distribution.

And I do not see as I problem either. My distribution telling me that it
is very good idea to upgrade some package - fine. My distribution
telling me that I am stupid if I do not upgrade - maybe OK. Forcing me
to upgrade - hell no.

> 
> Anyway: the benefits are more important to me.. Even if you don't
> upgrade for two years you can still do so by using nix-install-package
> which installs the new required tools from urls. I don't think you can
> do this using debian or gentoo.

Yes, Nix rocks in this respect. I just thought it alleviated a problem
it did not alleviated.

> 
> Let me show you another nice point about nix: It's easy to install
> source (and generate tags automatically) along with libraries.
> Do you know any other system allowing you doing so ? [1]
> 
> Anyway you've heard that nix can let you experiment with these ideas while
> keeping the system running. That's most important to me.
> 
> Marc Weber


Regards,

Mads Lindstrøm


> 
> [1]
> 
> for haskell it looks like this (this install most packages which are availible at the moment)
> The last map adds the source derivation which also contains the tag files..
> 
> put this into your config.nix:
> 
>     haskellCollection = 
>      let hp = haskellPackages;
>          install = 
>         [ 
>           hp.alex hp.cabalInstall /*hp.ehc*/ hp.frown /* hp.haddock09
>           hp.haddock210 hp.haddock */ /*hp.happy117 hp.happy*/ hp.Agda /* hp.benchpress */ hp.binary
>           hp.cgi hp.convertible hp.cpphs hp.Crypto hp.dataenc hp.digest hp.dotgen
>           hp.editline hp.emgm hp.extensibleExceptions hp.fgl hp.ghcPaths hp.GLUT
>           hp.gtk2hs hp.haskeline hp.haskellPlatform hp.haskellSrcExts hp.haskellSrc
>           hp.haskellSrcMeta hp.HaXml /*hp.haxr hp.haxr_th */ hp.HDBC /* hp.HDBCPostgresql */
>           hp.HDBCSqlite hp.Hipmunk hp.hscolour hp.html hp.HTTP hp.HUnit hp.ivor hp.json
>           hp.leksah /*hp.maybench*/ hp.monadlab hp.MonadRandom hp.mtl hp.multirec hp.network
>           /*hp.nonNegative*/ hp.numericPrelude hp.OpenAL hp.OpenGL hp.pandoc hp.parallel
>           hp.parsec hp.pcreLight hp.QuickCheck hp.QuickCheck2 hp.readline hp.regexBase
>           hp.regexCompat hp.regexPosix hp.SDL hp.SDLImage hp.SDLMixer hp.SDLTtf
>           hp.Shellac hp.ShellacHaskeline hp.ShellacReadline hp.stm hp.storableComplex
>           hp.strictConcurrency hp.terminfo hp.testpack hp.time hp.time113 hp.uniplate
>           hp.utf8String hp.utilityHt hp.uuParsingLib hp.uulib hp.vacuumCairo hp.vacuum
>           hp.vty /*hp.wx hp.wxcore*/ hp.X11 hp.xhtml hp.zipArchive hp.zipper hp.zlib
>           /* hp.helium */ /*hp.hlint*/ hp.idris hp.lhs2tex hp.MazesOfMonad hp.uuagc hp.xmobar
>           hp.xmonad hp.xmonadContrib
> 
>           hp.hslogger hp.tar hp.bytestring hp.networkBytestring hp.syb
>           hp.ghcSyb hp.getOptions hp.multiset hp.filepath
>           hp.hsloggerTemplate
>         ];
>       in
>       misc.collection {
>         name = "haskell";
>         list = [ hp.ghc ] ++ install ++ (map (x : sourceWithTagsDerivation (sourceWithTagsFromDerivation (addHasktagsTaggingInfo x) ))
>                             (lib.filter (x : builtins.hasAttr "src" x) install
>                             ++ [ (hp.ghcReal // { srcDir = "libraries"; }) ] ) );
>       };
> _______________________________________________
> nix-dev mailing list
> nix-dev at cs.uu.nl
> https://mail.cs.uu.nl/mailman/listinfo/nix-dev
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 197 bytes
Desc: This is a digitally signed message part
Url : http://lists.science.uu.nl/pipermail/nix-dev/attachments/20090719/1701acf6/attachment.bin 


More information about the nix-dev mailing list