Bootstrappable Debian - a decision is needed, patches exist

2013-10-14 Thread Johannes Schauer
Hi,

This email is a follow up on the thread started January 2013 [1]. In summary:
it seems that the ability to bootstrap Debian from scratch and the requirement
to extend the Build-Depends syntax meet general agreement.

What is yet to be decided is the concrete format for the Build-Depends syntax 
extension. The first proposals suggested a syntax which looked like

Build-Depends: foo [amd64] 

Which would indicate that the build dependency "foo" would not apply if the
build profile called "stage1" is activated. It was critisized [2] that this
syntax wastes a meta character and thus prohibits future extensions of the
Build-Depends syntax. Therefore the second proposal (finalised at debconf13)
looked like this:

Build-Depends: foo [amd64] [!profile.stage1]

The rectangular brackets are reused and a prefixed namespace is used to
indicate that "stage1" is a build profile name. We hoped this would be the
final spec, given the previous discussion, but those brackets also got some
pushback [3] and thus the third version was born:

Build-Depends: foo [amd64] 

We wrote down the last two options in form of a spec on the Debian wiki [11].

Patches for dpkg, python-debian, apt and sbuild implementing the original
format have existed for years [4]. Patches for the new formats have existed for
some time as well [5]. They are surely not perfect but we would like to get
them into a state in which they can be integrated into dpkg. But for that we
need some feedback from the dpkg devs as well as a final decision of the Debian
community about which syntax to choose. We are writing to d-devel this time
because the thread on d-dpkg [6,7] has been dormant for a month once again.
Maybe bringing this issue to a wider audience will help make a decision on this
problem. The results from two years of GSoC [8,9] as well as the year long
efforts of others [10] cannot bear any fruit without this issue finally being
taken care of.

Thank you!

josch & wookey

[1] http://lists.debian.org/20130115181840.GA16417@hoothoot
[2] http://lists.debian.org/20726.45081.38709.233...@chiark.greenend.org.uk
[3] http://lists.debian.org/20130816121504.gb20...@gaara.hadrons.org
[4] http://people.debian.org/~wookey/bootstrap/patches/profiles/tools/
[5] http://lists.debian.org/20130917103117.2726.40546@hoothoot
[6] http://lists.debian.org/20130419194252.17205.76995@hoothoot
[7] http://lists.debian.org/debian-dpkg/2013/08/msg00019.html
[8] http://www.alkmim.eti.br/~alkmim/gitrepo/autobootstrap.git
[9] https://gitorious.org/debian-bootstrap/botch
[10] http://people.debian.org/~wookey/bootstrap
[11] https://wiki.debian.org/BuildProfileSpec


--
To UNSUBSCRIBE, email to debian-devel-requ...@lists.debian.org
with a subject of "unsubscribe". Trouble? Contact listmas...@lists.debian.org
Archive: http://lists.debian.org/20131015060337.7934.42627@hoothoot



Re: Bootstrappable Debian - a decision is needed, patches exist

2013-10-14 Thread YunQiang Su
On Tue, Oct 15, 2013 at 2:03 PM, Johannes Schauer  wrote:
> Hi,
>
> This email is a follow up on the thread started January 2013 [1]. In summary:
> it seems that the ability to bootstrap Debian from scratch and the requirement
> to extend the Build-Depends syntax meet general agreement.
>
> What is yet to be decided is the concrete format for the Build-Depends syntax 
> extension. The first proposals suggested a syntax which looked like
>
> Build-Depends: foo [amd64] 
I'd prefer Build-Depends-Stage1 if possible.
When bootstrap, dpkg only ask for these build-depends while for normal build,
dpkg should merge Build-Depends-Stage1 and Build-Depends.
>
> Which would indicate that the build dependency "foo" would not apply if the
> build profile called "stage1" is activated. It was critisized [2] that this
> syntax wastes a meta character and thus prohibits future extensions of the
> Build-Depends syntax. Therefore the second proposal (finalised at debconf13)
> looked like this:
>
> Build-Depends: foo [amd64] [!profile.stage1]
>
> The rectangular brackets are reused and a prefixed namespace is used to
> indicate that "stage1" is a build profile name. We hoped this would be the
> final spec, given the previous discussion, but those brackets also got some
> pushback [3] and thus the third version was born:
>
> Build-Depends: foo [amd64] 
>
> We wrote down the last two options in form of a spec on the Debian wiki [11].
>
> Patches for dpkg, python-debian, apt and sbuild implementing the original
> format have existed for years [4]. Patches for the new formats have existed 
> for
> some time as well [5]. They are surely not perfect but we would like to get
> them into a state in which they can be integrated into dpkg. But for that we
> need some feedback from the dpkg devs as well as a final decision of the 
> Debian
> community about which syntax to choose. We are writing to d-devel this time
> because the thread on d-dpkg [6,7] has been dormant for a month once again.
> Maybe bringing this issue to a wider audience will help make a decision on 
> this
> problem. The results from two years of GSoC [8,9] as well as the year long
> efforts of others [10] cannot bear any fruit without this issue finally being
> taken care of.
>
> Thank you!
>
> josch & wookey
>
> [1] http://lists.debian.org/20130115181840.GA16417@hoothoot
> [2] http://lists.debian.org/20726.45081.38709.233...@chiark.greenend.org.uk
> [3] http://lists.debian.org/20130816121504.gb20...@gaara.hadrons.org
> [4] http://people.debian.org/~wookey/bootstrap/patches/profiles/tools/
> [5] http://lists.debian.org/20130917103117.2726.40546@hoothoot
> [6] http://lists.debian.org/20130419194252.17205.76995@hoothoot
> [7] http://lists.debian.org/debian-dpkg/2013/08/msg00019.html
> [8] http://www.alkmim.eti.br/~alkmim/gitrepo/autobootstrap.git
> [9] https://gitorious.org/debian-bootstrap/botch
> [10] http://people.debian.org/~wookey/bootstrap
> [11] https://wiki.debian.org/BuildProfileSpec
>
>
> --
> To UNSUBSCRIBE, email to debian-devel-requ...@lists.debian.org
> with a subject of "unsubscribe". Trouble? Contact listmas...@lists.debian.org
> Archive: http://lists.debian.org/20131015060337.7934.42627@hoothoot
>



-- 
YunQiang Su


-- 
To UNSUBSCRIBE, email to debian-devel-requ...@lists.debian.org
with a subject of "unsubscribe". Trouble? Contact listmas...@lists.debian.org
Archive: 
http://lists.debian.org/CAKcpw6VGjrC=++ka2cjq8bp6r8w8y4odviddtfr2nunsjlk...@mail.gmail.com



Re: Bootstrappable Debian - a decision is needed, patches exist

2013-10-14 Thread Johannes Schauer
Hi,

Quoting YunQiang Su (2013-10-15 08:08:52)
> On Tue, Oct 15, 2013 at 2:03 PM, Johannes Schauer  wrote:
> > What is yet to be decided is the concrete format for the Build-Depends
> > syntax extension. The first proposals suggested a syntax which looked like
> >
> > Build-Depends: foo [amd64] 
> I'd prefer Build-Depends-Stage1 if possible.
> When bootstrap, dpkg only ask for these build-depends while for normal build,
> dpkg should merge Build-Depends-Stage1 and Build-Depends.

this approach does not work because it does not allow to specify additional
dependencies for when a source package is compiled with a certain profile
activated.

The Build-Depends-Stage1 field name was used in earlier proposals with a
different meaning. Instead of making the final build dependencies the union of
Build-Depends and Build-Depends-Stage1 as you proposed, Build-Depends-Stage1
contained all dependencies necessary for the build profile "stage1". When doing
a normal build, only the Build-Depends would be used. When building with the
build profile "stage1" activated only the Build-Depends-Stage1 would be used.
This solves the problem I explained above which your solution has.

This Build-Depends-Stage1 format was abolished in favor of the syntax additions
explained in my last email because of the following reasons:

 - it requires variable field names to match all possible profiles
 - it requires a near duplication of the Build-Depends field which is highly
   prone to bitrot
 - it does not work with multiple profiles activated at the same time

For a full history of the development of this see

http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=661538

cheers, josch


--
To UNSUBSCRIBE, email to debian-devel-requ...@lists.debian.org
with a subject of "unsubscribe". Trouble? Contact listmas...@lists.debian.org
Archive: http://lists.debian.org/20131015063400.7934.32962@hoothoot



Re: Bootstrappable Debian - a decision is needed, patches exist

2013-10-15 Thread Ben Hutchings
On Tue, 2013-10-15 at 08:03 +0200, Johannes Schauer wrote:
[...]
> But for that we
> need some feedback from the dpkg devs as well as a final decision of the 
> Debian
> community about which syntax to choose.
[...]

You, and the dpkg maintainers, are the ones that understand the
consequences of the different syntaxes.  Don't invite bikeshedding.

If the dpkg maintainers refuse to make a decision then you should go to
the technical committee.  Hopefully that will not be necessary.

Ben.

-- 
Ben Hutchings
Reality is just a crutch for people who can't handle science fiction.


signature.asc
Description: This is a digitally signed message part


Re: Bootstrappable Debian - a decision is needed, patches exist

2013-10-19 Thread Steve Langasek
Hi Johannes,

On Tue, Oct 15, 2013 at 08:34:00AM +0200, Johannes Schauer wrote:
> Quoting YunQiang Su (2013-10-15 08:08:52)
> > On Tue, Oct 15, 2013 at 2:03 PM, Johannes Schauer  
> > wrote:
> > > What is yet to be decided is the concrete format for the Build-Depends
> > > syntax extension. The first proposals suggested a syntax which looked like
> > >
> > > Build-Depends: foo [amd64] 
> > I'd prefer Build-Depends-Stage1 if possible.
> > When bootstrap, dpkg only ask for these build-depends while for normal 
> > build,
> > dpkg should merge Build-Depends-Stage1 and Build-Depends.

> this approach does not work because it does not allow to specify additional
> dependencies for when a source package is compiled with a certain profile
> activated.

> The Build-Depends-Stage1 field name was used in earlier proposals with a
> different meaning. Instead of making the final build dependencies the union of
> Build-Depends and Build-Depends-Stage1 as you proposed, Build-Depends-Stage1
> contained all dependencies necessary for the build profile "stage1". When 
> doing
> a normal build, only the Build-Depends would be used. When building with the
> build profile "stage1" activated only the Build-Depends-Stage1 would be used.
> This solves the problem I explained above which your solution has.

> This Build-Depends-Stage1 format was abolished in favor of the syntax
> additions explained in my last email because of the following reasons:

>  - it requires variable field names to match all possible profiles
>  - it requires a near duplication of the Build-Depends field which is highly
>prone to bitrot
>  - it does not work with multiple profiles activated at the same time

> For a full history of the development of this see

> http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=661538

My recollection is that the "abolishing" of the Build-Depends-Stage1 field
was done by the same dpkg maintainer who you say is now not giving you
feedback.  It's elegant that a general-purpose syntax has been proposed, but
elegance isn't worth anything if it doesn't result in shipping code.

Being able to automatically bootstrap the Debian archive is self-evidently
useful to the project.  The other uses proposed for profiles are all corner
cases that should be kept far, far away from the archive.  I don't think the
implementation of automated bootstrapping should be allowed to block on such
pie-in-the-sky plans for profiles.

My understanding is that all build-dependency loops in the archive can be
broken with a single additional stage (stage1), so only one added profile
and one added build-dependency field would be required.  Yes, it could
bitrot, but it's better than not having any of the data in the source
packages at all.  And if someone really finds this inelegant and insists
that we should extend the syntax of the Build-Depends field, let them step
up and make that happen instead of pointing at grandiose plans they're not
making any effort to implement.  A Build-Depends-Stage1 field requires no
support from dpkg in the archive to implement.

Cheers,
-- 
Steve Langasek   Give me a lever long enough and a Free OS
Debian Developer   to set it on, and I can move the world.
Ubuntu Developerhttp://www.debian.org/
slanga...@ubuntu.com vor...@debian.org


signature.asc
Description: Digital signature


Re: Bootstrappable Debian - a decision is needed, patches exist

2013-10-19 Thread Johannes Schauer
Hi Steve,

Quoting Steve Langasek (2013-10-20 05:46:15)
> My recollection is that the "abolishing" of the Build-Depends-Stage1 field
> was done by the same dpkg maintainer who you say is now not giving you
> feedback.

Correct.

> It's elegant that a general-purpose syntax has been proposed, but elegance
> isn't worth anything if it doesn't result in shipping code.
> 
> Being able to automatically bootstrap the Debian archive is self-evidently
> useful to the project.  The other uses proposed for profiles are all corner
> cases that should be kept far, far away from the archive.  I don't think the
> implementation of automated bootstrapping should be allowed to block on such
> pie-in-the-sky plans for profiles.
> 
> My understanding is that all build-dependency loops in the archive can be
> broken with a single additional stage (stage1), so only one added profile
> and one added build-dependency field would be required.  Yes, it could
> bitrot, but it's better than not having any of the data in the source
> packages at all.

I agree with you and from my talking to wookey, he probably agrees too, that
*any* solution is fine as long as it's accepted by dpkg devs and allows us to
finally make Debian bootstrappable.

You nicely summarized the situation and I dont think I have much more to add.
Yes, falling back to the Build-Depends-Stage1 proposal (for which patches also
existed for over a year, see bug#661538) would also fully satisfy our needs for
now until something fancier is needed.

In addition, my analysis from last year showed that probably below 70 source
packages have to be modified to make everything bootstrappable. If that is the
case, then any future switch to something different might still be managable.

> And if someone really finds this inelegant and insists that we should extend
> the syntax of the Build-Depends field, let them step up and make that happen
> instead of pointing at grandiose plans they're not making any effort to
> implement.  A Build-Depends-Stage1 field requires no support from dpkg in the
> archive to implement.

I would love if that person did.

cheers, josch


--
To UNSUBSCRIBE, email to debian-devel-requ...@lists.debian.org
with a subject of "unsubscribe". Trouble? Contact listmas...@lists.debian.org
Archive: http://lists.debian.org/20131020064754.10620.38358@hoothoot



Re: Bootstrappable Debian - a decision is needed, patches exist

2013-10-23 Thread Wookey
+++ Steve Langasek [2013-10-19 20:46 -0700]:
> Hi Johannes,
> 

> My understanding is that all build-dependency loops in the archive can be
> broken with a single additional stage (stage1), so only one added profile
> and one added build-dependency field would be required. 

No, that's wrong. We need stage2 for at least toolchain bootstrapping.

And practical usage has shown that distinguishing between bootstrap, cross and 
test deps is genuinely useful. Doko has also expressed this opinion, and in is 
one of the few people that has used this seriously. So I really wouldn't want 
to go back to the simple 'Build-Depends-Stage1: ' implementation. I 
agree 
with Guillem on this.

> Yes, it could
> bitrot, but it's better than not having any of the data in the source
> packages at all.  And if someone really finds this inelegant and insists
> that we should extend the syntax of the Build-Depends field, let them step
> up and make that happen instead of pointing at grandiose plans they're not
> making any effort to implement.  A Build-Depends-Stage1 field requires no
> support from dpkg in the archive to implement.

Right, but we have now written the code for the better scheme, so the only 
issue is 
actually putting it in dpkg, which applied just the same to 
Build-Depends-Stage1. 
That original scheme had an advantage when nothing better had been done or 
proposed. 
Now it has none.

Guillem has now put this back on his list and promised to put somethig in soon, 
so I hope we'll see something which is both reasonably flexible and implemented 
very soon.

Wookey
-- 
Principal hats:  Linaro, Emdebian, Wookware, Balloonboard, ARM
http://wookware.org/


-- 
To UNSUBSCRIBE, email to debian-devel-requ...@lists.debian.org
with a subject of "unsubscribe". Trouble? Contact listmas...@lists.debian.org
Archive: http://lists.debian.org/20131023180136.gl7...@stoneboat.aleph1.co.uk



Re: Bootstrappable Debian - a decision is needed, patches exist

2013-10-23 Thread Steve Langasek
On Wed, Oct 23, 2013 at 07:01:36PM +0100, Wookey wrote:
> +++ Steve Langasek [2013-10-19 20:46 -0700]:
> > Hi Johannes,

> > My understanding is that all build-dependency loops in the archive can be
> > broken with a single additional stage (stage1), so only one added profile
> > and one added build-dependency field would be required. 

> No, that's wrong. We need stage2 for at least toolchain bootstrapping.

You need three distinct stages of package builds for this?  AIUI the first
stage of toolchain bootstrapping is always done outside the package build.

> And practical usage has shown that distinguishing between bootstrap, cross
> and test deps is genuinely useful.  Doko has also expressed this opinion,
> and in is one of the few people that has used this seriously.  So I really
> wouldn't want to go back to the simple 'Build-Depends-Stage1: '
> implementation.  I agree with Guillem on this.

Distinguishing between test deps and build-deps is purely an optimization,
it doesn't enable any fundamentally new capabilities.

Cross-deps don't seem to be covered by the current proposal AIUI.  I agree
that we're sorely missing a way to specify toolchain build-dependencies that
need to change depending on whether you're doing a native or cross build;
from my perspective this is even more important than bootstrapping, since
you bootstrap a port once but run into packages with
cross-toolchain-dependencies on an ongoing basis.  But while profiles let us
dodge unsatisfiable build-deps on things like , they don't
provide the semantics to let us pull in 
in its place.  Is anybody working on that problem?  I think Colin's
suggestion was that we might be better off having logic in apt's build-dep
resolver to magically map build-deps in certain cases, but I don't know that
this has been written down as a fleshed-out proposal anywhere yet.

> > Yes, it could
> > bitrot, but it's better than not having any of the data in the source
> > packages at all.  And if someone really finds this inelegant and insists
> > that we should extend the syntax of the Build-Depends field, let them step
> > up and make that happen instead of pointing at grandiose plans they're not
> > making any effort to implement.  A Build-Depends-Stage1 field requires no
> > support from dpkg in the archive to implement.

> Right, but we have now written the code for the better scheme, so the only
> issue is actually putting it in dpkg, which applied just the same to
> Build-Depends-Stage1.  That original scheme had an advantage when nothing
> better had been done or proposed.  Now it has none.

> Guillem has now put this back on his list and promised to put somethig in
> soon, so I hope we'll see something which is both reasonably flexible and
> implemented very soon.

Even if this were implemented in dpkg today, you still can't merge this
bootstrapping information into the Build-Depends fields of the packages in
the archive until the autobuilders can cope with it.  That means not only
does dpkg have to be able to parse it, so do apt, wanna-build, and (IIRC)
sbuild.  When will that be done?

The Build-Depends-Stage1 field requires no changes to the syntax of existing
fields and no changes to the archive infrastructure.  It could be added to
packages immediately (or, you know, a year and a half ago).

Build profiles may be a better overall design, but this design doesn't buy
us very much in practical terms AFAICS.  It just introduces more delays. 
Don't let the perfect be the enemy of the good.

-- 
Steve Langasek   Give me a lever long enough and a Free OS
Debian Developer   to set it on, and I can move the world.
Ubuntu Developerhttp://www.debian.org/
slanga...@ubuntu.com vor...@debian.org


signature.asc
Description: Digital signature


Re: Bootstrappable Debian - a decision is needed, patches exist

2013-10-23 Thread gregor herrmann
On Wed, 23 Oct 2013 12:05:30 -0700, Steve Langasek wrote:

> > And practical usage has shown that distinguishing between bootstrap, cross
> > and test deps is genuinely useful.  Doko has also expressed this opinion,
> > and in is one of the few people that has used this seriously.  So I really
> > wouldn't want to go back to the simple 'Build-Depends-Stage1: '
> > implementation.  I agree with Guillem on this.
> Distinguishing between test deps and build-deps is purely an optimization,
> it doesn't enable any fundamentally new capabilities.

Slightly different topic but:
Having build and test requirements separated would also help for
autopkgtest, cf. eg. #720458.
 

Cheers,
gregor

-- 
 .''`.  Homepage: http://info.comodo.priv.at/ - OpenPGP key 0xBB3A68018649AA06
 : :' : Debian GNU/Linux user, admin, and developer  -  http://www.debian.org/
 `. `'  Member of VIBE!AT & SPI, fellow of the Free Software Foundation Europe
   `-   


signature.asc
Description: Digital signature