Closed mschuwalow closed 1 month ago
This can happen when inlining: https://github.com/zio/zio/blob/96d948af08897f4b853286e512da115272100a22/project/BuildHelper.scala#L54
Ah, so you are saying the only reason that zio-streams is depending on that synthetic method is due to inlining and it wouldn't be there if compiled with inlining disabled?
That would be awesome, as that means that this issue is purely related to zio-streams (and an error on our side having different versions of zio and zio-streams) and can not show up in other projects.
Just tested it, indeed the synthetic method is not used when inlining is disabled. That means that this problem can only occur due to version mismatches between zio and zio-streams, not external libs.
Thanks for the help @joroKr21, closing the issue.
We just had a very interesting binary compat issue. Note that while the involved libraries are zio and zio-streams, the issue shows up in public interfaces so other projects might be affected as well.
The involved versions are as follows: zio: 2.1.9 zio-streams: 2.1.7
Running code with this setup fails with the following error:
Digging into the issue, ZIO.uninterruptible changed the following way between the two versions:
2.1.7:
2.1.9:
This seems innocent enough and should be a binary compatible change, but what is actually getting called by zio-streams is this synthetic method (2.1.7):
This method does not exist on 2.1.9. I would have expected mima to catch this, but seems it either does not or we have misconfigured it here. IMO this is a very worrying issue, as this happens on a public interface effectively undermining our backwards compatibility guarantees.