<div dir="ltr"><span style="font-size:12.8px">> I notice here (and in a few other places) you talk about</span><br style="font-size:12.8px"><span style="font-size:12.8px">"Applications". From what I understand of Nick's position,</span><br style="font-size:12.8px"><span style="font-size:12.8px">applications absolutely should pin their dependencies - so if I'm</span><br style="font-size:12.8px"><span style="font-size:12.8px">understanding correctly, those applications will (and should) continue</span><br style="font-size:12.8px"><span style="font-size:12.8px">to pin exact versions.</span><br><div><span style="font-size:12.8px"><br></span></div><div><span style="font-size:12.8px">Application developers typically don't test against all combinations of dependency versions and it also doesn't really make sense for them. Therefore it is understandable from their point of view to pin their dependencies. However, should they pin to a certain major/minor version, or to a patch version? In my opinion they best pin to minor versions. That should be sufficient to guarantee the app works. Let the distributions take care of providing the latest patch version so that it remains safe. And that means indeed specifying </span><span style="font-size:12.8px">>1.6,<1.8 (or actually >=1.7,<1.8), and not ==1.7 or ==1.7.3. The same goes for the meta-packages.</span></div></div><div class="gmail_extra"><br><div class="gmail_quote">On Wed, Feb 15, 2017 at 6:57 PM, Paul Moore <span dir="ltr"><<a href="mailto:p.f.moore@gmail.com" target="_blank">p.f.moore@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Thanks for your reply, it was very helpful.<br>
<span class=""><br>
On 15 February 2017 at 16:55, Freddy Rietdijk <<a href="mailto:freddyrietdijk@fridh.nl">freddyrietdijk@fridh.nl</a>> wrote:<br>
> Larger applications that have many dependencies that are fixed have been<br>
> kept out of Nixpkgs for now.<br>
<br>
</span>I notice here (and in a few other places) you talk about<br>
"Applications". From what I understand of Nick's position,<br>
applications absolutely should pin their dependencies - so if I'm<br>
understanding correctly, those applications will (and should) continue<br>
to pin exact versions.<br>
<br>
As regards automatic packaging of new upstream versions (of libraries<br>
rather than applications), I guess if you get upstream to remove the<br>
pinned versions, this problem goes away.<br>
<span class=""><br>
> The main problem I see is that it limits in how far you can automatically update to newer versions and thus release bug/security fixes. Just one inappropriate pin is sufficient to break dependency solving.<br>
<br>
</span>I'm not sure I follow this. Suppose we have foo 1.0 depending on bar.<br>
If foo 1.0 has doesn't pin bar (possibly because you reported to them<br>
that they shouldn't) then foo 1.1 isn't going to suddenly add the pin<br>
back. So you can update foo fine. And you can update bar because<br>
there's no pin. So yes, while "one inappropriate pin" can cause a<br>
problem, getting upstream to fix that is a one-off cost, not an<br>
ongoing issue.<br>
<br>
So, in summary,<br>
<br>
* I agree that libraries pinning dependencies too tightly is bad.<br>
* Distributions can easily enough report such pins upstream when the<br>
library is initially packaged, so there's no ongoing cost here (just<br>
possibly a delay before the library can be packaged).<br>
* Libraries can legitimately have appropriate pins (typically to<br>
ranges of versions). So distributions have to be able to deal with<br>
that.<br>
* Applications *should* pin precise versions. Distributions have to<br>
decide whether to respect those pins or remove them and then take on<br>
support of the combination that upstream doesn't support.<br>
* But application pins should be in a requirements.txt file, so<br>
ignoring version specs is pretty simple (just a script to run against<br>
the requirements file).<br>
* Because Python doesn't support multiple installed versions of<br>
packages, conflicting requirements *will* be a problem that distros<br>
have to solve themselves (the language response is "use a venv").<br>
<br>
Nick is suggesting that the requirement metadata be prohibited from<br>
using exact pins, but there's alternative metadata for "yes, I really<br>
mean an exact pin". To me:<br>
<br>
1. This doesn't have any bearing on *application* pins, as they aren't<br>
in metadata.<br>
2. Distributions still have to be able to deal with libraries having<br>
exact pins, as it's an explicitly supported possibility.<br>
3. You can still manage (effectively) exact pins without being<br>
explicit - foo >1.6,<1.8 pretty much does it. And that doesn't even<br>
have to be a deliberate attempt to break the system, it could be a<br>
genuine attempt to avoid known issues, that just got too aggressive.<br>
<br>
So we're left with additional complexity for library authors to<br>
understand, for what seems like no benefit in practice to distribution<br>
builders. The only stated benefit of the 2 types of metadata is to<br>
educate library authors of the benefits of not pinning versions - and<br>
it seems like a very sweeping measure, where bug reports from<br>
distributions seem like they would be a much more focused and just as<br>
effective approach.<br>
<span class="HOEnZb"><font color="#888888"><br>
Paul<br>
</font></span></blockquote></div><br></div>