I think there's a disconnection between how you and I understand this
system works. In a given build, there is only a single version of a module;
there cannot be multiple copies, let alone many copies.So if v1.11 of
module A depends on v1.3 of module B, which in turn depends on v1.12 of
module A, then the build will choose A v1.12. The is only one version of A
in the build.
On Sun, Sep 9, 2018 at 1:40 PM Scott Cotton <w...@iri-labs.com> wrote:

> Hi Sameer,
>
> Thanks for asking, here are some thoughts,
>
> With time, this could create man many many copies of (different versions)
> of a module.
> this would slow down fetch, storage, compilation, etc potentially a lot,
> and it would only
> get worse and worse over time.
>
> if a security patch is applied to the most recent version in a
> version-compatible space of
> a module that depends on an earlier version of itself, then the security
> hole may still exist.
> Moreover, if the SCC of module dependencies is outside the control of the
> authors of the
> module being patched, it seems there is might be no way they could
> propagate the patch
> without editing history, which violates the very notion of versioning to
> begin with.
>
> The notion of software moving forward by versioning is in part an increase
> in reliability,
> not just security patches, so I would be frightened to use cyclic modules
> even in code
> for which I were certain there would be no security patches (like fixed
> memory, known cpu bounds
> math algorithms for example)
>
> Other than that, it is to me very confusing and counter-intuitive that a
> version of some software
> depend on a previous version of itself.  Maybe I'm missing something in
> the modules
> specification or vision, and maybe, (even hopefully) I am wrong about
> these concerns.
>
> I could list more related ideas, but given that I might be wrong I'll
> leave it at that.
>
> Thanks,
>
> Scott
>
>
> On 9 September 2018 at 19:19, Sameer Ajmani <sam...@golang.org> wrote:
>
>> If a module depends on an earlier version itself, and successive versions
>> are backwards compatible, why is it not OK for the current version to
>> satisfy that dependency?
>>
>> On Sun, Sep 9, 2018 at 1:13 PM Scott Cotton <w...@iri-labs.com> wrote:
>>
>>> Hi Sameer,
>>>
>>> When I had a module self-dependency, I considered the fact that it
>>> worked a bug.  I had not followed
>>> closely enough til this discussion to think of it as expected.
>>>
>>> As someone who has a tendency to often ask themself: "worse case how can
>>> this be a problem?"
>>>
>>> the list is indeed long and severe for modules which depend on
>>> themselves backwards in time.
>>>
>>> For cyclic dependencies which are somehow synchronised so that there is
>>> no backwards in time
>>> propagation, my impression would be "that's complicated", but I can't
>>> see offhand how it would be
>>> as problematic as backward in time self dependencies.
>>>
>>> Scott
>>>
>>>
>>>
>>> On 9 September 2018 at 18:38, Sameer Ajmani <sam...@golang.org> wrote:
>>>
>>>> With respect to errors, I'm asking how things failed when you had a
>>>> cyclic module dependency. My expectation is that this should just work. If
>>>> your module 0.12 has a dependency on itself with min version 0.11, then
>>>> 0.12 satisfies that dependency (as long as it's following the import
>>>> compatibility rule, which isn't necessarily expected for pre-1.0 modules).
>>>>
>>>> On Sun, Sep 9, 2018 at 9:10 AM Scott Cotton <w...@iri-labs.com> wrote:
>>>>
>>>>> Hi Sameer,
>>>>>
>>>>> I don't know what is considered an error and not an error with cyclic
>>>>> module dependencies.
>>>>>
>>>>> Honestly, it makes my head hurt and simply requires too much thought
>>>>> that I'd rather spend on the code.
>>>>>
>>>>> For example, I don't want to think what will happen to some SCC in a
>>>>> module dependency graph after
>>>>> a decade of development, in particular if a module can depend on an
>>>>> earlier version of itself.
>>>>>
>>>>> Scott
>>>>>
>>>>>
>>>>>
>>>>>
>>>>>
>>>>>
>>>>> On 9 September 2018 at 14:19, Sameer Ajmani <sam...@golang.org> wrote:
>>>>>
>>>>>> Are you seeing errors when there are cyclic module dependencies? As I
>>>>>> recall, cyclic dependencies between modules (not packages) must be 
>>>>>> allowed:
>>>>>> https://research.swtch.com/vgo-mvs
>>>>>> "Note that F 1.1 requires G 1.1, but G 1.1 also requires F 1.1.
>>>>>> Declaring this kind of cycle can be important when singleton 
>>>>>> functionality
>>>>>> moves from one module to another. Our algorithms must not assume the 
>>>>>> module
>>>>>> requirement graph is acyclic."
>>>>>> On Sun, Sep 9, 2018 at 7:58 AM Scott Cotton <w...@iri-labs.com> wrote:
>>>>>>
>>>>>>> Hi Paul,
>>>>>>>
>>>>>>> On 9 September 2018 at 13:44, Paul Jolly <p...@myitcv.io> wrote:
>>>>>>>
>>>>>>>> Hi Scott,
>>>>>>>>
>>>>>>>> > Should cyclic module dependencies be allowed?
>>>>>>>>
>>>>>>>> Yes, indeed in some situations they are totally necessary.
>>>>>>>>
>>>>>>>> I wrote up an experience report on this very topic:
>>>>>>>> https://gist.github.com/myitcv/79c3f12372e13b0cbbdf0411c8c46fd5
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>> Interesting.  I'm not sure what cyclic module dependencies means.  I
>>>>>>> do know some package managers (not go) boast of having a "solid 
>>>>>>> transitive
>>>>>>> dependency model".  I hope that any cycles in modules dependencies are
>>>>>>> either avoided or treated in a very clear simple way by go's modules.
>>>>>>>
>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>> > Should a module, following a cycle, be able to depend on an
>>>>>>>> earlier version of itself? (I saw this once...)
>>>>>>>>
>>>>>>>> I can't see how this would work; indeed I can't even unravel it in
>>>>>>>> my
>>>>>>>> head! Do you have a concrete example to help explain?
>>>>>>>>
>>>>>>>
>>>>>>> Unfortunately, my concrete example is lost in sands of time, so I
>>>>>>> can only give a rough idea.  I had cyclic module dependencies, somewhat
>>>>>>> unintended, but it crept in via some test case.  I was playing with 111 
>>>>>>> or
>>>>>>> late 111 release candidate with it and asked it to rebuild go.mod at an
>>>>>>> untagged HEAD (I think) that was a few commits ahead of say v0.1.2.  
>>>>>>> Then
>>>>>>> go.mod had that my module required v0.1.1 of itself in go.mod
>>>>>>> "indirectly".  All I could figure out was that the module dependency 
>>>>>>> cycle
>>>>>>> A -> B -> A had B depending on an older version of A via a test case.
>>>>>>>
>>>>>>> Scott
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>>
>>>>>>>> Thanks,
>>>>>>>>
>>>>>>>>
>>>>>>>> Paul
>>>>>>>
>>>>>>>
>>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>> --
>>>>>>> Scott Cotton
>>>>>>> President, IRI France SAS
>>>>>>> http://www.iri-labs.com
>>>>>>>
>>>>>>>
>>>>>>> --
>>>>>>> You received this message because you are subscribed to the Google
>>>>>>> Groups "golang-nuts" group.
>>>>>>> To unsubscribe from this group and stop receiving emails from it,
>>>>>>> send an email to golang-nuts+unsubscr...@googlegroups.com.
>>>>>>> For more options, visit https://groups.google.com/d/optout.
>>>>>>>
>>>>>>
>>>>>
>>>>>
>>>>> --
>>>>> Scott Cotton
>>>>> President, IRI France SAS
>>>>> http://www.iri-labs.com
>>>>>
>>>>>
>>>>>
>>>
>>>
>>> --
>>> Scott Cotton
>>> President, IRI France SAS
>>> http://www.iri-labs.com
>>>
>>>
>>>
>
>
> --
> Scott Cotton
> President, IRI France SAS
> http://www.iri-labs.com
>
>
>

-- 
You received this message because you are subscribed to the Google Groups 
"golang-nuts" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to golang-nuts+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to