unofficial mirror of guix-devel@gnu.org 
 help / color / mirror / code / Atom feed
* reproducibility
@ 2016-01-09 10:53 Federico Beffa
  2016-01-10 20:49 ` reproducibility Ludovic Courtès
  0 siblings, 1 reply; 9+ messages in thread
From: Federico Beffa @ 2016-01-09 10:53 UTC (permalink / raw)
  To: Guix-devel

Hi,

I've noticed that a derivation is a function of the order of the
inputs. As an example, the following two input orders give rise to two
distinct derivations:

A)

    (inputs
     `(("texlive" ,texlive)
       ("texinfo" ,texinfo)
       ("m4" ,m4)
       ("libx11" ,libx11))

B)
    (inputs
     `(("texinfo" ,texinfo)
       ("texlive" ,texlive)
       ("m4" ,m4)
       ("libx11" ,libx11))

Is this intentional?

Regards,
Fede

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: reproducibility
  2016-01-09 10:53 reproducibility Federico Beffa
@ 2016-01-10 20:49 ` Ludovic Courtès
  2016-01-12 20:11   ` reproducibility Federico Beffa
  0 siblings, 1 reply; 9+ messages in thread
From: Ludovic Courtès @ 2016-01-10 20:49 UTC (permalink / raw)
  To: Federico Beffa; +Cc: Guix-devel

Federico Beffa <beffa@ieee.org> skribis:

> I've noticed that a derivation is a function of the order of the
> inputs. As an example, the following two input orders give rise to two
> distinct derivations:
>
> A)
>
>     (inputs
>      `(("texlive" ,texlive)
>        ("texinfo" ,texinfo)
>        ("m4" ,m4)
>        ("libx11" ,libx11))
>
> B)
>     (inputs
>      `(("texinfo" ,texinfo)
>        ("texlive" ,texlive)
>        ("m4" ,m4)
>        ("libx11" ,libx11))
>
> Is this intentional?

Yes.  There are several places where order matters, most importantly
search paths, and these are computed from the input lists.

Ludo’.

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: reproducibility
  2016-01-10 20:49 ` reproducibility Ludovic Courtès
@ 2016-01-12 20:11   ` Federico Beffa
  2016-01-12 21:37     ` reproducibility Ludovic Courtès
  0 siblings, 1 reply; 9+ messages in thread
From: Federico Beffa @ 2016-01-12 20:11 UTC (permalink / raw)
  To: Ludovic Courtès; +Cc: Guix-devel

On Sun, Jan 10, 2016 at 9:49 PM, Ludovic Courtès <ludo@gnu.org> wrote:
> Federico Beffa <beffa@ieee.org> skribis:
>
>> I've noticed that a derivation is a function of the order of the
>> inputs. As an example, the following two input orders give rise to two
>> distinct derivations:
>>
>> A)
>>
>>     (inputs
>>      `(("texlive" ,texlive)
>>        ("texinfo" ,texinfo)
>>        ("m4" ,m4)
>>        ("libx11" ,libx11))
>>
>> B)
>>     (inputs
>>      `(("texinfo" ,texinfo)
>>        ("texlive" ,texlive)
>>        ("m4" ,m4)
>>        ("libx11" ,libx11))
>>
>> Is this intentional?
>
> Yes.  There are several places where order matters, most importantly
> search paths, and these are computed from the input lists.

If order matters, it would probably be more robust to force internally
a specific order rather than relying on the (often random) order
defined in a package recipe (possibly created by an importer, ...).

Fede

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: reproducibility
  2016-01-12 20:11   ` reproducibility Federico Beffa
@ 2016-01-12 21:37     ` Ludovic Courtès
  2016-01-13  8:13       ` reproducibility Federico Beffa
  0 siblings, 1 reply; 9+ messages in thread
From: Ludovic Courtès @ 2016-01-12 21:37 UTC (permalink / raw)
  To: Federico Beffa; +Cc: Guix-devel

Federico Beffa <beffa@ieee.org> skribis:

> On Sun, Jan 10, 2016 at 9:49 PM, Ludovic Courtès <ludo@gnu.org> wrote:
>> Federico Beffa <beffa@ieee.org> skribis:
>>
>>> I've noticed that a derivation is a function of the order of the
>>> inputs. As an example, the following two input orders give rise to two
>>> distinct derivations:
>>>
>>> A)
>>>
>>>     (inputs
>>>      `(("texlive" ,texlive)
>>>        ("texinfo" ,texinfo)
>>>        ("m4" ,m4)
>>>        ("libx11" ,libx11))
>>>
>>> B)
>>>     (inputs
>>>      `(("texinfo" ,texinfo)
>>>        ("texlive" ,texlive)
>>>        ("m4" ,m4)
>>>        ("libx11" ,libx11))
>>>
>>> Is this intentional?
>>
>> Yes.  There are several places where order matters, most importantly
>> search paths, and these are computed from the input lists.
>
> If order matters, it would probably be more robust to force internally
> a specific order rather than relying on the (often random) order
> defined in a package recipe (possibly created by an importer, ...).

Most of the time any order would work, but I can imagine situations
where the packager could purposefully choose a specific order.  So I’d
rather not do any automatic sorting, if that’s what you have in mind.

Thanks,
Ludo’.

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: reproducibility
  2016-01-12 21:37     ` reproducibility Ludovic Courtès
@ 2016-01-13  8:13       ` Federico Beffa
  2016-01-13  9:15         ` reproducibility Efraim Flashner
  2016-01-13 13:56         ` reproducibility Ludovic Courtès
  0 siblings, 2 replies; 9+ messages in thread
From: Federico Beffa @ 2016-01-13  8:13 UTC (permalink / raw)
  To: Ludovic Courtès; +Cc: Guix-devel

On Tue, Jan 12, 2016 at 10:37 PM, Ludovic Courtès <ludo@gnu.org> wrote:
> Federico Beffa <beffa@ieee.org> skribis:
>
>> On Sun, Jan 10, 2016 at 9:49 PM, Ludovic Courtès <ludo@gnu.org> wrote:
>>> Federico Beffa <beffa@ieee.org> skribis:
>>>
>>>> I've noticed that a derivation is a function of the order of the
>>>> inputs. As an example, the following two input orders give rise to two
>>>> distinct derivations:
>>>>
>>>> A)
>>>>
>>>>     (inputs
>>>>      `(("texlive" ,texlive)
>>>>        ("texinfo" ,texinfo)
>>>>        ("m4" ,m4)
>>>>        ("libx11" ,libx11))
>>>>
>>>> B)
>>>>     (inputs
>>>>      `(("texinfo" ,texinfo)
>>>>        ("texlive" ,texlive)
>>>>        ("m4" ,m4)
>>>>        ("libx11" ,libx11))
>>>>
>>>> Is this intentional?
>>>
>>> Yes.  There are several places where order matters, most importantly
>>> search paths, and these are computed from the input lists.
>>
>> If order matters, it would probably be more robust to force internally
>> a specific order rather than relying on the (often random) order
>> defined in a package recipe (possibly created by an importer, ...).
>
> Most of the time any order would work, but I can imagine situations
> where the packager could purposefully choose a specific order.  So I’d
> rather not do any automatic sorting, if that’s what you have in mind.

Just out of curiosity, could you provide a concrete example where the
order is purposefully specified.

Thanks,
Fede

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: reproducibility
  2016-01-13  8:13       ` reproducibility Federico Beffa
@ 2016-01-13  9:15         ` Efraim Flashner
  2016-01-13 19:51           ` reproducibility Federico Beffa
  2016-01-13 13:56         ` reproducibility Ludovic Courtès
  1 sibling, 1 reply; 9+ messages in thread
From: Efraim Flashner @ 2016-01-13  9:15 UTC (permalink / raw)
  To: Federico Beffa; +Cc: Guix-devel

[-- Attachment #1: Type: text/plain, Size: 833 bytes --]

On Wed, 13 Jan 2016 09:13:25 +0100
Federico Beffa <beffa@ieee.org> wrote:

> On Tue, Jan 12, 2016 at 10:37 PM, Ludovic Courtès <ludo@gnu.org> wrote:
>  [...]  
>  [...]  
>  [...]  
>  [...]  
>  [...]  
>  [...]  
>  [...]  
> 
> Just out of curiosity, could you provide a concrete example where the
> order is purposefully specified.
> 
> Thanks,
> Fede
> 

I haven't had time (since reading this) to test if the order matters or not,
but some of the openstack packages say they care about order:
https://git.openstack.org/cgit/openstack/python-keystoneclient/tree/test-requirements.txt?h=2.0.0

-- 
Efraim Flashner   <efraim@flashner.co.il>   אפרים פלשנר
GPG key = A28B F40C 3E55 1372 662D  14F7 41AA E7DC CA3D 8351
Confidentiality cannot be guaranteed on emails sent or received unencrypted

[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 819 bytes --]

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: reproducibility
  2016-01-13  8:13       ` reproducibility Federico Beffa
  2016-01-13  9:15         ` reproducibility Efraim Flashner
@ 2016-01-13 13:56         ` Ludovic Courtès
  2016-01-13 19:53           ` reproducibility Federico Beffa
  1 sibling, 1 reply; 9+ messages in thread
From: Ludovic Courtès @ 2016-01-13 13:56 UTC (permalink / raw)
  To: Federico Beffa; +Cc: Guix-devel

Federico Beffa <beffa@ieee.org> skribis:

> On Tue, Jan 12, 2016 at 10:37 PM, Ludovic Courtès <ludo@gnu.org> wrote:
>> Federico Beffa <beffa@ieee.org> skribis:
>>
>>> On Sun, Jan 10, 2016 at 9:49 PM, Ludovic Courtès <ludo@gnu.org> wrote:
>>>> Federico Beffa <beffa@ieee.org> skribis:
>>>>
>>>>> I've noticed that a derivation is a function of the order of the
>>>>> inputs. As an example, the following two input orders give rise to two
>>>>> distinct derivations:
>>>>>
>>>>> A)
>>>>>
>>>>>     (inputs
>>>>>      `(("texlive" ,texlive)
>>>>>        ("texinfo" ,texinfo)
>>>>>        ("m4" ,m4)
>>>>>        ("libx11" ,libx11))
>>>>>
>>>>> B)
>>>>>     (inputs
>>>>>      `(("texinfo" ,texinfo)
>>>>>        ("texlive" ,texlive)
>>>>>        ("m4" ,m4)
>>>>>        ("libx11" ,libx11))
>>>>>
>>>>> Is this intentional?
>>>>
>>>> Yes.  There are several places where order matters, most importantly
>>>> search paths, and these are computed from the input lists.
>>>
>>> If order matters, it would probably be more robust to force internally
>>> a specific order rather than relying on the (often random) order
>>> defined in a package recipe (possibly created by an importer, ...).
>>
>> Most of the time any order would work, but I can imagine situations
>> where the packager could purposefully choose a specific order.  So I’d
>> rather not do any automatic sorting, if that’s what you have in mind.
>
> Just out of curiosity, could you provide a concrete example where the
> order is purposefully specified.

No specific example, sorry, but it’s plausible IMO.  With enough CPU
power, we could try rebuilding everything with a random order and see
what breaks.

Thanks,
Ludo’.

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: reproducibility
  2016-01-13  9:15         ` reproducibility Efraim Flashner
@ 2016-01-13 19:51           ` Federico Beffa
  0 siblings, 0 replies; 9+ messages in thread
From: Federico Beffa @ 2016-01-13 19:51 UTC (permalink / raw)
  To: Efraim Flashner; +Cc: Guix-devel

On Wed, Jan 13, 2016 at 10:15 AM, Efraim Flashner <efraim@flashner.co.il> wrote:
> On Wed, 13 Jan 2016 09:13:25 +0100
> Federico Beffa <beffa@ieee.org> wrote:
>
>> On Tue, Jan 12, 2016 at 10:37 PM, Ludovic Courtès <ludo@gnu.org> wrote:
>>  [...]
>>  [...]
>>  [...]
>>  [...]
>>  [...]
>>  [...]
>>  [...]
>>
>> Just out of curiosity, could you provide a concrete example where the
>> order is purposefully specified.
>>
>> Thanks,
>> Fede
>>
>
> I haven't had time (since reading this) to test if the order matters or not,
> but some of the openstack packages say they care about order:
> https://git.openstack.org/cgit/openstack/python-keystoneclient/tree/test-requirements.txt?h=2.0.0

Reading the comment sounds like its because pip installs packages
sequentially. Sounds like a different approach from what we are doing.

Anyway, thanks for the pointer.
Regards,
Fede

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: reproducibility
  2016-01-13 13:56         ` reproducibility Ludovic Courtès
@ 2016-01-13 19:53           ` Federico Beffa
  0 siblings, 0 replies; 9+ messages in thread
From: Federico Beffa @ 2016-01-13 19:53 UTC (permalink / raw)
  To: Ludovic Courtès; +Cc: Guix-devel

On Wed, Jan 13, 2016 at 2:56 PM, Ludovic Courtès <ludo@gnu.org> wrote:
> Federico Beffa <beffa@ieee.org> skribis:
>
>> On Tue, Jan 12, 2016 at 10:37 PM, Ludovic Courtès <ludo@gnu.org> wrote:
>>> Federico Beffa <beffa@ieee.org> skribis:
>>>
>>>> On Sun, Jan 10, 2016 at 9:49 PM, Ludovic Courtès <ludo@gnu.org> wrote:
>>>>> Federico Beffa <beffa@ieee.org> skribis:
>>>>>
>>>>>> I've noticed that a derivation is a function of the order of the
>>>>>> inputs. As an example, the following two input orders give rise to two
>>>>>> distinct derivations:
>>>>>>
>>>>>> A)
>>>>>>
>>>>>>     (inputs
>>>>>>      `(("texlive" ,texlive)
>>>>>>        ("texinfo" ,texinfo)
>>>>>>        ("m4" ,m4)
>>>>>>        ("libx11" ,libx11))
>>>>>>
>>>>>> B)
>>>>>>     (inputs
>>>>>>      `(("texinfo" ,texinfo)
>>>>>>        ("texlive" ,texlive)
>>>>>>        ("m4" ,m4)
>>>>>>        ("libx11" ,libx11))
>>>>>>
>>>>>> Is this intentional?
>>>>>
>>>>> Yes.  There are several places where order matters, most importantly
>>>>> search paths, and these are computed from the input lists.
>>>>
>>>> If order matters, it would probably be more robust to force internally
>>>> a specific order rather than relying on the (often random) order
>>>> defined in a package recipe (possibly created by an importer, ...).
>>>
>>> Most of the time any order would work, but I can imagine situations
>>> where the packager could purposefully choose a specific order.  So I’d
>>> rather not do any automatic sorting, if that’s what you have in mind.
>>
>> Just out of curiosity, could you provide a concrete example where the
>> order is purposefully specified.
>
> No specific example, sorry, but it’s plausible IMO.  With enough CPU
> power, we could try rebuilding everything with a random order and see
> what breaks.

I guess that's not necessary... I was just trying to learn something.

Thanks,
Fede

^ permalink raw reply	[flat|nested] 9+ messages in thread

end of thread, other threads:[~2016-01-13 19:53 UTC | newest]

Thread overview: 9+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2016-01-09 10:53 reproducibility Federico Beffa
2016-01-10 20:49 ` reproducibility Ludovic Courtès
2016-01-12 20:11   ` reproducibility Federico Beffa
2016-01-12 21:37     ` reproducibility Ludovic Courtès
2016-01-13  8:13       ` reproducibility Federico Beffa
2016-01-13  9:15         ` reproducibility Efraim Flashner
2016-01-13 19:51           ` reproducibility Federico Beffa
2016-01-13 13:56         ` reproducibility Ludovic Courtès
2016-01-13 19:53           ` reproducibility Federico Beffa

Code repositories for project(s) associated with this public inbox

	https://git.savannah.gnu.org/cgit/guix.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).