I think one fundamental problem that might need to be addressed somehow, if we want to catch these binary incompatibilities like we had with Metrics, is that if we increase a version of one spec (Metrics in this case) and leave another spec (Fault Tolerance) unchanged, and that FT spec is compiled against the previous version of Metrics, we could hit these binary incompatibilies.
And an umbrella-wide TCK might, or might NOT, reveal this problem. That depends on whether the affected code (code that will stop working) is located in the TCK itself, or in the 'old' API that was compiled against something that is not backward compatible. In the FT case I think the problem would NOT be revealed, because the offending code is in the TCK itself:
https://github.com/eclipse/microprofile-fault-tolerance/blob/2.0.2/tck/src/main/java/org/eclipse/microprofile/fault/tolerance/tck/metrics/util/MetricGetter.java#L343 so if this line had been in an umbrella TCK instead, it would then have been compiled against Metrics 2.1 API and the tests would have passed!!
I think the only way to ensure compatibility would be to require that all specs and TCKs in an umbrella depend only on specs that are in the same umbrella too. But that is a bit problematic if we sometimes want to increase just some specs, and leave the rest without update.
And even if we did this, we still wouldn't be sure that applications compiled against and older umbrella will continue working with the new umbrella without recompilation. But this is more of a problem in the world of Jakarta EE than for microservices, because with traditional app servers it is normal to have thin JARs that you just deploy on a newer version of the server without recompiling it (in which case it could break due to binary incompatibilities). In the microservices world you usually have to recompile to application, which mitigates the problem.
Jan
On Monday, October 28, 2019 at 9:01:20 PM UTC+1, Ken Finnigan wrote: