Ye gods - I've slipped replying to this by a month now. Very sorry
about that. Well, I think I've managed to crawl out of the hole I fell
into.

So, I think the below sounds like it _could_ resolve most of my
concerns, with a few tweaks. Full disclosure: Personally, I would only
be actively interested in (3) and (4).

I personally don't have a huge interest in (2), and I'm already doing
(4) for OpenPlatformPkg. So I'm happy to use the
edk2-platforms/<platform branch> approach for this. With the added
statement that (2) platform branches should always be based off a UDK
(or similar) version, and (4) platform branches should always track
edk2/master fairly closely. For this reason, it may be better to
separate them into different namespaces - maybe edk2-platforms/stable-*
and edk2-platforms/devel-*?
(4) Platforms that have not rebased to edk2/master in a few (3?)
months should be considered abandoned and purged from the tree, but
potentially archived.

For (1) and (3) I think two strict rules would help maintain code
quality:
a) (1) is always a subset of (3), but not necessarily a strict subset.
b) Patches can only go into (1) after they have gone into (3)
Does this sound reasonable?

If these two rules are strictly followed, I think the risk of
incompatible core changes would be minimised, and compatible changes
would be fairly easy for the maintainers to guide back towards
edk2/master.

Finally, and I have left this out of the discussion until now:
The problem with binary-only components.
Would it be acceptable to people to have binary-only components in
these edk2-platforms branches?
If not, would it be more acceptable to have one or more branches in a
separate repository, and hold platforms that are somewhat incomplete
in edk2-platforms - in order to get access to the parts of these
platform ports that _are_ open?

Regards,

Leif

On Tue, May 10, 2016 at 03:52:10PM +0000, Kinney, Michael D wrote:
> Leif,
> 
> You raise some very good concerns.  I do not think edk2-platforms is
> intended to solve all of these, and I agree that a branch per
> platform can make some things much worse, especially if there are
> many different core overrides in platform branches.
> 
> We need to consider different types of platform ports and figure out the 
> right 
> landing zone for each.
> 
> 1) Platforms required to validate a core feature in edk2/master
> 2) Platforms that require a validated/stable release of edk2
> 3) Platforms that are always synced with edk2/master, but do not
>    improve edk2 core feature coverage.
> 4) Platforms that are under active initial porting efforts, have
>    stability issues, or code quality issues.
> 
> edk2/master works for (1)
> edk2-platforms/<platform branch> works for (2) and (4)
> As platforms in category (4) mature they migrate into (1), (2), or (3)
> 
> We do not have a landing zone for (3).  Maybe we can have a special
> branch in edk2-platforms that contains all the platforms in this
> category, so we can make sure things like common overrides and
> features common to many different platforms can be easily
> identified.  This special branch can be auto synced to edk2/master
> so incompatibilities introduced by platform changes or edk2/master
> changes can be quickly identified.
> 
> I am looking into a different proposal to add some tree organization
> to edk2/master.  Part of that includes a landing zone for vendor
> specific UEFI/PI device drivers that can be used by many different
> platforms.
> 
> Let's continue to refine the set of proposals here to address all of
> the important issues you have raised.
> 
> Best regards,
> 
> Mike
> 
> > -----Original Message-----
> > From: Leif Lindholm [mailto:[email protected]]
> > Sent: Tuesday, May 10, 2016 3:06 AM
> > To: Kinney, Michael D <[email protected]>
> > Cc: [email protected]
> > Subject: Re: [edk2] [RFC] EDK2 Platforms Proposal
> > 
> > Hi Mike,
> > 
> > Apologies for delay in responding, this was a topic I wanted to leave
> > some time to think about.
> > 
> > On Tue, May 03, 2016 at 04:30:36PM +0000, Kinney, Michael D wrote:
> > > Similar to edk2-staging, we also have a need to manage platforms
> > > that have been ported to edk2.  Jordan has created a repository
> > > called edk2-platforms and has created a branch for the
> > > minnowboard-max that uses a validated release of the UDK 2015 for
> > > the dependent packages:
> > >
> > > https://github.com/tianocore/edk2-platforms
> > >
> > > https://github.com/tianocore/edk2-platforms/tree/minnowboard-max-udk2015
> > >
> > > Instead of creating a branch per feature in edk2-staging, the
> > > proposal is to create a branch per platform in edk2-platforms.  The
> > > maintainer(s) that create and support a platform branch can decide
> > > if the platform is synced to edk2/master for dependent packages, or
> > > uses a stable release of the edk2 for dependent packages.
> > >
> > > This proposal provides an area for platform development so we can
> > > minimize the number of platforms that are included in edk2/master.
> > > It is important to keep some platforms in edk2/master so we can use
> > > those platforms to validate features in non-platform packages in
> > > edk2/master.  If a new platform does not add feature coverage to
> > > edk2/master, then a new edk2-platforms branch would be recommended.
> > >
> > > Please review the proposal below for edk2-platforms.
> > >
> > > If this proposal is accepted, then a review of the platform in
> > > edk2/master can Be done to see if any of them should be moved to
> > > branches in edk2-platforms.
> > 
> > First of all, let me reiterate - I very much want to see more public
> > platform code. To the extent this helps that happen, I am a strong
> > supporter.
> > 
> > However, this proposal does not really address the issues I've been
> > pursuing, and am currently staging in my OpenPlatformPkg tree:
> > - The ability to see when a core change breaks some/all platform
> >   ports.
> > - The ability to easily spot common code that should be turned into
> >   core libraries.
> >   - The ability to easily spot near-identical local overrides to
> >     common libraries that should turn into options in an existing core
> >     library.
> > - The ability to share drivers for common components between different
> >   platforms, benefitting from feature additions and bugfixes.
> > 
> > It may not be intending to do this, which is fine, but I'd like to
> > share a few warnings - seen both in Linaro's Linux kernel work and in
> > Linaro's UEFI work when the "platform feature branch" approach was
> > used (also try an Internet search for "vendor kernels"):
> > - Keeping each platform port in a separate branch will inevitably lead
> >   to incompatible changes to core components.
> >   - Some of these changes will be fundamentally incompatible with
> >     other platforms, because they were made in complete isolation from
> >     those other platforms.
> >   - Mandating that all ports are based on a UDK version reduces the
> >     scope of these incompatibilities, but ports will inevitably want
> >     access to newer features that what is provided in UDK, so will
> >     cherry-pick ... and then some will change that.
> >     - But EDK2 has reasonably high churn on internal interfaces, and
> >       taking the step from one UDK to the next could mean a
> >       substantial amount of work at once, instead of progressively
> >       adjusting to core changes. (Acknowledging that this may well be
> >       preferable for some.)
> >   - Preventing this would cause higher maintainer overhead than
> >     letting the platforms into the main tree.
> > 
> > So I guess my main question is - should this be seen as a complement
> > to what I am looking for, or should I write an alternative proposal
> > trying to incorporate the use-cases this one covers as well as the
> > ones I am looking for?
> > 
> > Regards,
> > 
> > Leif
> > 
> > > <proposal>
> > >
> > >
> > >
> > > Problem statement
> > > =================
> > > Need place on tianocore.org where platforms can be maintained by the EDK 
> > > II
> > > community.  This serves several purposes:
> > >
> > > * Encourage more platforms sources to be shared earlier in the
> > >   development process
> > > * Allow platform sources to be shared that may not yet meet all edk2
> > >   required quality criteria
> > > * Allow platform source to be shared so the EDK II community may
> > >   choose to help finish and validate
> > > * Allow more platforms to be used as part of the edk2 validation and
> > >   release cycle.
> > > * Not intended to be used for bug fixes.
> > >
> > >
> > > Proposal
> > > ========
> > > 1) Create a new repo called edk2-platforms
> > >
> > >      a) edk2-platforms is a fork of edk2
> > >
> > >      b) edk2-platforms/master tracks edk2/master
> > >
> > >
> > > 2) edk2-platforms discussions can use the existing edk2-devel
> > >    mailing list for design/patch/test.
> > >
> > >      Use the following style for discussion of a platform branch in
> > >      edk2-platforms repo.
> > >
> > >      [platforms/branch]: Subject
> > >
> > >
> > > 3) All commits to edk2-platforms must follow same edk2 rules
> > >    (e.g. Tiano Contributor's Agreement)
> > >
> > >
> > > 4) Process to add a new platform to edk2-platforms
> > >
> > >      a) Maintainer sends patch email to edk2-devel mailing list
> > >         announcing the creation of a new platform branch in
> > >         edk2-platforms with Readme.MD.  Readme.MD is in root of
> > >         platform branch with summary, owners, status, build
> > >         instructions, target update instructions, OS compatibility,
> > >         known issues/limitations, links to related materials, and
> > >         anything else a developer would need to use the platform
> > >         branch.
> > >
> > >      b) Maintainer creates platform branch in edk2-platforms
> > >
> > >      c) Maintainer is responsible syncing platform to edk2/master or
> > >         supported edk2 branch.
> > >
> > >
> > > 5) Process to update sources in feature branch
> > >
> > >      a) Commit message subject format:
> > >
> > >           [platforms/branch PATCH]: Package/Module: Subject
> > >
> > >      b) Directly commit changes to platform branch or if community
> > >         review is desired, then use edk2-devel review process.
> > >
> > >
> > > 7) Process to remove an edk2-platforms branch
> > >
> > >      a) Stewards may periodically review of platform branches in
> > >         edk2-platforms (once a quarter?)
> > >
> > >      b) If no activity for extended period of time and platform is
> > >         not being maintained and is no longer functional then
> > >         stewards send email to edk2-devel to request deletion of
> > >         platform branch.
> > >
> > >      c) If no objections from EDK II community, then platform branch
> > >         is deleted and archived at
> > >
> > >         https://github.com/tianocore/edk2-archive.
> > >
> > >
> > > 8) How to evaluate a platform in edk2-platforms
> > >
> > >      a) Clone edk2-platforms/[branch name]
> > >
> > >      b) Following instructions in Readme.MD to build firmware and
> > >         update target platform
> > >
> > >
> > > </proposal>
> > > _______________________________________________
> > > edk2-devel mailing list
> > > [email protected]
> > > https://lists.01.org/mailman/listinfo/edk2-devel
_______________________________________________
edk2-devel mailing list
[email protected]
https://lists.01.org/mailman/listinfo/edk2-devel

Reply via email to