<div dir="ltr"><div>I personally see a difference between "subprojects" (like lld, clang, flang, circt ...) which are conceptually either independent from LLVM or built on top from a layering point of view ; and on the other hand things like the IDE, debugger, build scripts which are about LLVM itself and intended to serve users of LLVM.</div><div>The incubator process as I understand it has been introduced to address the former more than the latter.</div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Fri, Oct 30, 2020 at 12:33 PM Keane, Erich 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-width:1px;border-left-style:solid;border-left-color:rgb(204,204,204);padding-left:1ex">





<div lang="EN-US">
<div class="gmail-m_-1191293630924562252WordSection1">
<p class="MsoNormal">So, I thought that the whole idea of the ‘incubator’ was to take up tiers 2/3 until they were sufficiently baked for tier 1.  Is this intended to go against that for some things (that is, Bazel in this case)?<u></u><u></u></p>
<p class="MsoNormal"><u></u> <u></u></p>
<p class="MsoNormal"><b>From:</b> llvm-dev <<a href="mailto:llvm-dev-bounces@lists.llvm.org" target="_blank">llvm-dev-bounces@lists.llvm.org</a>> <b>On Behalf Of
</b>Geoffrey Martin-Noble via llvm-dev<br>
<b>Sent:</b> Friday, October 30, 2020 11:57 AM<br>
<b>To:</b> Jacques Pienaar <<a href="mailto:jpienaar@google.com" target="_blank">jpienaar@google.com</a>><br>
<b>Cc:</b> LLVM Dev <<a href="mailto:llvm-dev@lists.llvm.org" target="_blank">llvm-dev@lists.llvm.org</a>><br>
<b>Subject:</b> Re: [llvm-dev] Policy on support tiers<u></u><u></u></p>
<p class="MsoNormal"><u></u> <u></u></p>
<div>
<div>
<div>
<p class="MsoNormal">On Fri, Oct 30, 2020 at 11:36 AM Jacques Pienaar <<a href="mailto:jpienaar@google.com" target="_blank">jpienaar@google.com</a>> wrote:<u></u><u></u></p>
</div>
<blockquote style="border-style:none none none solid;border-left-width:1pt;border-left-color:rgb(204,204,204);padding:0in 0in 0in 6pt;margin-left:4.8pt;margin-right:0in">
<div>
<p class="MsoNormal"><a href="mailto:gcmn@google.com" target="_blank">+Geoffrey Martin-Noble</a> <u></u><u></u></p>
</div>
<p class="MsoNormal"><u></u> <u></u></p>
<div>
<div>
<p class="MsoNormal">On Fri, Oct 30, 2020 at 8:45 AM Renato Golin via llvm-dev <<a href="mailto:llvm-dev@lists.llvm.org" target="_blank">llvm-dev@lists.llvm.org</a>> wrote:<u></u><u></u></p>
</div>
<blockquote style="border-style:none none none solid;border-left-width:1pt;border-left-color:rgb(204,204,204);padding:0in 0in 0in 6pt;margin-left:4.8pt;margin-right:0in">
<div>
<p class="MsoNormal">Hi all,<u></u><u></u></p>
<div>
<p class="MsoNormal"><u></u> <u></u></p>
</div>
<div>
<p class="MsoNormal">It seems the BAZEL[1] discussion is going round in circles and many have suggested we encode the policy on the tiers of support we want from the community.<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"><u></u> <u></u></p>
</div>
<div>
<p class="MsoNormal">This is not what I think is the best, just what I have interpreted the "consensus" seems to think is the best. I may be completely wrong, please don't assume anything other than a faulty attempt at getting it right.<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"><u></u> <u></u></p>
</div>
<div>
<p class="MsoNormal">I tried to use different words like "must", "should", "could", "will", etc. to convey the right meaning, but I'm not a native English speaker, so feel free to tweak that to get the right balance.<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"><u></u> <u></u></p>
</div>
<div>
<p class="MsoNormal">Here it goes.<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"><u></u> <u></u></p>
</div>
<div>
<p class="MsoNormal">*** Tier 1: the core compiler, which *must* work at all times.<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">  * Front-ends, back-ends, middle-ends, libraries, core APIs, official projects and tools.<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">  * The CMake build infrastructure.<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">  * Builds on all first class citizen combinations of targets x OSs. [2]<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">  * Vim support (kidding!! :)<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"><u></u> <u></u></p>
</div>
<div>
<p class="MsoNormal">It must:<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">  * have noisy green bots<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">  * revert on failure policy<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">  * etc?<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"><u></u> <u></u></p>
</div>
<div>
<p class="MsoNormal">*** Tier 2: side projects that integrate with the compiler and that *should* work at all times.<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">  * Experimental targets, infrastructure and APIs, non-default cmd-line options<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">  * Alternative build systems (ex. GN, Bazel)<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"><u></u> <u></u></p>
</div>
<div>
<p class="MsoNormal">It must not:<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">  * Break or hinder tier 1<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">  * Increase validation noise beyond its scope<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"><u></u> <u></u></p>
</div>
<div>
<p class="MsoNormal">It should:<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">  * Have green buildbots, handled by the sub-community that cares about it<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">  * Have notifications only to those interested when things break (avoid bitrot)<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"><u></u> <u></u></p>
</div>
<div>
<p class="MsoNormal">Sub-communities that care about it *must* fix issues in them, but the rest of the community has no obligations to support it. Lack of maintenance *could* be subject to removal.<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"><u></u> <u></u></p>
</div>
<div>
<p class="MsoNormal">*** Tier 3: miscellaneous accessories<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">  * Helper scripts, editor files, debugger scripts, etc.<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">  * Whatever is detached enough that bit rot is irrelevant<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"><u></u> <u></u></p>
</div>
</div>
</blockquote>
</div>
</blockquote>
<div>
<p class="MsoNormal">I think bit rot is never really totally "irrelevant". Perhaps "detached and small enough that bit rot is a minor concern"? <u></u><u></u></p>
</div>
<blockquote style="border-style:none none none solid;border-left-width:1pt;border-left-color:rgb(204,204,204);padding:0in 0in 0in 6pt;margin-left:4.8pt;margin-right:0in">
<div>
<blockquote style="border-style:none none none solid;border-left-width:1pt;border-left-color:rgb(204,204,204);padding:0in 0in 0in 6pt;margin-left:4.8pt;margin-right:0in">
<div>
<div>
<p class="MsoNormal">It must not:<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">  * Break or hinder tiers 1 or 2<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">  * Increase validation noise beyond its scope<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"><u></u> <u></u></p>
</div>
<div>
<p class="MsoNormal">It should:<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">  * Have a sub-community that cares about it and maintain it<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"><u></u> <u></u></p>
</div>
<div>
<p class="MsoNormal">Sub-communities that care about it *should* fix issues in them, but the rest of the community has no obligations to support it. Lack of maintenance *will* be subject to removal.<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"><u></u> <u></u></p>
</div>
<div>
<p class="MsoNormal">cheers,<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">--renato<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"><u></u> <u></u></p>
</div>
<div>
<div>
<p class="MsoNormal">[1] <a href="http://lists.llvm.org/pipermail/llvm-dev/2020-October/146138.html" target="_blank">
http://lists.llvm.org/pipermail/llvm-dev/2020-October/146138.html</a><u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">[2] Existing definition of "first-class", could be updated / moved here.<u></u><u></u></p>
</div>
</div>
</div>
<p class="MsoNormal">_______________________________________________<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" target="_blank">https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev</a><u></u><u></u></p>
</blockquote>
</div>
</blockquote>
<div>
<p class="MsoNormal"><u></u> <u></u></p>
</div>
<div>
<p class="MsoNormal">Thanks for kicking this off Renato. This looks very similar to what I would've written after that discussion except that I'm not sure I see the clear distinction between when something should be considered tier 2 vs 3. It seems like if
 something is sufficiently big it's not *allowed* to be tier 3 and must have a buildbot and remain green? And tier 2 seems to be largely an extension of the "experimental targets" policy, but encompassing things that aren't targets.<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"><u></u> <u></u></p>
</div>
<div>
<p class="MsoNormal">Some additional constraints I would add:<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">1. Something in a higher tier may never depend on something in a lower tier.<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">2. Items in tiers <1 must always be simple to remove (`rm -rf /path/to/thing` ideally, although experimental backends also include some CMake options).<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">3. Items in tiers <1 must have clear documentation accompanying them indicating their less-supported status.<u></u><u></u></p>
</div>
</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>