<div dir="ltr"><div dir="ltr"><br></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Sun, Jun 21, 2020 at 2:04 PM Mehdi AMINI via llvm-dev <<a href="mailto:llvm-dev@lists.llvm.org">llvm-dev@lists.llvm.org</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="ltr"><div dir="ltr"><div dir="ltr"><div>Hey Chris,</div><div><br></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Sat, Jun 20, 2020 at 3:43 PM Chris Lattner via llvm-dev <<a href="mailto:llvm-dev@lists.llvm.org" target="_blank">llvm-dev@lists.llvm.org</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div style="overflow-wrap: break-word;">Hi all,<div><br></div><div>Today, we maintain a high bar for getting a new subproject into LLVM: first a subproject has to be built far enough along to “prove its worth” to be part of the LLVM monorepo (e.g. demonstrate community, etc).  Once conceptually approved, it needs to follow all of the policies and practices expected by an LLVM subproject.</div><div><br></div><div>This is problematic for a couple reasons: it implicitly means that projects have to start *somewhere else* but proactively decide to follow LLVM design methodology and principles in the hope of being accepted.  It is sometimes socially difficult to get these projects going because there are many other forces that could encourage other practices.  For example, I personally encountered this at Google with MLIR - “why aren’t you using Google coding standards?”, several of us are currently discussing this in a new skunkworks project in the “compilers for hardware” world, and the Flang and other projects have found this challenging in the past.  Once the project gets to a point of critical mass with the “wrong” approach, it is very difficult and expensive to convert to the LLVM style, and from a social perspective, inertia sometimes leads to forking off to separate projects instead of folding back in to LLVM.</div><div><br></div><div>A former colleague recently suggested the idea of introducing an incubator process of some sort (e.g. xref the <a href="https://incubator.apache.org/" target="_blank">Apache version of this idea</a>).  I think this is a really interesting idea, and it is much easier now that the majority of the “official” code is in the LLVM monorepo.</div><div><br></div><div>Here is a sketch of how this could work:</div><div><br></div><div> - We maintain the same high bar to get into the LLVM monorepo, LLVM CI etc.  No change here.</div><div><br></div><div> - We have a very light-weight proposal process that allows people to create incubator projects in the LLVM organization, with no code up front.  The project would be required to have e.g. a charter document and README.</div></div></blockquote><div><br></div><div>Since the "incubator" aspect of this is that these projects are intended to integrate the monorepo ultimately (or be deleted from the organization), that means that the charter when starting such a project should have consensus that it conceptually belongs to the monorepo ultimately, right? I assume this is the main part of the "light-weight proposal process"?<br></div></div></div></div></div></blockquote><div><br></div><div>I think that logically follows, but I would be explicit about evaluating proposals fairly pragmatically (and we could write down some guidelines). There are multiple reasons that I have seen for wanting such incubation repositories, and many of them fall more into the governance and community-alignment category versus a strictly visible code connection to the monorepo (from the outset). There is also an element to incubating new things that creates a certain evolutionary expectation (i.e. might prompt further thought or organizational work on the monorepo vs just a "it would slot in here" kind of judgment). Also, I've seen a "what you can't see and talk about, you can't collaborate on" theme that would bias me to have more of a guideline-driven default accept policy vs consensus-based evaluation of the technical details. It should be fairly easy to get in, and consequently also, fairly easy to move out (in whole or part) if the alignment doesn't emerge.</div><div><br></div><div>If you were to give me 60 seconds to formulate what my checklist for consideration would be, here are some of the points:</div><div><ol><li>Is this expected to build on or extend by way of dependency an existing core LLVM project?</li><li>If successful, could this project provide components that would be of use to a broader audience that uses LLVM technology?</li><li>Are the project goals roughly "in kind" with other parts of LLVM (i.e. more language/compiler based rather than, say, word processor based)?</li><li>Is there potential, tangible mutual advantage to having the LLVM Foundation's governance model applied to the project from its inception?</li><li>Will the LLVM Foundation hosting this project aid LLVM contributors to better collaborate on the project?</li></ol><div>If it were me voting, I would consider #4 and #5 to be sufficient to vote yes, regardless of any ambiguity or unresolved issues about technical alignment. That is all off the top of my head and not deeply thought through.</div></div><div><br></div><div>So in short, at the outset, I would expect to at least be able to imagine a future where some portion of the project graduates to the monorepo, but I would be fairly lenient on being able to see the path from the outset.</div><div> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="ltr"><div dir="ltr"><div dir="ltr"><div class="gmail_quote"><div></div><div><br></div><div><br></div><div> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div style="overflow-wrap: break-word;"><div><br></div><div> - Such projects are required to follow the LLVM developer policy, coding standards, CoC, etc, but can define their own stability and evolution process, code owners, etc.</div><div><br></div><div> - When the project is ready to graduate, it would follow the existing process for becoming a first-class part of the mono repo.</div><div><br></div><div> - We have some policy on when to retire/delete projects, which can be ironed out the first time it comes up (e.g. start with a nomination).</div><div><br></div><div> - We could even try to help encourage new projects to include a ‘mentor’ that has experience with the LLVM project to help nudge things in the right direction and encourage proper development approach.</div><div><br></div></div></blockquote><div><br></div><div><div style="color:rgb(0,0,0)">+1 for me overall.</div><div style="color:rgb(0,0,0)"><br></div><div style="color:rgb(0,0,0)">Thanks,</div><div style="color:rgb(0,0,0)"><br></div><div style="color:rgb(0,0,0)">-- </div><div style="color:rgb(0,0,0)">Mehdi</div></div><div><br></div><div> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div style="overflow-wrap: break-word;"><div></div><div>What do you think?  Is anyone interested in helping to write up a more detailed proposal?</div><div><br></div><div>-Chris</div><div><br></div><div><br></div></div>_______________________________________________<br>
LLVM Developers mailing list<br>
<a href="mailto:llvm-dev@lists.llvm.org" target="_blank">llvm-dev@lists.llvm.org</a><br>
<a href="https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev" rel="noreferrer" target="_blank">https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev</a><br>
</blockquote></div></div></div></div>
_______________________________________________<br>
LLVM Developers mailing list<br>
<a href="mailto:llvm-dev@lists.llvm.org" target="_blank">llvm-dev@lists.llvm.org</a><br>
<a href="https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev" rel="noreferrer" target="_blank">https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev</a><br>
</blockquote></div></div>