> Unfortunately due to their market dominance and muddling of (hardware, OS, software distribution, and platform ecosystem), it's almost impossible to disentangle.
I think it is more complicated, and nuanced, than this.
I have a theory that the world can only support a maximum of 2 consumer computing platforms at a time, due to the cost of writing and porting software. Therefore causing a natural tendency towards either a monopoly (seen in the 90s and early 2000s) or a duopoly (the current smartphone era).
The fact is writing software is expensive. Developing cross platform frameworks is also incredibly difficult and in the case of Mobile, has taken a massive 3rd party entity (Facebook) the better part of a decade (React Native) to get even close to "working well" (with other solutions also being decade long projects). One can argue that during the first decade of Android vs iPhone, (2007 to 2017) that the cross platform solutions were all pretty terrible, thus the massive shakeup that React Native (for all its warts) caused.
Then there is the fact that developing a consumer OS is hard and expensive. Very few companies have the resources needed to make a consumer OS. Not just writing software, but localization, documentation, SDKs, UX work, security, update infrastructure, and so on and so forth.
Honestly I'd say today's current duopoly may even be a bad thing for small software companies, basically doubling development costs. Compare this to the 90s when releasing consumer software just meant compiling for a Microsoft OS and never worrying again because Microsoft handled forwards compatibility for you!
Contrast that to now days where you see applications to control smart appliances apps being discontinued left and right because companies cannot justify keeping 2 dev teams staffed so they can patch an app once every couple years when app store guidelines force changes.