Generally, I support the proposal.
However, the proposal seems to underestimate and underplay the amount of technical debt that the implementation will entail. The technical debt will not be neatly isolated to a couple of new runtime entrypoints. Various runtime functionality will need to special case tuples and/or EHC protocols and call into those new entrypoints when appropriate. Once we have variadic generics, this fallback code in the runtime will become difficult to test because executing it would require convincing the compiler to generate old-style code.
Beyond the runtime, special casing code will be added to the type checker (to recognize that tuples conform to these three protocols, to pretend that we have relational operators with arbitrary arity etc.), to various generics-related code that checks protocol conformances, to SILGen to codegen those relational operators and protocol witness tables etc.
If in future, when we add variadic generics, if we decide to allow generating old-style code by setting an older deployment target, then some technical debt in the frontend will remain, however, it would be easier to test the technical debt in the runtime. If we clean up the technical debt in the frontend and only generate new-style code, it would be difficult to test fallback code paths in the runtime.
Yes, it is a significant problem, as witnessed by various user feedback and previous efforts in SE-0015.
Yes, this attempt at fixing the problem, even though it takes shortcuts in the implementation, from the user's point of view will look like the eventual implementation based on variadic generics.
std::tuple in C++ is equatable and comparable, but interestingly not hashable -- and that is a know pain point.
Tuples in Rust are equatable (PartialEq, Eq), comparable (PartialOrd, Ord), and hashable (Hash). However, Rust only implements these traits up to the arity of 12, and it is considered a temporary limitation.
I read the proposal, I didn't participate in the discussion.