Case in point: big data ecosystems, where numerous overlapping implementations rarely share components or use common APIs and layers. They also tend to lack standard wire protocols and each processing framework (think Spark, Presto and Flink) has its own data source API.