<html><head></head><body bgcolor="#FFFFFF">+1 on immutability once a distribution is uploaded to PyPI. The benefits far outweigh the drawbacks. Catering&nbsp;<span class="Apple-style-span" style="-webkit-tap-highlight-color: rgba(26, 26, 26, 0.292969); -webkit-composition-fill-color: rgba(175, 192, 227, 0.230469); -webkit-composition-frame-color: rgba(77, 128, 180, 0.230469); ">for the "overwrite within a certain time window" scenario just serves to complicate what should be a very simple rule.&nbsp;</span><div><span class="Apple-style-span" style="-webkit-tap-highlight-color: rgba(26, 26, 26, 0.292969); -webkit-composition-fill-color: rgba(175, 192, 227, 0.230469); -webkit-composition-frame-color: rgba(77, 128, 180, 0.230469); "><br></span></div><div><span class="Apple-style-span" style="-webkit-tap-highlight-color: rgba(26, 26, 26, 0.292969); -webkit-composition-fill-color: rgba(175, 192, 227, 0.230469); -webkit-composition-frame-color: rgba(77, 128, 180, 0.230469); ">Even though PyPI acts as a passthrough gateway to other file sources e.g. github this shouldn't deter us from aspiring to provide users with greater confidence in the files that are hosted directly on PyPI by making this change.</span></div><div><br>On 30 Jan 2012, at 08:43, Donald Stufft &lt;<a href="mailto:donald.stufft@gmail.com">donald.stufft@gmail.com</a>&gt; wrote:<br><br></div><div></div><blockquote type="cite"><div>
                <div>
                    Forwarding as I mistakingly sent this directly to Matin, sorry!
                </div>
                <div></div>
                 
                <p style="color: #A0A0A8;">Forwarded message:</p>
                <blockquote type="cite" style="border-left-style:solid;border-width:1px;margin-left:0px;padding-left:10px;">
                    <div>
                         
                        <b>From:</b> Donald Stufft &lt;<a href="mailto:donald.stufft@gmail.com">donald.stufft@gmail.com</a>&gt;<br>
                         
                         
                         
                        <b>To:</b> "Martin v. Löwis" &lt;<a href="mailto:martin@v.loewis.de">martin@v.loewis.de</a>&gt;<br>
                         
                         
                        <b>Date:</b> Monday, January 30, 2012 3:36:09 AM<br>
                        <b>Subject:</b> Re: [Catalog-sig] Proposal: close the PyPI file-replacement loophole<br>
                    </div>
                     
                    <br>
                     
                    <div><div><div>
                <div>A Major goal in any deployment/installation system is reproducible builds. Allowing re uploads directly goes against this goal. I (and a lot of Python developers I would imagine) purposely pin to specific versions because we *know* those versions work. Currently if I rely on PyPI or any of it's mirrors I just have to cross my fingers and hope that the file i'm getting is the file that I tested against.&nbsp;</div><div><br></div><div>A responsible author wouldn't change his files after people are using it. Unfortunately not all authors are responsible which is why restrictions should be put in place.&nbsp;</div><div><br></div><div>I think there are very clear bad things that could happen due to mutable packages, I can't think of a single bad thing that could happen due to immutable packages other than "if the author messed something up he might have to increase his version number". Increasing a version number is a very minor problem compared to breaking software.</div><div><br></div><div>So my questions to you are:</div><div><br></div><div>1. What is the worst case if packages are made immutable?</div><div>2. What is the worst case if they are kept mutable?&nbsp;</div><div>3. Best case for immutable?</div><div>4. Best case for mutable?</div><div><br></div><div>That I can think of it's: 1) Author Might have to "waste" a version number uploading a fix 2) Author might break (or introduce major security vulnerabilities), inadvertently or otherwise exiting software 3) People depending on packages can use PyPI and be secure in the fact that what they got today will be the same as what they get tomorrow<span style="white-space:pre">        </span>&nbsp;4) People depending on packages can get "secret" bug fixes.</div><div><br></div><div>Between the two the worst case for immutable is basically a noop, and the worst case for mutable is a very serious problem which leads many people to needlessly abandon PyPI for when installing packages matter and use their own internal systems. I very strongly feel that the worst case for mutable is a serious problem and it outweighs the very minor benefit package authors get from being able to re upload.</div><div><br></div><div>On an additional note, a good compromise might be to allow reuploads for the first 30 minutes or an hour, and after that prevent it. You still provide that minor benefit in the only situation it's a valid use in my opinion (the "oh no I just uploaded a package and it was broken"), but you let people be secure in the fact that when I test my software against a specific version, I can install that version over and over again and get the same results.</div><div><span style="color: rgb(160, 160, 168); "><br></span></div><div><span style="color: rgb(160, 160, 168); ">On Monday, January 30, 2012 at 3:04 AM, "Martin v. Löwis" wrote:</span></div><blockquote type="cite"><div>
                    <span><div><div><blockquote type="cite"><div><blockquote type="cite"><div><div>-1. There are plenty of ways to check whether the file was modified if</div><div>you already have a copy of it. Users just need to accept that files may</div><div>change, and package authors need to accept that users may retain old</div><div>copies of a file even after they replaced it.</div></div></blockquote><div>I don't always have a copy of the file, I might only have a reference</div><div> such as slumber==0.3.0. </div></div></blockquote><div><br></div><div>The better. A responsible author, when replacing an existing file,</div><div>should make sure that it is reasonably compatible with the previous</div><div>copy of the file. E.g. the update may include corrected typos or include</div><div>files that the previous copy didn't include; the previous copy may have</div><div>actually not worked at all in some circumstances.</div><div><br></div><div>Now, it may be that the author does break your code by mistake when</div><div>replacing a file. You should then report that to the author, asking</div><div>him to restore the original file and be more careful in the future.</div><div><br></div><div>Regards,</div><div>Martin</div></div></div></span>
                  
                  
                  
                  
                </div></blockquote><div>
                    <br>
                </div>
            </div></div></div>
                </blockquote>
                 
                <div>
                    <br>
                </div>
            </div></blockquote><blockquote type="cite"><div><span>_______________________________________________</span><br><span>Catalog-SIG mailing list</span><br><span><a href="mailto:Catalog-SIG@python.org">Catalog-SIG@python.org</a></span><br><span><a href="http://mail.python.org/mailman/listinfo/catalog-sig">http://mail.python.org/mailman/listinfo/catalog-sig</a></span><br></div></blockquote></body></html>