Thank you, everyone, for the discussion so far, and thank you, @Hzfengsy  for 
driving the proposal. After reviewing the thread and watching all the relevant 
conversations. I would like to come out and share my support for the proposal. 

I am making this statement [wearing Apache TVM 
hat](https://tvm.apache.org/docs/contribute/committer_guide.html?highlight=apache%20tvm%20hat#independent-project-management).

I would like to summarize a few important perspectives from our community 
members here as guidelines for community members:

##  How should we operate as a community?

When considering proposals, there are many factors being considered by members. 
A lot of them have to do with the impact to code:

- Impact to Code: cohesiveness to the overall vision,  testing, clarity among 
modules, quality, stability, the overall complexity of the codebase, and 
presentation to the users.

This is what we are getting used to in normal software development settings. 
There are even trade-off factors here. On the one hand, indeed, new modules 
bring different levels of impact on these perspectives depending on their 
scope. However, in many cases, new modules do not bring impact in a purely 
negative way. 

MLC(machine learning compilation) is a fast-evolving field. The ability to 
reinvent ourselves and keep up with innovation while keeping the main component 
stable is the key to survival in the ML landscape. PyTorch is exemplary in 
terms of development philosophy on bringing in related modules. In many ML 
frameworks such as PyTorch, allowing space for multiple relevant solutions(e.g. 
Dynamo, TorchScript, LazyTensor) to coexist and evolve is critical for success. 
It is also important to allow flexibility of growth rather than plan everything 
out in the beginning. When TorchFX first came out, there was no clear 
prediction of Dynamo being relevant. Even today, there is no detailed plan of 
replacing TorchScript with Dynamo. Nevertheless, the community members continue 
to use the relevant modules and have an evolving conversation. ML is fast 
evolving and we should never expect to lock down every aspect of a plan in the 
beginning. Instead, open doors for diverse community members to come and 
participate and contribute their perspectives. Such open philosophy is what the 
TVM community(or every successful ML OSS project) should aspire to be.

This brings us to another **very important** factor, which is OK to ignore in 
software development settings but should always but put first in Apache 
projects:

- Impact to the community: bringing in new community members and growing the 
community. A lot of that ties back into the "community over code principle".
When evaluating modules, we should certainly consider how the proposal empowers 
new users/developers. Can the proposal welcome new developers? Can they solve 
different needs of the community? The TVM project exists because of the 
community. 

That means we need to empower each member with different needs, and sometimes 
that could mean that we would do something different than our normal 
development rationales to empower the community members – especially when many, 
or even the majority of community members, shared their voice and support. This 
does not mean our original rationale is wrong, but we are more open-minded and 
bring that community empowerment as the first principle.

## How can we empower each other

Being in the same community means we share the same burdens(of maintenance, 
advocations) and joys together. Any process or system is not perfect, and the 
intention was never to assume people as adversarial. 

The first principle of the Apache community is community over code, which means 
we empower each other. Some in the discussion thread raised the question about 
what if a person operates in an outright stubborn manner – like declaring 
outright rejection of later S1/S2 proposals or code PRs without reviewing the 
additional context being brought up, and not having a constructive conversation 
with additional context. Such behavior would certainly be frowned upon in any 
OSS community,  and this is not a behavior I would expect from any 
committer/reviewers. 

This also comes from the exclusive mindset and inclusive mindset we have in the 
community. Indeed it is an additional burden for us to help maintain, and 
development the code that is less relevant to our interest. One could outright 
dislike code that causes regressions irrelevant to our own customer use cases. 
It is harder to directly settle a lot of those conversations through a simple 
technical debate since many can have disagreements about what are important 
parts – to some graphs IR and executor are important, to many other TVM users, 
they might only care about FFI and TensorIR while building their own graph 
integration. 

When in confusion, always remember to come back to the community. Remember that 
we empower each other. These are codes that are developed by members who also 
volunteer their time reviewing our code, writing test cases, and contributing 
to common foundation components such as codegen, FFI. While the need perhaps is 
less urgent to ourselves, empowering them would help the community to grow 
stronger.

I can give examples of when we do so. For example, the AOT proposal comes with 
quite a few complexities and burdens that not all of us fully agree to – a 
divergent ABI that could have been optimized through C Packed, an IR node that 
later caused regression in auto-scheduling. Extra code path that only supports 
a limited set of models and dynamism due to (reasonable) restrictions. To many 
of us, it is also not necessarily an executor that we need in our daily 
applications.

One could have forced the AOT proposal to always take C Packed that is 
consistent with other server-level modules, or block the module because they 
contain overlapping features that are implemented differently nor support all 
models.   We did not choose to do that; instead, we welcomed the modules 
because we knew that community members would need them and would benefit from 
them in a timely module establishment, even if some of the detailed plans still 
needed to be flushed out. We know that they will empower additional community 
members. A proposal for graph IR, or auto-scheduling layer is not that 
different in nature. While each module might need a different level of 
technical deliberation, community empowerment should always be an important 
factor. 

Time is also an important consideration – as we are facing competition, and 
time to market is important to ML. When reviewing proposals that have a lot of 
community support, we would always try to keep a constructive conversation 
going and facilitate the establishment.

Being inclusive and empowering each other is an important factor in bringing a 
welcoming and productive community. This does mean we need to take burdens, and 
we also openly contribute to each different perspective of the community that 
supports each other. 

I and many other PMC members have personally done so in evaluating past 
proposals (like the above example) and would expect our colleagues to do the 
same.


## How shall we handle disagreements 

Being in a big community means we have a diverse view. When one says, "this 
code produces this bug", likely no one will disagree. But as we evaluate code 
and community factors, each of us could bring disagreements because we might 
have our own opinion on how things should be done considering the factors.

Shall we always disallow new modules that have relevant features to coexist 
with existing ones? Should we outright reject the phased approach and always 
ask for a detailed plan before accepting a module? After considering the 
arguments, shall we empower community members so some of them can enjoy the new 
module, and help us to grow our developer community?

First of all, it is important to acknowledge that each of our views is both 
valid in many cases. It is very important to understand each others' view, and 
re-evaluate the proposal under such a context. Perhaps we should consider more 
impact to test in this case; perhaps we should put more weight on community 
empowerment. After acknowledging and understanding the views, having a 
conversation around the cases, there can still be differences of opinion, how 
do we as a community proceed? 

Stalling is not the right option because that would implicitly ignore the 
voices of those who want to move forward, especially when the majority of the 
community wants to do so. We also need agility and support for many who value 
innovation while maintaining high-quality code.




As a result, after acknowledging each others' views and having a constructive 
conversation, I recommend listening to the majority community's voices -- as it 
is a decision of the community, by the community, and for the community.

When in doubt, we choose community over code. That is why I support this 
proposal.


-- 
Reply to this email directly or view it on GitHub:
https://github.com/apache/tvm-rfcs/pull/95#issuecomment-1336463901
You are receiving this because you are subscribed to this thread.

Message ID: <apache/tvm-rfcs/pull/95/c1336463...@github.com>

Reply via email to