<div dir="ltr">I now see what you mean and you are totally right.<div><br></div><div>I guess what people are craving for, is a seamless solution to fix the problem quick, and have it be public right away to yourself and others who need it. Maybe this is material for a later discussion, but as just a thought, maybe the eager ones could manage an eager hackage to host their changes (a private hackage has been mentioned before). More work upfront, but might be worth it in the end.</div>
<div><br></div><div><br></div></div><div class="gmail_extra"><br><br><div class="gmail_quote">On Fri, May 16, 2014 at 11:27 AM, Nicolas Trangez <span dir="ltr"><<a href="mailto:nicolas@incubaid.com" target="_blank">nicolas@incubaid.com</a>></span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">On Fri, 2014-05-16 at 11:04 +0200, Markus Läll wrote:<br>
> I would argue *for* forking. Hackage is big and consists of many packages<br>
> which have only a few users, or maybe just one -- the author. I don't see<br>
> all these packages if I don't go on the page and look. But when I do, I<br>
> will be looking for *them*. If some popular package stops working then I<br>
> would be happy to find a fork, because now I can just tell cabal about it.<br>
> And if the original gets fixed, I can go back. I don't think people who<br>
> fork are looking for aquiring yet another package to maintain forever, or<br>
> to take it over.<br>
<br>
tl;dr: Eagerly forking is all nice and shiny for 'leaf' packages which<br>
don't expose common functionality, but causes troubles for packages<br>
which are common library dependencies.<br>
<br>
Doesn't this cause issues with library interoperability?<br>
<br>
Say there's a package which implements some standard datatype, e.g.<br>
'vector' by author V. Then there are 2 other packages,<br>
'vector-algorithms' by author A and 'complex-vector-algorithms' by<br>
author C.<br>
<br>
'vector' exports a datatype 'Vector'.<br>
'vector-algorithms' exports a function 'a :: Int -> Vector'.<br>
'complex-vector-algorithms' exports a function 'c :: Vector -> Float'.<br>
<br>
Finally, there's the application author who wrote the function<br>
'ingeniousCalculation :: Int -> Float; ingeniousCalculation = c . a'<br>
<br>
Now, the author of C finds an obscure bug in some function in 'vector'<br>
he uses (caused by a bug in some internal 'vector' function which<br>
requires access to non-exported internals of the Vector type), and sends<br>
a patch to V. This bug doesn't impact 'vector-algorithms' in any way.<br>
<br>
V doesn't reply within 48 hours, so C impatiently uploads 'vector-c' to<br>
Hackage, containing the fix, and updates the 'complex-vector'algorithms'<br>
dependencies from 'vector' to 'vector-c' (with whatever version<br>
constraint).<br>
<br>
At this point, the code by the application author breaks since<br>
'vector-algorithms' uses 'Vector' from the 'vector' package, and<br>
'complex-vector-algorithms' uses 'Vector' from 'vector-c', which are<br>
different types from a compiler perspective.<br>
<br>
I see 3 solutions:<br>
- 'vector-algorithms' needs to be updated by A to use 'vector-c',<br>
something to which A might be reluctant since it could break lots of<br>
code using 'vector-algorithms' in combination with other libraries and<br>
applications using 'vector'.<br>
- The application author needs to patch 'vector-algorithms' locally to<br>
use 'vector-c'.<br>
- The application author patches 'vector' locally to fix the bug<br>
(something V wil most likely do in a couple of days) and reverts the<br>
dependency of 'complex-vector-algorithms' from 'vector-c' back to<br>
'vector'.<br>
<br>
None of these seem very satisfactory.<br>
<br>
So, whilst forking (in this case) provides a very 'local' solution for<br>
the 'complex-vector-algorithms' package and C, it doesn't fix anything<br>
(I'd even argue it complicates matters) in the grand scheme of things.<br>
<br>
My .02,<br>
<br>
Nicolas<br>
<br>
><br>
><br>
><br>
> On Thu, May 15, 2014 at 11:18 AM, Sven Panne <<a href="mailto:svenpanne@gmail.com">svenpanne@gmail.com</a>> wrote:<br>
><br>
> > 2014-05-15 9:30 GMT+02:00 Roman Cheplyaka <<a href="mailto:roma@ro-che.info">roma@ro-che.info</a>>:<br>
> > > If there's no response, then you have two choices:<br>
> ><br>
> > Actually three: Fix things locally until the "official" package is fixed.<br>
> ><br>
> > > * request package maintainership, which will take several weeks<br>
> ><br>
> > I really hope that this will take months, not weeks, see the other<br>
> > discussion<br>
> ><br>
> > > * fork the package (i.e. upload your patched version to hackage under a<br>
> > >   different name)<br>
> ><br>
> > This proposal worries me quite a bit, because if everybody follows<br>
> > that advice, it will turn Hackage into a chaotic collection of<br>
> > packages with various degrees of being fixed/maintained/etc. Imagine a<br>
> > package 'foo', which needs a fix, and several pepole think it's a good<br>
> > idea to fork and fix the issue at hand. Now we have 'foo', 'foo-XY',<br>
> > 'foo-my-cool-acronym', ... Of course people normally have no incentive<br>
> > to really take over maintainership for 'foo', they just want a working<br>
> > 'foo' right now for their own project. Later the real maintainer<br>
> > re-appears after vacation/sabbatical/whatever, fixes 'foo', and<br>
> > continues to work on it, adding new features. Now somebody new comes<br>
> > to Hackage to see if there is already a package for some use case, and<br>
> > finds 'foo', 'foo-XY', 'foo-my-cool-acronym', ... Then it takes some<br>
> > non-trivial detective work to find out which packages are actually<br>
> > dead (again) and which is the real one. => Chaos IMHO.<br>
> ><br>
> > In a nutshell: If you are really in a hurry, fix things locally.<br>
> > Hackage is not the place to fork like hell.<br>
> > _______________________________________________<br>
> > Haskell-Cafe mailing list<br>
> > <a href="mailto:Haskell-Cafe@haskell.org">Haskell-Cafe@haskell.org</a><br>
> > <a href="http://www.haskell.org/mailman/listinfo/haskell-cafe" target="_blank">http://www.haskell.org/mailman/listinfo/haskell-cafe</a><br>
> ><br>
><br>
><br>
><br>
> _______________________________________________<br>
> Haskell-Cafe mailing list<br>
> <a href="mailto:Haskell-Cafe@haskell.org">Haskell-Cafe@haskell.org</a><br>
> <a href="http://www.haskell.org/mailman/listinfo/haskell-cafe" target="_blank">http://www.haskell.org/mailman/listinfo/haskell-cafe</a><br>
<br>
<br>
</blockquote></div><br><br clear="all"><div><br></div>-- <br>Markus Läll<br>
</div>